You are on page 1of 28

Tutoriel VB6/VBA

http://jannaud.fr/visual-basic

Accueil Blog Programmation Visual Basic Applescript CamL Java Cocoa / iPhone Crer son site Web Codes Sources de tout Humour

Visual Basic 6 - VBA


Pour coder en Visual Basic, il faut disposer de Visual Studio par exemple, ou de Visual Basic. (les "Express Edi on" sont mises gracieusement disposi on par Microso ). J'u lise la version 6 (qui correspond l'anne 1998) car celles d'aprs (les ".net") n'ont pas survcu, et c'est ce e version qu'on retrouve dans VBA (les macros Excel, ...) Rappelons brivement les avantages de Visual Basic :

Visual Basic convient trs bien aux dbutants (et aux autres !), car l'diteur a une "Comple on List" : vous crivez quelque chose, et tout d'un coup hop une liste droulante s'ouvre, et voud indique ce que le programme "a end" cet endroit. Trs u le en cas de blanc ! Vous pouvez aussi ne taper que les deux premires le res du nom cherch et vous gagnez en rapidit. Ensuite, VB a t construit dans le but de rer prot des logiciels dj faits sur votre ordinateur (tant qu' faire, ... on ne va pas rinventer la roue !) ce qui est trs pra que, et trs beau d'un point de vue u lisateur de voir que VB peut nous ouvrir un tableau Excel, y enregistrer pour nous des valeurs, ... Windows nous ouvre ses portes et nous permet tout !

Contribuer

Enn, VB est fourni avec un Assistant empaquetage et dploiement. En clair, une machine qui vous cre un setup professionnel !

Contactez-moi

Vous trouverez dans cet ouvrage de quoi apprendre VB6. C'est bien simple, ce livre m'a tout

1 sur 28

21/03/2012 16:53

Tutoriel VB6/VBA

http://jannaud.fr/visual-basic

Accueil Blog Programmation Visual Basic Applescript CamL Java Cocoa / iPhone Crer son site Web Codes Sources de tout Humour
Visual BASIC 6 en 21 jours Greg Perry Meilleur prix EUR 14,00 ou neuf

appris. Vous aurez dans ce livre construire des pe tes applica ons simples, pas pas, et vous allez dcouvrir 1001 techniques essen elles, entre le mul mdia, les bases de donnes, Excel, faire de vraies applica ons professionnelles, ... Mon premier livre de programma on et sans doute le meilleur inves ssement que j'ai jamais fait. D'autre part, par exprience, vous verrez qu'un site internet ne remplacera jamais un livre papier. Ce e version est en franais.

Conseils
Je ne vous conseillerai que trop le site VBFrance et sa mailing list : il y a beaucoup d'astuces, ... que l'on ne peut pas inventer tout seul. D'ailleurs je ne sais mme pas comment les gens les trouvent. Il y a plein de pe ts bouts de code dont on aura toujours besoin un moment ou un autre dans notre vie, comme me re des icones nos menus, rendre une par e de la fentre transparente, ... Je vous conseille aussi d'aller voir ma page de codes sources, o je mets pas mal de programmes en ligne, ce qui peut tre trs u le pour avoir une vision d'ensemble de la physionomie d'un programme en VB

Crer une interface u lisateur


Pour comprendre la logique de Visual Basic, il faut se dire qu'un logiciel, c'est 2 choses : une interface (u lisateur), et le code qui est derrire pour grer les vnements (clics, ...) et intragir avec l'u lisateur par le biais justement de l'interface. Et bien VB est fait exactement de ce e manire : il y a une par e "interface", c'est elle qui s'ouvre en premier quand on fait nouveau projet, et une autre par e, le code qui se cache derrire. Vous pouvez prendre des controles dans la barre sur la gauche, et les glisser - dposer sur la fentre. Si vous trouvez que vous n'avez pas assez de contrles ou si vous en cherchez

Contribuer

Contactez-moi

2 sur 28

21/03/2012 16:53

Tutoriel VB6/VBA

http://jannaud.fr/visual-basic

Accueil Blog Programmation Visual Basic Applescript CamL Java Cocoa / iPhone Crer son site Web Codes Sources de tout Humour

un en par culier, faites Ctrl+T ou Projet->Components et faites ce qu'il vous plat. Construisez votre interface de ce e manire. Dans l'espce de pe t tableur sur la droite gurent les proprits des contrles (ou plutt du contrle slec onn). Vous pouvez changer le nom, la proprit Cap on, ... si a vous chante. Double cliquez sur un contrle pour arriver la par e "Code". Visual Basic cre automa quement pour vous une nouvelle procdure / fonc on / mthode associe l'vnement 'Click' sur ce contrle. Sur la liste droulante tout en haut gauche gurent tous les contrles de la fentre, et sur la liste de droite l'vnement associ (si vous dcidez d'associer un vnement). Et voila, vous tes prts coder !

Astuce pour avoir de l'aide


Certaines fonc ons internes de Visual Basic ne sont pas compltement dtailles ici, et ce pour 2 raisons : La premire c'est que si vous faites Projets -> Explorateur d'objets, vous vous retrouvez avec toute la liste des fonc ons supportes par VB, et elles sont trs bien expliques, et mme classes par thme (chaines de caractres, tableaux, ...). La seconde c'est que vous avez accs ce e liste depuis le code : tapez Strings. par exemple (sans oublier le point) et vous verrez apparaitre la liste de toutes les fonc ons s'y rapportant. De mme, si mavar est un objet spcial, le fait d'crire mavar. vous ouvrira une liste de toutes les fonc ons ou mthodes applicables mavar. Mais vous verrez a vient tout seul. Rappel : [n] dsigne que n est un paramtre op onnel

Structures de controle
Contribuer

Il n'y a pas d'accolades en Visual Basic pour dterminer des blocs de code, comme en C++ pour dire que faire dans une boucle for. Ici, cela ressemblerait plus du html par exemple : on ouvre une "balise", et on la referme plus loin.
Dim x as integer, y as double, z as string

Contactez-moi

3 sur 28

21/03/2012 16:53

Tutoriel VB6/VBA

http://jannaud.fr/visual-basic

Accueil Blog Programmation Visual Basic Applescript CamL Java Cocoa / iPhone Crer son site Web Codes Sources de tout Humour

(devinez !). Autres types possibles pour la dclara on de variables : oat, byte, currency (c'est quand meme un nombre) et d'autres plus loin. Float, currency et double sont pour les nombres virgule, string les chaines de caractres, byte les nombres de 0 255 (qui ennent donc sur 1 octet = "byte" en anglais)
x = 2

et l ... ? :D
Option Explicit

Se situe tout en haut d'une feuille ("Form"). Toutes les variables dclares ensuite (avant la prochaine fonc on / vnement) seront globales la feuille. Pour crer des variables TRES globales, crez un module (Projet -> Ajouter -> Module), et dans le Op on Explicit de celui-ci me ez les variables que vous voulez. Condi onnement
if ... then ... elseif ... then 'ceci est un commentaire : elseif est ATTACHE ! ... elseif ... else ... end if

On peut aussi crire une condi on if sur une seule ligne, sans u liser de end if if (x < 0) then x = (-x) le Select case : remplace le if i = 1 then ... else if i = 2 then ... else ... par exemple. a fait plus joli mais a sert honntement pas grand chose.
Select case nom case "papa" ... case "maman" ... case else ... End Select

Contribuer

Contactez-moi

Remarque : avec les nombres, on peut aussi avoir : case >= 3 par exemple.

4 sur 28

21/03/2012 16:53

Tutoriel VB6/VBA

http://jannaud.fr/visual-basic

Goto

Accueil Blog Programmation Visual Basic Applescript CamL Java Cocoa / iPhone Crer son site Web Codes Sources de tout Humour

La fameuse instruc on goto, trs dcrie des "pros". Moi je la trouve bien pra que.
goto label ... label:

Le label peut se situer avant l'instruc on goto, dans le code ! Mais il doit toujours tre dans la mme procdure/fonc on !! Goto peut servir tout, mme sauter plusieurs boucles la fois ! Plus qu'u le. Boucles
for k = 1 to 10 [step 2] ... next k do [while condition] ... loop

On peut me re 'loop while' si l'on veut (mais rien me re aprs do alors). On peut aussi remplacer while par un l (pour les condi ons nga ves) L'instruc on 'break' pour les boucles for ou do...loop est Exit For et Exit Do et amne directement la sor e de la boucle.
for each a in b 'b doit tre une 'collection' (dfini plus loin) ... next

Dclara on de fonc ons


Contribuer private function mafonction(a as integer, b as string, optional c = 2) as double 'ou un autre type ! ... mafonction = 3.1415 end function

Contactez-moi

A noter que l'on peut placer ses fonc ons n'importe o dans le code, en par culier que

5 sur 28

21/03/2012 16:53

Tutoriel VB6/VBA

http://jannaud.fr/visual-basic

l'on n'est pas oblig de placer plus haut sur le chier une fonc on qui est u lise par une autre plus bas. Il n'y a pas non plus de prototype crire. Accueil Blog Programmation Visual Basic Applescript CamL Java Cocoa / iPhone Crer son site Web Codes Sources de tout Humour
public, private, ...

Dclara on d'une fonc on, public si la fonc on est dans un module et doit etre visible d'ailleurs Procdures
private sub mafonction(a as integer, b as string, optional c = 2) ... ... end sub

C'est la dclara on d'une fonc on qui ne renvoie pas d'argument ; autrement dit, une procdure. Paramtres passs par rfrence ou par valeur : crire mafonction(ByRef a as integer, byval b as integer, byref c as integer) ... pour avoir a et c passs par rfrence au lieu de par valeur, qui est par dfaut. Je conseille FORTEMENT de toujours me re byval, surtout quand vous passez des paramtres comme des chanes ou des classes, mme si c'est par dfaut. On ne sait jamais ! Et le jour o vous vous en rendrez compte, comme moi vous comprendrez que vous venez de perdre 4 heures de suite de dbogage. A bon entendeur... ;)
a = f(x, y, z)

pour appeler f et stocker le rsultat dans a Mais aussi... f x,y,z Quand f est une fonc on et qu'on se cher de son rsultat (elle excute quelque chose quand mme et renvoie si oui ou non elle a fait une erreur par exemple) ou quand f est une procdure.
Call f(x, y, z) Contribuer

La faon non paresseuse d'appeler une procdure, plus apprcie du compilateur Sta c a as integer Si vous me ez ce code dans une fonc on, cela dclare la variable a comme une variable sta que : sa valeur sera conserve aprs la n de la fonc on (ou de la

Contactez-moi

6 sur 28

21/03/2012 16:53

Tutoriel VB6/VBA

http://jannaud.fr/visual-basic

procdure), ce qui peut tre pra que. En gros, c'est comme une variable globale, mais dont la visibilit est limite la procdure ou fonc on. Accueil Blog Programmation Visual Basic Applescript CamL Java Cocoa / iPhone Crer son site Web Codes Sources de tout Humour

Chaines de caractres
Prlude : c'est un type un peu par culier : la fois tableau et variable, on ne sait jamais. En VB, contrairement beaucoup d'autres langages objets, la chane est comme une variable integer par exemple : on peut la passer en paramtre sans craindre que ce soit une rfrence seulement qui soit passe, ... Bref, il ne faut pas s'inquiter ici. D'autre part, a en on !!! Les indices commencent donc 1, et non pas 0 comme c'est souvent le cas dans d'autres langages !!!
Dim dim a = b = a as string b as string * 10 'limite la taille de b 10 caractres "bonjour" "thomasthomas" 'b vaudra "thomasthom" en ralit

len(a)

diminu f de "length" : nombre de caractres de la chaine


LTrim(a), RTrim()

suppriment les espaces en tte (L("e ")Trim) ou en queue (R("ight")Trim) de la chaine


chaine1 & chaine2

concatna on de 2 chaines
Mid("bonjour", 3, 4)

"njou" : 3 dit o commencer, et 4 le nombre de caractres prendre. Ne pas me re d'argument la place de 4 permet de prendre la chane jusqu' la n. Mid n'est pas une fonc on seulement, c'est aussi une "caractris que" : on peut faire mid(a, 3, 4) = "abcd", et ainsi a -> "boabcdr"
Contribuer

L'expression split
dim tableau() as string 'dclare un tableau sans en prciser la taille tableau = split("bonjour les amis", " ")

Contactez-moi

ultra-puissant : si on le met " " a va dtacher les mots d'une phrase. Si on le met "o" a va dtacher "bonjour" en {"b","nj","r"}. On peut ensuite accder ces par es
21/03/2012 16:53

7 sur 28

Tutoriel VB6/VBA

http://jannaud.fr/visual-basic

avec tableau(1), tableau(2,), ... : tableau.lbound et tableau.ubound donnent les indices de dbut et de n du tableau cr de ce e manire. (l pour 'lower' et u pour 'upper') Accueil Blog Programmation Visual Basic Applescript CamL Java Cocoa / iPhone Crer son site Web Codes Sources de tout Humour
s1 = Replace(s1, "toto", "tagada")

Remplace toutes les occurences d'un certain mo f dans une chaine. (ici : "toto" par "tagada").
Instr(s1, s2)

Permet de savoir si une chaine est incluse dans une autre ; renvoie alors la premire posi on de celle-ci, 0 sinon. Tableaux La cra on de tableaux est quelque chose de vraiment trs sympa, en VB : les indices commencent o l'on veut ! D'autre part, les tableaux sont soit de taille xe au dpart, soit modelables
Dim t(1 to 10) as integer

Dclare un tableau de 10 en ers, index par des indices allant de 1 10


Dim u(2 to 4, 5 to 8) as string

Dclare un tableau de 3 lignes (indexes par des indices allant de 2 4) et de 4 colonnes (5 -> 8) contenant des chaines de caractres. Point important : on a dj dit que les chaines de caractres ne sont pas vraiment traites comme des pointeurs en VB, et c'est donc tant mieux, sinon rien ne nous dit que la dclara on d'un tableau comme a ne cre pas en fait 3 * 4 chaines iden ques (i.e si on change une chaine, toutes les autres changent puisque ce seraient en fait des pointeurs). Mais tout va bien, ce n'est pas a qui se passe ! A en on cependant aux tableaux sur des objets nous, parce que la oui, c'est des pointeurs. Il faut alors ini aliser chaque case du tableau avec t(i, j) = new ... Remarque sur les indices qui commencent o l'on veut Comme vous pouvez le constater sur l'exemple ci-dessus, ce n'est pas vraiment agrable. Faites les commencez 0 ou 1 je dirai, suivant votre habitude, mais quand mme plutt 1 vu la syntaxe des boucles for de VB. (en C++ a va plus vite de me re for(i = 0; i < n; i++) que i<= n) Nombre de dimensions Il me semble qu'on a le droit des tableaux de dimension jusqu' 64, mais ce n'est pas

Contribuer

Contactez-moi

8 sur 28

21/03/2012 16:53

Tutoriel VB6/VBA

http://jannaud.fr/visual-basic

Accueil Blog Programmation Visual Basic Applescript CamL Java Cocoa / iPhone Crer son site Web Codes Sources de tout Humour

certain. En pra que, 2 dimensions susent (mme si l'on gre des ensembles 3 dimensions ! dim t(1 to n, 1 to 3) as Double et on a alors 3 colonnes pour grer les 3 coordonnes de nos n points) Tableaux de taille non xe au dpart
Dim t() as integer ... (et plus loin dans le code) Redim [preserve] t(1 to n)

Preserve sert faire en sorte que si on aggrandit ou diminue notre tableau de 1 case seulement (par exemple), VB va faire en sorte de conserver le maximum d'lments leur valeur d'origine ; en clair il va recopier une par e de notre ancien tableau dans le nouveau A noter que l'on peut dclarer des tableaux plusieurs dimensions sans connaitre qu'une seule des dimensions (la dernire), sinon c'est impossible.

Les listes ou 'Collec on'


Ce sont des objets assez simples et bien faits, mais pas forcment trs rapides (ne les u lisez pas pour des listes de plus de 10000 lments par exemple, surtout si vous voulez avir un accs squen el). Il n'y a pas beaucoup de fonc ons toutes faites sur les Collec on (comme inverser la collec on, la trier, ...).
Dim maliste as New Collection

Ceci cre une nouvelle liste. Elles sont toujours non types !. Les indices commencent toujours 1.
maliste.AddItem "bonjour"

Remarquez qu'il y a des arguments op onnels pour insrer un lment un indice par culier
Contribuer maliste.item(n) maliste.count Contactez-moi

le nombre d'lments de la liste.

9 sur 28

21/03/2012 16:53

Tutoriel VB6/VBA

http://jannaud.fr/visual-basic

Accueil Blog Programmation Visual Basic Applescript CamL Java Cocoa / iPhone Crer son site Web Codes Sources de tout Humour

Faites a en on lorsque vous parcourez une liste, si vous supprimez des lments, l'indice des lments suivants peut changer ! Et plutot que de faire for i = 1 to maliste.count ...maliste.item(i)... next i, faites plutot for each element in maliste, ... element... next sinon l'ordinateur va chaque fois repar r de l'indice 1 pour calculer item(i) ce qui est trs lent, surtout vers la n de la liste, au lieu de tout parcourir d'un seul bloc.

Les types prdnis, ou enregistrements


Personnellement je ne les trouve pas forcment u les, mais bon, faites comme bon vous semble. La seule u lit que j'y vois, c'est que si l'on a la liste des posi ons x d'objets (de dessins par exemple) et une autre la liste des y, et dans une autre la liste des z, on peut tout combiner en un seul ce qui peut faire plus propre au niveau du code. Mais VB ne gre pas trs bien ce genre de type, donc vaut mieux ne pas trop faire de choses comme ca. Pour ne pas prendre de risque, personnellement, j'u lise un tableau plusieurs dimensions, mme si c'est plus moche au niveau du code. A en on : je parle ici des versions jusqu' la 6, car il parait que a a chang depuis et que VB est devenu ne ement plus orient objet. En tout cas, jusque dans l 6, on ne peut pas se faire de tableaux de type prdni. Contrairement ce qu'on pourrait croire, quand on passe un type prdni dans une fonc on, il est pass par valeur aussi ( moins de prciser ByRef). En gros il y a une copie de faite.
Type montype ( dclarer dans un module, c'est prfrable) x as integer y as integer nom as string aaa as unautretypeamoi end type

Contribuer

et pour ini aliser :


dim a as montype a.x = 2 a.y = 4

Contactez-moi

10 sur 28

21/03/2012 16:53

Tutoriel VB6/VBA

http://jannaud.fr/visual-basic

a.nom = "bonjour" ...

Accueil Blog Programmation Visual Basic Applescript CamL Java Cocoa / iPhone Crer son site Web Codes Sources de tout Humour

Les boites de dialogue


Ne pas abuser de leur codage simplissime ! a devient trs vite nervant pour l'u lisateur.
a = Msgbox("bonjour a va ?", vbyesno + vbquestion + vbdefaultbutton1, "un titre)

Renvoie vbyes si l'u lisateur a cliqu sur "Oui", vbno sinon. Si on se che de la valeur renvoye, on peut me re comme d'habitude (cf n du paragraphe sur les fonc ons) msgbox "a va ?", vb..... On n'est pas oblig de choisir l'image (vbcri cal, vbinforma on, vbques on ou vbexclama on), et on peut me re vbokonly, vbyesnocancel, ... en boutons (VB nous propose tout seul des possibilits) Autre type de boite : a = inputbox("Entrez votre age ici", "textepardefaut",
"titre ici")

Tandis qu'on se che souvent du rsultat de la premire (le logiciel annonce une erreur, une sauvegarde qui s'est bien passe, ...) dans la deuxime il est plus important. Il est en type string toujours, donc vrier que l'u lisateur a bien rentr un nombre, ... a renvoie "" si l'u lisateur clique sur "Annuler" Les boites plus "intelligentes" : choisir une couleur, sauvegarder un chier, ... Windows met gracieusement notre disposi on son savoir faire en ma re de botes de dialogue : nous sommes tous habitus ce que quand on fait "Ouvrir" ou "Enregistrer Sous" une certaine boite un peu comme l'explorateur apparaisse. L'u lisateur est famili avec ce type de boites donc ce e fois il ne faut pas s'en priver ! Ctrl+T pour faire apparatre la grande liste des contrles OCX rajouter, et choisir Microso Common Dialog. Elle apparat alors sur la pale e de gauche. Il faut la placer sur la fentre, n'importe o de toute faon elle sera invisible. Nommons-la "boite" pour simplier. Voici divers codes : Penser au pralable xer la proprit CancelError de la bote True : cela nous renseigne sur le fait que l'u lisateur a cliqu sur "Annuler"
private sub changer_couleur()

Contribuer

Contactez-moi

11 sur 28

21/03/2012 16:53

Tutoriel VB6/VBA

http://jannaud.fr/visual-basic

Accueil Blog Programmation Visual Basic Applescript CamL Java Cocoa / iPhone Crer son site Web Codes Sources de tout Humour

on error goto erreur: boite.showColor Me.backColor = boite.color exit sub erreur: Msgbox "Vous n'avez pas souhait changer la couleur de fond" 'boite de dialogue qui nerve l'utilisateur end sub private sub ouvrir() on error goto erreur: boite.showOpen if boite.filename <> "" then ouvrir_fichier(boite.folder & boite.filename) ' c'est vous d'crire le code d'ouverture d'un fichier !!! Vous croyez quoi :) ' (cf systme de fichiers pour plus d'infos) exit sub end if erreur: Msgbox "Vous n'avez pas souhait ouvrir de fichier" 'boite de dialogue tout aussi intempestive end sub

Et il y a encore beaucoup d'autres boites : showPrint, showSave, ...

Les classes
Pour en crer : Fichier, ajouter -> Class Module (la mme boite que pour les Form, Module, ...). Pensez renseigner le champ "name" de votre classe. Ce sera un peu comme un nouveau type pour vos variables. A une dirence : c'est que ce e fois, c'est un pointeur sur votre classe, c'est toujours pass par rfrence, donc il faut faire a en on, mais c'est souvent plus pra que.
Option Explicit public nom as string public age as integer private poids as integer private function mafonctionpriveequifaitjenesaisquoi(ByVal a as integer) ... End Function

Contribuer

Contactez-moi

12 sur 28

21/03/2012 16:53

Tutoriel VB6/VBA

http://jannaud.fr/visual-basic

// Renseigner les champs d'initialisation, c'est mieux (quivalent un constructeur)

Accueil Blog Programmation Visual Basic Applescript CamL Java Cocoa / iPhone Crer son site Web Codes Sources de tout Humour

Puis dans le code (associ une fenetre ou un module ou ...) : dim thomas as new nomdemaclasse thomas.age = 22 thomas.nom = "thomas" dim pierre as nomdemaclasse set pierre = thomas ' il faut souvent associer set l'assigna on une valeur en ce qui

concerne les objets (ex : les images, ...) msgbox pierre.age ' ache 22 : pierre est un POINTEUR ou une REFERENCE THOMAS. Autrement dit 2 noms pour le mme objet. Changer l'un change l'autre.

Lecture / criture dans les chiers


Une par e que les gens trouvent souvent dure. C'est dommage, je la trouve vraiment trs simple en Visual Basic. Il y a deux types d'accs un chier, que ce soit en lecture, ou en criture. Soit on lit un chier ligne par ligne jusqu' (si l'on veut) la dernire, soit on demande de lire le n ime octet d'un chier. (idem pour l'criture). Quelque chose qui fait peur et qui peut tre contre-intui f est qu'il faut toujours pour la sauvegarde craser l'ancien chier et le remplacer en rement par un nouveau. (C'est comme ca. Pensez l'implmenta on sur le disque dur d'un chier, et ce qu'impliquerait l'inser on d'un seul caractre en plein milieu d'un chier par exemple).

Exemples Notre programme est un rpertoire : nom + numero de telephone. On peut stocker les informa ons sur le disque par un chier texte avec par exemple sur la premire ligne le nombre de contacts, puis n fois le nom et la ligne d'aprs le numro de tlphone etc. On pourrait aussi faire avec la seconde mthode mais cela semblerait moins judicieux.
Contribuer

Contactez-moi

Notre programme a beaucoup d'op ons enregistrer, de type "oui" ou "non" ('acher ...' ou 'ne pas acher ...') ou des couleurs ou autre. On peut alors stocker pour gagner de la place dans le premier octet du chier d'op ons, 'true', puis 'false' dans le 2eme, puis la couleur du fond d'cran prfr de l'u lisateur sur les 4 octets qui suivent, puis ...

13 sur 28

21/03/2012 16:53

Tutoriel VB6/VBA

http://jannaud.fr/visual-basic

C'est moins parlant, mais en mme temps sur un chier texte, le fait d'crire sur la premire ligne 'true', puis 'false' sur la 2eme, ... ne serait gure plus parlant. Accueil Blog Programmation Visual Basic Applescript CamL Java Cocoa / iPhone Crer son site Web Codes Sources de tout Humour Pour ouvrir un chier (qu'importe le type) : Windows accde un chier par un ux de donnes, et il ouvre donc un canal. En gros, au lieu de dire "lis la ligne du chier "Bureau\toto.txt"" on va dire "lis la ligne du chier associ au ux du canal 34". La ques on qui vient naturellement (ou pas) sur les lvres est : comment savoir quel est le numro de canal ? Rponse : C'est nous qui le choisissons. Mais comme on n'a pas le droit un numro dj pris, il y a une fonc on toute faite qui gre a : FreeFile() -> renvoie un en er. Passons la pra que ! Le mode squen el C'est dire tous les trucs les uns la suite des autres
dim f as integer dim ligne as string f = freefile() open "C:\.....\fichier.doc" for append as #f do until EOF(f) line input #f, ligne 'excuter le code en rapport avec la ligne lue ici loop close #f 'on ferme le flux / canal

Un autre avantage est de garan r une certaine scurit : l'u lisateur ne pourra pas s'amuser modier les op ons directement en ouvrant le chier texte. Un inconvnient est que c'est pas facile facile de se rappeler quel octet correspond quelle op on et a induit souvent des erreurs, surtout quand on veut ajouter de nouvelles op ons au fur et mesure du droulement du programme, ... (mme si les op ons on les charge au dbut et aprs c'est ni). C'est d'ailleurs pour a que le xml est de plus en plus u lis (vous pouvez trs bien sauvegarder sous ce format en crivant vous mme vos balises dans le chier texte ! Rien ne l'interdit)

Contribuer

Contactez-moi

14 sur 28

21/03/2012 16:53

Tutoriel VB6/VBA

http://jannaud.fr/visual-basic

Accueil Blog Programmation Visual Basic Applescript CamL Java Cocoa / iPhone Crer son site Web Codes Sources de tout Humour

'EOF' signie "End of File". Donc on lit les lignes jusqu' ce que la n du chier soit a einte. Si l'on sait l'avance le nombre de lignes, par exemple 10, ou bien s'il est crit dans la toute premire ligne de notre chier :
dim f as integer, n as integer, i as integer dim ligne as string f = freefile() open "C:\.....\fichier.doc" for input as #f line input #f, ligne n = cint(ligne) for i = 1 to n line input #f, ligne 'excuter le code en rapport avec la ligne lue ici Next i Close #f 'A NE PAS OUBLIER !!!!

Pour crire dans le fichier, c'est pareil : 'si le fichier existe dj on le supprime if (dir("C:\....\toto.txt") <> "" ) then Kill "C:\....\toto.txt" end if dim f as integer, i as integer f = freefile() open "C:\....\toto.txt" for append as #f print #f, n for i = 1 to n print #f, nom_contact(i) 'si on a un tableau de contacts next i close #f 'A NE PAS OUBLIER !!!!

Contribuer

Bref, c'est facile, vous voyez ! prin #numerochier, cequonveut et line input #numerochier, cequonveut. Remarque :Vous pouvez u liser "input" au lieu de "line input", mais cela lira les mots un par un, au lieu de lire ligne par ligne. C'est pas forcment plus pra que, car si on crit le nom de l'u lisateur, et qu'on veut le lire au prochain lancement du programme, et que le nom de famille c'est De Gaulle, et bien on va lire un mot au lieu de deux, et tout le reste va tre dcal. Le mode binaire

Contactez-moi

15 sur 28

21/03/2012 16:53

Tutoriel VB6/VBA

http://jannaud.fr/visual-basic

Accueil Blog Programmation Visual Basic Applescript CamL Java Cocoa / iPhone Crer son site Web Codes Sources de tout Humour

C'est encore plus simple : dim f as integer dim b() as byte f = freefile() redim b(1 to filelen("C:\...\toto.txt") open "C:\...\toto.txt" for binary as #f get #f, 1, b close #f

Et en criture : idem avec put au lieu de get. (pensez eacer le chier au pralable pour viter certains bugs) Ici, b() est un tableau d'octets ('byte' en anglais). A la lecture, on lui donne la taille du chier puis on l'ini alise avec get. A l'criture, on possde un tableau d'octets (dj aects : ce sont les donnes enregistrer) et on envoie a dans le chier. A noter que le 1 de "get #f, 1, b" signie ici : lire les octets du chier du canal numro f par r du 1er et placer a dans b(). Dans notre cas cel revient lire tout le chier puisque b() a la mme taille que le chier ( cause de lelen()). Cependant on peut trs bien dcider de lire les octets un par un, et on pourrait faire dim c as byte ...for i = 1 to n... get #f, i , c A noter que si l'on veut stocker une variable plus grosse, int par exemple (4 octets peut-tre, ou plus ??) on n'a pas besoin de faire de mul ples divisions euclidiennes pour connaitre l'criture en base hexadcimale de notre en er, et stocker a byte par byte (octet par octet). L'ordinateur gre a tout seul. Il faut quand mme faire gae au dcalage induit par le fait que a prend 4 octets.
Exemple : dim a as integer, b as integer 'code d'ouverture avec freefile, ... get #f, 1, a get #f, 5, b close #f

Contribuer

Le mode alatoire Il existe en fait un troisime mode d'accs un chier, mais je le trouve tellement pas pra que que je ne l'ai jamais u lis. C'est le mode "alatoire" : open "C:\..." for Random as #f. C'est un peu comme le mode Binary, sauf que l il faut dire l'avance quels types de donnes seront o. En fait c'est surtout pour stocker des

Contactez-moi

16 sur 28

21/03/2012 16:53

Tutoriel VB6/VBA

http://jannaud.fr/visual-basic

Accueil Blog Programmation Visual Basic Applescript CamL Java Cocoa / iPhone Crer son site Web Codes Sources de tout Humour

enregistrements (= types prdnis, du genre "nom" puis "n tlphone") o il faut dnir par avance la taille que l'on rserve chacun. Par exemple 20 caractres max. pour le nom. Je trouve ce mode un peu bte parce que l'on ne sait jamais par avance ce que va rentrer l'u lisateur, et d'autre part, si quelqu'un a un nom 5 le res seulement cela fait 15 caractres non u liss (mme si vu la taille des disques durs de nos jours, on peut se le perme re).

Le systme de chiers
Le code qui suit est un peu complexe, et la documenta on son sujet est peu fournie sur internet. La raison est qu'il u lise un truc un peu "louche" : la fonc on CreateObject ; en gros a permet d'u liser des fonc ons propres Windows mais qui ne sont pas des fonc ons connues de VB.
Dim oFs As Object Set oFs = CreateObject("Scripting.FileSystemObject") Dim Dim Dim Dim Dim oDossier As Object oSousDossier As Object oSousDossiers As Object sDossier As String f, f2

Set oDossier = oFs.GetFolder("C:\...\Bureau\") 'oDossier est l'objet "Dossier" associ la chane de caractres (ici : le bureau) Set oSousDossiers = oDossier.SubFolders 'tous les sous-dossiers du Bureau. C'est une collection d'objets 'Dossiers' Set f = oDossier.Files 'la collection de tous les fichiers de l'objet 'Dossier', donc tous les fichiers du bureau for Each f2 in f me.print f2.Name Next

Contribuer

Contactez-moi

For Each oSousDossier In oSousDossiers sDossier = sNomDossier & oSousDossier.Name & "\" Me.Print sDossier Next

17 sur 28

21/03/2012 16:53

Tutoriel VB6/VBA

http://jannaud.fr/visual-basic

Ges on des vnements et des objets


Accueil Blog Programmation Visual Basic Applescript CamL Java Cocoa / iPhone Crer son site Web Codes Sources de tout Humour La ges on d'vnements est in mement lie l'existence d'une interface graphique. La cra on de celle-ci est dveloppe en tte de ce e page. Pour grer les vnements associs des objets, double-cliquez sur l'un deux, puis dans la fentre du code, dans la liste droulante en haut droite, slec onnez l'vnement qui vous intresse. Vous avez un choix assez grand. U lisez ensuite les proprits fournies (ou pas) en argument pour faire ce que vous voulez (ex : mousedown renvoie le x et le y du curseur de la souris en coordonnes rela ves, o l'origine est en haut gauche de l'objet). Les procdures ainsi dnies peuvent tre appeles tout comme n'importe quelle autre procdure de votre confec on. Pour accder aux proprits d'un objet, donnez le nom de l'objet puis faites "." (sans les guillemets ^^). Le plus simple est d'crire Me. Me a veut dire "moi" en anglais. En clair, c'est votre fentre. '.' va ensuite vous donner la liste de tous les objets sur votre fentre. Vous pouvez bien entendu vous adresser au contrle d'une autre fentre (par exemple Form2) en faisant Form2. ... Form2 doit par contre tre loade, ce qui ce fait comme suit :
Load Form2 Form2.show 'si vous voulez Form2.Label1.Caption = "bonjour ! je suis contrl depuis le code de la form1" 'il faut dj avoir un label1 sur Form2

On ne peut pas vraiment crer des objets comme a, la vole, c'est pas fait pour, et VB va trs vite ramer : le mieux est de placer vos objets ds le dbut. Mais on peut quand mme le faire si l'envie nous en dit : Crer un contrle, n'importe lequel, et me ez sa proprit index 0. (sans le point, c'tait un signe de ponctua on ce e fois). Disons que c'est Text1(0). Dans le code :
For i = 1 to 10 Load Text1(i) Text1(i).Visible = true Text1(i).top = text1(i - 1) + 300 Next i ...

Contribuer

Contactez-moi

Unload Text1(i) pour en supprimer un.

18 sur 28

21/03/2012 16:53

Tutoriel VB6/VBA

http://jannaud.fr/visual-basic

Proprits usuelles
Accueil Blog Programmation Visual Basic Applescript CamL Java Cocoa / iPhone Crer son site Web Codes Sources de tout Humour Form_Load() : C'est ce qui est appel au lancement du programme Form_QueryUnload() : C'est ce qui est appel l'appui sur la croix de la fentre. Me re cancel 1 pour ne pas fermer la fentre Microso .Forms 2.0 pour avoir des contrles qui tolrent les alphabets orientaux (chinois, japonais, ...) GotFocus : quand un contrle prend le focus, par exemple quand on clique dessus, ou alors quand on se "dplace" avec la touche tab. (on peut u liser SetFocus sur un controle pour lui envoyer le focus)
Contribuer

Vous apprendrez trs vite les proprits des objets si vous vous amusez lire les listes droulantes qui s'orent vous, dans le code. Les proprits principales restent .Visible (pour cacher un contrle ou pas), .height, .left, .width, .top (hauteur, largeur, position), .caption, .text, .ToolTipText (la pe te bulle d'aide qui apparait quand on laisse la souris 5 secondes de suite sur le mme contrle), .AddItem (pour les list, combobox, ...), .Tag (c'est une variable propre chaque contrle qui ne sert rienen tant que tel, mais pourtant trs u le et on peut y me re ce qu'on veut : chane de caractres, en er, ... Exemple d'u lisa on : vous avez plein de boites de saisie de texte, et vous voulez que certaines aient une saisie alpha-numrique bloque. Et bien vous allez me re toutes vos textBox avec le mme nom mais un index dirent, me re par exemple "chire" dans tous les Tag de vos TextBox bloques, et aprs dans l'vnement keypress, vous allez grer suivant que le .Tag de votre textbox soit "chire" ou pas.

Evenements et contrles par culiers

Drag & Drop : trs pra que : gre le glisser-dposer de n'importe quel contrle votre place. Me re la proprit dragmode d'un contrle 'Automa c' pour cela, puis :
Private Sub Form_DragDrop(Source as Control, X as Single, Y as Single) Source.Move X, Y End Sub

Contactez-moi

19 sur 28

21/03/2012 16:53

Tutoriel VB6/VBA

http://jannaud.fr/visual-basic

Remarque : par Source.name on a accs au nom d'un contrle, et donc on peut dans Form_DragDrop grer les contrles au cas par cas si l'envie nous prend. Accueil Blog Programmation Visual Basic Applescript CamL Java Cocoa / iPhone Crer son site Web Codes Sources de tout Humour PopupMenu : tout simplement gnialissime. Permet d'ouvrir un menu, souvent au clic droit sur un objet. Pour cela crez vous un nouveau menu avec Menu Editor (clic droit sur une form, dans le crateur d'interface ini al), me ez le en visible = false (si vous voulez), ne me ez pas de Cap on l'lment racine, mais donnez quand meme un nom, par exemple 'mnuderoulant'. Ensuite, par exemple dans Form_MouseDown :
If Button = 2 then 'clic droit Me.PopMenu Me.mnuderoulant end if

Les onglets : Ctrl-T, et ajouter Microso SSTabs. La ges on est ensuite assez simple : on place nos contrles comme d'habitude. Un tableur : Ctrl-T, et ajouter MsFlexGrid. MSFlex1.TextMatrix(ligne, colonne) = "toto" pour me re quelque chose Les 'Frame' : ils ont plutt voca on tre des conteneurs. Exemple : si l'on veut dcorrler des Op on Bu on (= boutons "radio") il faut les me re dans des conteneurs, sinon quand on clique sur l'un a dsac ve tous les autres. Essayez pour comprendre ce que je dis, sinon ce n'est pas la peine. C'est l'aaire de 30 secondes, mme pas besoin d'une seule ligne de code, juste de placer des Op on Bu on sur la fentre. a permet de cacher plein de contrles d'un coup : on met beaucoup de contrles dans un Frame, puis on fait Frame1.visible = false, au lieu de le faire pour chaque objet du Frame. Trs pra que. L'essayer, c'est l'adopter. DriveListBox, DirListBox, FileListBox : achent la liste des chiers d'un dossier, la liste des sous-dossiers d'un dossier, et la liste des dossiers d'un Driver. Pour les corrler, Drive1_Change (double clic sur Drive1) : Me.Dir1.Path = Me.Drive1.Drive, Me.File1.Path = Me.Dire1.Path et dans Dir1_Change : Me.File1.Path = Me.Dir1.Path. En fait, ds qu'on change de dossier il faut ractualiser la liste des chiers (pour pointer vers le nouveau dossier) et idem pour le driver.

Contribuer

La PictureBox
Contactez-moi

C'est l dedans que je fais tous les dessins que j'ai faire, c'est fait pour, comme son nom

20 sur 28

21/03/2012 16:53

Tutoriel VB6/VBA

http://jannaud.fr/visual-basic

Accueil Blog Programmation Visual Basic Applescript CamL Java Cocoa / iPhone Crer son site Web Codes Sources de tout Humour

l'indique. Je vous conseille de me re sa proprit scaleMode Pixel au lieu de Twip sinon les eets peuvent tre ina endus. En gros, 1 pixel = 15-20 twips. On se demande bien quoi peuvent servir les twips tan donn qu'un pixel est une unit indivisible, mais bon... Me ez aussi AutoRedraw True, sinon si vous placez une autre fentre devant votre PictureBox, a va eacer le dessin dessus.
Me.Picture1.line(x1, y1)-(x2, y2), vbblue [,B ou BF] : trace une ligne bleue sur la

pictureBox Picture1 de la fentre ; B veut dire que a fait pas une ligne, mais le rectangle associ, et BF dit que ce rectangle sera rempli ('box' et 'box full')
Dim a as stdPicture set a = loadPicture("C:\...\image.jpg ou bmp") Me.Picture1.Paint(a, x, y[, width, height]) 'si l'on veut faire un aggrandissement ou pas de notre image

Les coordonnes commencent toujours en haut gauche d'un contrle, et l'axe des y est orient vers le bas, ce qui est assez droutant, pour le moins au dbut
SavePicture Me.Picture1.Image, "C:\Bureau\image.bmp" pour sauvegarder une image.

Cela veut dire que ce qui est dessin sur la PictureBox est stock/accessible via la proprit image de celle-ci.

Remarque sur Direct X


Vous voyez qu'il est assez simple d'u liser une PictureBox, alors qu'il n'en est pas de mme pour DirectX. Comment choisir ? Je vous conseille de faire d'abord votre jeu (ou autre) en dessinant sur une PictureBox, et si c'est lent, de passer DirectX. L'avantage de DirectX, c'est qu'on se fait une Sub spciale o l'on dessine tout. Alors que sur une PictureBox, il faut eacer ce qu'on dplace, pour le re-dessiner plus loin, ce qui est plus contraignant. En gros pour un serpent une PictureBox ira trs bien. Aprs... vous de voir ce qui vous convient le mieux. Il y a au moins 5 codes u lisant DirectDraw dans la par e codes sources. Faites des copier-coller pour u liser DDraw votre tour !

Contribuer

Contactez-moi

Commandes en vrac (Excel, ges on des touches, chiers *.res, ...)

21 sur 28

21/03/2012 16:53

Tutoriel VB6/VBA

http://jannaud.fr/visual-basic

Randomize Timer puis rand

Accueil Blog Programmation Visual Basic Applescript CamL Java Cocoa / iPhone Crer son site Web Codes Sources de tout Humour
Set

renvoie un nombre r au sort entre 0 et 1. Randomize n'est faire qu'une fois, en dbut de programme, pour rini aliser le gnrateur de nombre alatoire.
Timer

C'est le nombre de secondes coules depuis 00h00. Trs prcis. Permet de chronomtrer des choses au millime prs.
CInt(), CDbl(), CString, ...

Ces fonc ons conver ssent n'importe quoi en Int, Double, String, ... A en on : Cint("2+3") ne marche pas ! Il faut crire vous mme un algorithme pour ce genre de chose, mais on n'en a pas besoin souvent non plus ! (cf codes sources)
Format()

Transforme n'importe quoi en une chane de caractres avec les spcica ons voulues. Exemple : format(3.14, "00.0000") = "03.1400". On peut remplacer les 0 par des # pour ne pas me re de 0 inu lement : Format(2.345678, "#.##") = "2.34"
isnumeric()

Renvoie true si une chane ne caractre peut tre conver e en nombre grce aux fonc ons de conversions CInt, Cdbl ou C...
Asc et Chr

Renvoient respec vement le code Ascii d'un caractre, et le caractre associ un code Ascii. Trs u liss en pra que (cf un peu plus bas ges on des appuis touches). Il faut souvent me re Set devant le nom d'un objet pour lui assigner quelque chose. Exemple : Set liste as new Collec on. a veut dire que liste tait dj une ... liste/Collec on, mais qu'on laisse tomber celle-ci pour en recrer une nouvelle.
DoEvents

Contribuer

Demande l'ordinateur de faire une "pause" notre programme pour qu'il puisse traiter tout ce qu'il a en mmoire et qu'il veut faire depuis longtemps. A u liser avec parcimonie, sauf peut tre de temps en temps dans certaines boucles. Crer un excutable Fichier->Make project1.exe (le nom de votre projet la place de Project1) pour crer un

Contactez-moi

22 sur 28

21/03/2012 16:53

Tutoriel VB6/VBA

http://jannaud.fr/visual-basic

Accueil Blog Programmation Visual Basic Applescript CamL Java Cocoa / iPhone Crer son site Web Codes Sources de tout Humour

.exe. A en on, si vous u lisez dans votre programme des images de votre dossier image loades depuis une ligne de commande type Loadpicture("C:\Bureau\Thomas \monimage.jpg"), il y a de trs fortes chances pour que a ne marche pas chez quelqu'un d'autre. Faites vous un dossier Data par exemple, ou Images, que vous placez dans le mme dossier que votre projet. Rfrez vous aux images par App.Folder & "\Images\monimage.jpg", ce qui est une adresse rela ve, et non plus absolue. App est l'abbrvia on de "Applica on". Il faudra ainsi livrer votre programme avec le dossier Images, et dire aux u lisateurs de placer ce dernier dans le mme dossier que le .exe. Crer un Setup On en a souvent besoin, par exemple si votre programme s'accompagne d'images, et que le dossier images doit tre plac dans le mme dossier que l'excutable, ou bien si votre programme u lise des dll peu communes, ce qui arrive souvent, car lorsque VB s'installe, il installe des tas de contrles (MSFlexGrid, ...) qui sont donc sur votre ordinateur, mais pas sur celui d'un u lisateur lambda. Il y a un u litaire spcial, livr avec VB, qui permet de faire un Setup juste avec votre chier .exe. Il s'agit de "Assistant Empaquetage et Dploiement". Il va dterminer tout seul quels sont les composants inclure votre projet qui risquent de ne pas tre sur un autre ordinateur. Il fonc onne trs bien, mais par contre c'est vous de dire qu'il faut inclure le dossier 'images' par exemple. Les 'handle' A chaque nouveau contrle cr Windows a ribue un numro unique perme ant de l'iden er. Pour tous les contrles, mme le contrle inclut dans le 4eme onglet du Frame du 2eme onglet. Le handle est accessible par moncontrole.hwnd. Connaissant le handle d'un objet, on peut donc esprer demander Windows certaines choses, par exemple quelle est la taille du contrle de hwnd numro... ou qu'est ce qu'il y a crit dedans. C'est ce que fait ce e source. Le truc aussi c'est que a u lise un API qui donne le hwnd du contrle sous la souris. Mais c'est pas magique qu'un tel API existe, puisque Windows doit toujours savoir si on clique qui (= quel contrle = quel handle, donc) transme re l'vnement.

Contribuer

Excel
Contactez-moi

Me re tout d'abord Excel en rfrence au projet (comme on le ferait pour une dll par
23 sur 28 21/03/2012 16:53

Tutoriel VB6/VBA

http://jannaud.fr/visual-basic

exemple) : Projet -> References -> Cocher Excel Accueil Blog Programmation Visual Basic Applescript CamL Java Cocoa / iPhone Crer son site Web Codes Sources de tout Humour
dim xlapp as Object, xlbook as object, xlsheet as object Set xlapp = New Excel.Application Set xlbook = xlapp.Workbooks.Open("C:\Bureau\toto.xls") Set xlsheet = xlbook.Sheets("Aube") xlsheet.Cells(ligne, colonne).Value = "bonjour" xlapp.ActiveWorkbook.Close False xlapp.Quit Set xlapp = Nothing

Ges on des appuis touches sur le clavier


Pour interdire la saisie autre que numrique par exemple, dans un TextBox : dans l'vnement keyPress, on reoit KeyAscii. On peut alors faire if (KeyAscii < Asc('0') Or KeyAscii > Asc('9')) then KeyAscii = 0. De mme, si on dcide (pour rire), qu' chaque fois qu'un 'a' est tap, de le remplacer par un 'b', on fait if KeyAscii = Asc('a') then KeyAscii = Asc('b'). On se sert souvent du KeyAscii = 13 (touche Entre) pour que l'u lisateur n'ait qu' appuyer sur Entre, au lieu de relcher le clavier pour se servir de sa souris et clicquer sur "Ok" ou "Valider" par exemple : If KeyAscii = 13 then Call Command_Valider_Click() Si vous avez juste besoin de grer un peu les touches dans un jeu qui ne va pas forcment vite (si si a existe ! cf le jeu worms dans ma page de codes sources, et il marche trs bien) vous pouvez u liser l'vnement keydown ou keypress de la form (je recommande plutt keydown, car keypress c'est plus pour les le res que pour les touches du genre ches, control, ...). Sinon ...
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer ' dclarer dans Option Explicit, ou en public dans un module

Contribuer

Contactez-moi

dim a as integer a = GetAsyncKeyState(37) 'flche gauche (38, 39, 40, correspondent ' aux flches droite, bas, haut, dans un ordre dterminer) if a <> 0 then ... end if

24 sur 28

21/03/2012 16:53

Tutoriel VB6/VBA

http://jannaud.fr/visual-basic

Accueil Blog Programmation Visual Basic Applescript CamL Java Cocoa / iPhone Crer son site Web Codes Sources de tout Humour

A en on : a = 0 si et seulement si l'tat de la touche n'a pas chang depuis le dernier appel la fonc on (avec la mme touche en paramtre) c'est dire que si la dernire fois c'tait appuy, le joueur a laiss enfonc la touche depuis. C'est pour a qu'il faut ini aliser Form_load() en esprant que le joueur n'appuie sur aucune touche au moment o le jeu se lance, et faire du getasynckeystate sur tous les numros qu'on u lisera.

Fichiers *.res
Tlchargez ici une source u lisant les chiers .res pour copier discrtement un chier .exe sur votre ordinateur. Rassurez-vous a ne le fera pas chez vous car mon chier .res n'est pas livr avec le programme. Tlchargez ici un chier .res contenant toutes les images d'un jeu de cartes de 52 cartes (+ joker + explica on). Ultra-pra que. Ces chiers se crent grce Visual C++. Il servent principalement stocker d'autres chiers "l'intrieur" de notre programme VB. En eet on peut avoir un excutable qui se trouve dans un dossier, et dans ce mme dossier me re des images ou tout autre type de ressources. Mais si l'on fait a, cela veut dire que l'u lisateur peut rcuprer nos belles images pour les u liser ses ns propres. Et on ne veut pas forcment si l'on est goste (ou si l'on aime le droit la proprit). D'autre part, si l'excutable doit tre plac dans le mme dossier que d'autres images pour fonc onner, ce n'est pas forcment trs pra que non plus, parce qu'il faut l'expliquer aux u lisateurs, et on n'a pas non plus envie de crer un Setup pour tout.

Cra on d'un chier .res


Soit on lance Visual C++, et on fait nouveau chier *.res, et on inclut des images une par une. Soit on n'a pas que des images me re. Alors crez un nouveau document texte avec le bloc-notes, et crivez autant de lignes que vous avez de chiers ajouter. Les lignes sont du genre : logiexe EXE C:\Bureau\logiciel.exe Vous n'tes pas obligs de me re EXE parce que vous avez un chier *.exe, mais c'est plus pra que. En fait, le premier item (ici : "logiexe") est le nom de votre ressource dans le chier .res que vous allez crer, le second (ici : "EXE") est le nom du "dossier" dans lequel votre chier sera mis (toujours dans le chier .res), et le troisime item (ici :

Contribuer

Contactez-moi

25 sur 28

21/03/2012 16:53

Tutoriel VB6/VBA

http://jannaud.fr/visual-basic

"C:\....exe") indique au "compilateur de ressources" o trouver le chier sur votre ordinateur. Accueil Blog Programmation Visual Basic Applescript CamL Java Cocoa / iPhone Crer son site Web Codes Sources de tout Humour Faites clic droit sur votre projet dans l'arborescence d'en haut droite, et Add le, puis slec onnez votre chier .res tout beau tout neuf. Faites :
Dim Data() as Byte Data = LoadResData("logiexe", "EXE") ou Data = LoadResData("fichier2", "DOSSIER1") pour les images : Set Me.Picture1.Picture = LoadResPicture("image1", "BMP")

Enn enregistrez votre chier texte du bloc notes en .rc et non pas .txt. Ouvrez votre .rc avec Visual C++, et faites Enregistrer sous... et l choisissez .res comme extension. Voila c'est ni.
Rcapitulatif : dans le bloc-notes, fichier1 DOSSIER1 C:\....toto.bmp fichier2 DOSSIER1 C:\....maman.jpg fichiertuesmoche DOSSIERMOCHE C:\....moche.avi ... enregistrer en .rc

U lisa on d'un chier .res depuis VB

o vous l'avez compris, image1 peut trs bien tre une jpg mme si elle est dans le dossier "BMP"

Jouer de la musique
Il y a encore une fois 2 manires : avec Direct Sound (cf la source de Phoenix), ou avec un objet spcial (que l'on insre donc en faisant Ctrl+T, ou Projet->Composants) : le Microso Mul mdia Control. J'en met un sur ma form par musique ou son que je voudrais jouer. Il faut renseigner 'Filename' (le .wav ou .mp3 (jamais essay)) et on peut me re en Visible=False pour cacher un peu. A en on, si ce n'est pas fait, ce n'est pas parce qu'on clique sur le bouton Play que a va marcher. Idem avec Pause, ... !!! C'est nous de grer l'vnement "clic sur le bouton ||", "clic sur |>", ... Mais a se fait bien. A Form_Load : Form1.MMControl1.Command = "Open", Form1.MMControl1.Command = "Play" pour jouer, et Form1.MMControl1.Command = "Prev" pour reme re 0 la "bande
21/03/2012 16:53

Contribuer

Contactez-moi

26 sur 28

Tutoriel VB6/VBA

http://jannaud.fr/visual-basic

son". Accueil Blog Programmation Visual Basic Applescript CamL Java Cocoa / iPhone Crer son site Web Codes Sources de tout Humour

Codes sources et liens


Vous trouverez dans ma page codes sources : des jeux : des serpents dirents dont un avec une pe te intelligence ar cielle, si on peut appeler a comme a (mais essayez quand mme de ba re l'ordinateur et on en reparlera !!); un space invader (u lisa on de Direct Draw au lieu de l'habituelle PictureBox) un code sur l'u lisa on du registre (trs u le pour stocker certaines op ons propres au logiciel, comme le dernier chier ouvert par l'u lisateur, ... au lieu de stocker a dans un chier) D'autres qui u lisent une MSFlexGrid, Excel, ... D'autres encore qui stockent des informa ons dans des chiers texte Comment me re des icones dans un menu U liser des ToolTipText plus pousss Et 2 par culirement bien u les qui u lisent les chiers *.res : a sert intgrer par exemple des images un programme, plutt que de les me re sur le disque dur dans le mme dossier que le programme, et aprs avoir faire un setup qui les copie dans ledit dossier. Tous ces exemples n'ont pas taient faits dans le but de les me re un jour accols un tutoriel, mais dans des situa ons bien relles o ils taient ncssit. En clair, programmez pour vous faire plaisir, et naturellement vous verrez que vous aurez besoin de maitriser telle ou telle technique, et l vous regarderez sur internet comment a marche, comment on s'en sert, et aprs vous aprenez la matriser, ... Et 2 ou 3 ans plus tard vous commencez devenir un super guerrier de l'u lisa on de VB parce que vous avez acquis sans vous en rendre compte un nombre incroyable de bagages techniques, qui vous perme ent de faire peut prs tout.

Contribuer

Contactez-moi

27 sur 28

21/03/2012 16:53

Tutoriel VB6/VBA

http://jannaud.fr/visual-basic

Accueil Blog Programmation Visual Basic Applescript CamL Java Cocoa / iPhone Crer son site Web Codes Sources de tout Humour

Laisser un commentaire

La maison se rserve le droit de supprimer les messages bours de fote d'aurthographes 1si kl msaj taP en s l txto pcq c trO dur a lir pr l viE c oam

Contribuer

Contactez-moi

28 sur 28

21/03/2012 16:53

You might also like