Академический Документы
Профессиональный Документы
Культура Документы
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 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
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 !
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
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)
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 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.
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
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.
Contribuer
Contactez-moi
10 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
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
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
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.
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
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
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.
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.
Contribuer
Contactez-moi
21 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
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
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.
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
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
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