28
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'année 1998) car celles d'après (les ".net") n'ont pas survécu, et c'est ceƩe version qu'on retrouve dans VBA (les macros Excel, ...) Rappelons brièvement les avantages de Visual Basic : Visual Basic convient très bien aux débutants (et aux autres !), car l'éditeur a une "CompleƟon List" : vous écrivez quelque chose, et tout d'un coup hop une liste déroulante s'ouvre, et voud indique ce que le programme "aƩend" à cet endroit. Très uƟle en cas de blanc ! Vous pouvez aussi ne taper que les deux premières leƩres du nom cherché et vous gagnez en rapidité. Ensuite, VB a été construit dans le but de Ɵrer profit des logiciels déjà faits sur votre ordinateur (tant qu'à faire, ... on ne va pas réinventer la roue !) ce qui est très praƟque, et très 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 ! Enfin, VB est fourni avec un Assistant empaquetage et déploiement. En clair, une machine qui vous crée un setup professionnel ! Vous trouverez dans cet ouvrage de quoi apprendre VB6. C'est bien simple, ce livre m'a tout Accueil Blog Programmation Visual Basic Applescript CamL Java Cocoa / iPhone Créer son site Web Codes Sources de tout Humour Contribuer Contactez-moi Tutoriel VB6/VBA http://jannaud.fr/visual-basic 1 sur 28 21/03/2012 16:53

Tutoriel VB6_VBA

Embed Size (px)

DESCRIPTION

Tutoriel VB6_VBA

Citation preview

Page 1: Tutoriel VB6_VBA

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 laversion 6 (qui correspond à l'année 1998) car celles d'après (les ".net") n'ont pas survécu, etc'est ce e version qu'on retrouve dans VBA (les macros Excel, ...)

Rappelons brièvement les avantages de Visual Basic :

Visual Basic convient très bien aux débutants (et aux autres !), car l'éditeur a une"Comple on List" : vous écrivez quelque chose, et tout d'un coup hop une listedéroulante s'ouvre, et voud indique ce que le programme "a end" à cet endroit. Trèsu le en cas de blanc ! Vous pouvez aussi ne taper que les deux premières le res du nomcherché et vous gagnez en rapidité.

Ensuite, VB a été construit dans le but de rer profit des logiciels déjà faits sur votreordinateur (tant qu'à faire, ... on ne va pas réinventer la roue !) ce qui est très pra que, ettrès 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 permettout !

Enfin, VB est fourni avec un Assistant empaquetage et déploiement. En clair, unemachine qui vous crée un setup professionnel !

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

Accueil

Blog

Programmation

Visual Basic

Applescript

CamL

Java

Cocoa / iPhone

Créer son site Web

Codes Sources

de tout

Humour

Contribuer

Contactez-moi

Tutoriel VB6/VBA http://jannaud.fr/visual-basic

1 sur 28 21/03/2012 16:53

Page 2: Tutoriel VB6_VBA

Visual BASIC 6 en 21 joursGreg Perry

Meilleur prix EUR 14,00ou neuf

appris. Vous aurez dans ce livre à construire des pe tes applica onssimples, pas à pas, et vous allez découvrir 1001 techniquesessen elles, entre le mul média, les bases de données, Excel, faire devraies applica ons professionnelles, ... Mon premier livre deprogramma on et sans doute le meilleur inves ssement que j'aijamais fait.D'autre part, par expérience, vous verrez qu'un site internet neremplacera jamais un livre papier.Ce e version est en français.

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 même pas comment les gensles trouvent. Il y a plein de pe ts bouts de code dont on aura toujours besoin à un momentou à un autre dans notre vie, comme me re des icones à nos menus, rendre une par e de lafenêtre transparente, ...

Je vous conseille aussi d'aller voir ma page de codes sources, où je mets pas mal deprogrammes en ligne, ce qui peut être très u le pour avoir une vision d'ensemble de laphysionomie d'un programme en VB

Créer 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 derrière pour gérer les événements (clics, ...)et intéragir avec l'u lisateur par le biais justement de l'interface. Et bien VB est faitexactement de ce e manière : il y a une par e "interface", c'est elle qui s'ouvre enpremier quand on fait nouveau projet, et une autre par e, le code qui se cache derrière.Vous pouvez prendre des controles dans la barre sur la gauche, et les glisser - déposer surla fenêtre. Si vous trouvez que vous n'avez pas assez de contrôles ou si vous en cherchez

Accueil

Blog

Programmation

Visual Basic

Applescript

CamL

Java

Cocoa / iPhone

Créer son site Web

Codes Sources

de tout

Humour

Contribuer

Contactez-moi

Tutoriel VB6/VBA http://jannaud.fr/visual-basic

2 sur 28 21/03/2012 16:53

Page 3: Tutoriel VB6_VBA

un en par culier, faites Ctrl+T ou Projet->Components et faites ce qu'il vous plaît.Construisez votre interface de ce e manière. Dans l'espèce de pe t tableur sur la droitefigurent les propriétés des contrôles (ou plutôt du contrôle sélec onné). Vous pouvezchanger le nom, la propriété Cap on, ... si ça vous chante. Double cliquez sur un contrôlepour arriver à la par e "Code". Visual Basic crée automa quement pour vous unenouvelle procédure / fonc on / méthode associée à l'événement 'Click' sur ce contrôle.Sur la liste déroulante tout en haut à gauche figurent tous les contrôles de la fenêtre, etsur la liste de droite l'événement associé (si vous décidez d'associer un événement).Et voila, vous êtes prêts à coder !

Astuce pour avoir de l'aide

Certaines fonc ons internes de Visual Basic ne sont pas complètement détaillées ici, et cepour 2 raisons :

La première c'est que si vous faites Projets -> Explorateur d'objets, vous vous retrouvezavec toute la liste des fonc ons supportées par VB, et elles sont très bien expliquées, etmême classées par thème (chaines de caractères, tableaux, ...).

La seconde c'est que vous avez accès à ce e liste depuis le code : tapez Strings. parexemple (sans oublier le point) et vous verrez apparaitre la liste de toutes les fonc onss'y rapportant. De même, si mavar est un objet spécial, le fait d'écrire mavar. vousouvrira une liste de toutes les fonc ons ou méthodes applicables à mavar. Mais vousverrez ça vient tout seul.

Rappel : [n] désigne que n est un paramètre op onnel

Structures de controle

Il n'y a pas d'accolades en Visual Basic pour déterminer des blocs de code, comme en C++pour dire que faire dans une boucle for. Ici, cela ressemblerait plus à du html par exemple : onouvre une "balise", et on la referme plus loin.

Dim x as integer, y as double, z as string

Accueil

Blog

Programmation

Visual Basic

Applescript

CamL

Java

Cocoa / iPhone

Créer son site Web

Codes Sources

de tout

Humour

Contribuer

Contactez-moi

Tutoriel VB6/VBA http://jannaud.fr/visual-basic

3 sur 28 21/03/2012 16:53

Page 4: Tutoriel VB6_VBA

(devinez !). Autres types possibles pour la déclara on de variables : float, byte,currency (c'est quand meme un nombre) et d'autres plus loin. Float, currency et doublesont pour les nombres à virgule, string les chaines de caractères, 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 déclarées ensuite(avant la prochaine fonc on / événement) seront globales à la feuille. Pour créer desvariables TRES globales, créez un module (Projet -> Ajouter -> Module), et dans leOp 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 plusjoli mais ça sert honnêtement pas à grand chose.

Select case nomcase "papa"...case "maman"...case else...End Select

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

Accueil

Blog

Programmation

Visual Basic

Applescript

CamL

Java

Cocoa / iPhone

Créer son site Web

Codes Sources

de tout

Humour

Contribuer

Contactez-moi

Tutoriel VB6/VBA http://jannaud.fr/visual-basic

4 sur 28 21/03/2012 16:53

Page 5: Tutoriel VB6_VBA

Goto

La fameuse instruc on goto, très décriée 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 êtredans la même procédure/fonc on !! Goto peut servir à tout, même à sauter plusieursboucles à 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 après do alors). On peut aussiremplacer while par un l (pour les condi ons néga ves)

L'instruc on 'break' pour les boucles for ou do...loop est Exit For et Exit Do etamène directement à la sor e de la boucle.

for each a in b 'b doit être une 'collection' (défini plus loin)...next

Déclara on de fonc ons

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

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

Accueil

Blog

Programmation

Visual Basic

Applescript

CamL

Java

Cocoa / iPhone

Créer son site Web

Codes Sources

de tout

Humour

Contribuer

Contactez-moi

Tutoriel VB6/VBA http://jannaud.fr/visual-basic

5 sur 28 21/03/2012 16:53

Page 6: Tutoriel VB6_VBA

l'on n'est pas obligé de placer plus haut sur le fichier une fonc on qui est u lisée parune autre plus bas. Il n'y a pas non plus de prototype à écrire.

public, private, ...

Déclara on d'une fonc on, public si la fonc on est dans un module et doit etre visibled'ailleurs

Procédures

private sub mafonction(a as integer, b as string, optional c = 2)......end sub

C'est la déclara on d'une fonc on qui ne renvoie pas d'argument ; autrement dit, uneprocédure.

Paramètres passés par référence ou par valeur :écrire mafonction(ByRef a as integer, byval b as integer, byref c asinteger) ... pour avoir a et c passés par référence au lieu de par valeur, qui est pardéfaut. Je conseille FORTEMENT de toujours me re byval, surtout quand vous passezdes paramètres comme des chaînes ou des classes, même si c'est par défaut. On ne saitjamais ! Et le jour où vous vous en rendrez compte, comme moi vous comprendrez quevous venez de perdre 4 heures de suite de débogage. A bon entendeur... ;)

a = f(x, y, z)

pour appeler f et stocker le résultat dans a

Mais aussi... f x,y,zQuand f est une fonc on et qu'on se ficher de son résultat (elle exécute quelque chosequand même et renvoie si oui ou non elle a fait une erreur par exemple) ou quand f estune procédure.

Call f(x, y, z)

La façon non paresseuse d'appeler une procédure, plus appréciée du compilateur

Sta c a as integerSi vous me ez ce code dans une fonc on, cela déclare la variable a comme unevariable sta que : sa valeur sera conservée après la fin de la fonc on (ou de la

Accueil

Blog

Programmation

Visual Basic

Applescript

CamL

Java

Cocoa / iPhone

Créer son site Web

Codes Sources

de tout

Humour

Contribuer

Contactez-moi

Tutoriel VB6/VBA http://jannaud.fr/visual-basic

6 sur 28 21/03/2012 16:53

Page 7: Tutoriel VB6_VBA

procédure), ce qui peut être pra que. En gros, c'est comme une variable globale, maisdont la visibilité est limitée à la procédure ou fonc on.

Chaines de caractères

Prélude : c'est un type un peu par culier : à la fois tableau et variable, on ne sait jamais. EnVB, contrairement à beaucoup d'autres langages objets, la chaîne est comme une variableinteger par exemple : on peut la passer en paramètre sans craindre que ce soit une référenceseulement qui soit passée, ... Bref, il ne faut pas s'inquiéter ici.D'autre part, a en on !!! Les indices commencent donc à 1, et non pas à 0 comme c'estsouvent le cas dans d'autres langages !!!

Dim a as stringdim b as string * 10 'limite la taille de b à 10 caractèresa = "bonjour"b = "thomasthomas" 'b vaudra "thomasthom" en réalité

len(a)

diminu f de "length" : nombre de caractères de la chaine

LTrim(a), RTrim()

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

chaine1 & chaine2

concaténa on de 2 chaines

Mid("bonjour", 3, 4)

"njou" : 3 dit où commencer, et 4 le nombre de caractères à prendre. Ne pas me red'argument à la place de 4 permet de prendre la chaîne jusqu'à la fin.Mid n'est pas une fonc on seulement, c'est aussi une "caractéris que" : on peut fairemid(a, 3, 4) = "abcd", et ainsi a -> "boabcdr"

L'expression split

dim tableau() as string 'déclare un tableau sans en préciser la tailletableau = split("bonjour les amis", " ")

ultra-puissant : si on le met à " " ça va détacher les mots d'une phrase. Si on le met à"o" ça va détacher "bonjour" en {"b","nj","r"}. On peut ensuite accéder à ces par es

Accueil

Blog

Programmation

Visual Basic

Applescript

CamL

Java

Cocoa / iPhone

Créer son site Web

Codes Sources

de tout

Humour

Contribuer

Contactez-moi

Tutoriel VB6/VBA http://jannaud.fr/visual-basic

7 sur 28 21/03/2012 16:53

Page 8: Tutoriel VB6_VBA

avec tableau(1), tableau(2,), ... : tableau.lbound et tableau.ubound donnent les indicesde début et de fin du tableau créé de ce e manière. (l pour 'lower' et u pour 'upper')

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 premièreposi on de celle-ci, 0 sinon.

Tableaux La créa on de tableaux est quelque chose de vraiment très sympa, en VB : lesindices commencent où l'on veut !D'autre part, les tableaux sont soit de taille fixée au départ, soit modelables

Dim t(1 to 10) as integer

Déclare un tableau de 10 en ers, indexé par des indices allant de 1 à 10

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

Déclare un tableau de 3 lignes (indexées par des indices allant de 2 à 4) et de 4colonnes (5 -> 8) contenant des chaines de caractères. Point important : on a déjà ditque les chaines de caractères ne sont pas vraiment traitées comme des pointeurs enVB, et c'est donc tant mieux, sinon rien ne nous dit que la déclara on d'un tableaucomme ça ne crée 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 avect(i, j) = new ...

Remarque sur les indices qui commencent où l'on veutComme vous pouvez le constater sur l'exemple ci-dessus, ce n'est pas vraimentagréable. Faites les commencez à 0 ou à 1 je dirai, suivant votre habitude, mais quandmême plutôt à 1 vu la syntaxe des boucles for de VB. (en C++ ça va plus vite de me refor(i = 0; i < n; i++) que i<= n)

Nombre de dimensionsIl me semble qu'on a le droit à des tableaux de dimension jusqu'à 64, mais ce n'est pas

Accueil

Blog

Programmation

Visual Basic

Applescript

CamL

Java

Cocoa / iPhone

Créer son site Web

Codes Sources

de tout

Humour

Contribuer

Contactez-moi

Tutoriel VB6/VBA http://jannaud.fr/visual-basic

8 sur 28 21/03/2012 16:53

Page 9: Tutoriel VB6_VBA

certain. En pra que, 2 dimensions suffisent (même si l'on gère des ensembles à 3dimensions ! dim t(1 to n, 1 to 3) as Double et on a alors 3 colonnes pour gérerles 3 coordonnées de nos n points)

Tableaux de taille non fixée au départ

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 caseseulement (par exemple), VB va faire en sorte de conserver le maximum d'éléments àleur valeur d'origine ; en clair il va recopier une par e de notre ancien tableau dans lenouveau

A noter que l'on peut déclarer des tableaux à plusieurs dimensions sans connaitrequ'une seule des dimensions (la dernière), sinon c'est impossible.

Les listes ou 'Collec on'

Ce sont des objets assez simples et bien faits, mais pas forcément très rapides (ne les u lisezpas pour des listes de plus de 10000 éléments par exemple, surtout si vous voulez avir unaccès séquen el). Il n'y a pas beaucoup de fonc ons toutes faites sur les Collec on (commeinverser la collec on, la trier, ...).

Dim maliste as New Collection

Ceci crée une nouvelle liste. Elles sont toujours non typées !. Les indices commencenttoujours à 1.

maliste.AddItem "bonjour"

Remarquez qu'il y a des arguments op onnels pour insérer un élément à un indicepar culier

maliste.item(n)

maliste.count

le nombre d'éléments de la liste.

Accueil

Blog

Programmation

Visual Basic

Applescript

CamL

Java

Cocoa / iPhone

Créer son site Web

Codes Sources

de tout

Humour

Contribuer

Contactez-moi

Tutoriel VB6/VBA http://jannaud.fr/visual-basic

9 sur 28 21/03/2012 16:53

Page 10: Tutoriel VB6_VBA

Faites a en on lorsque vous parcourez une liste, si vous supprimez des éléments, l'indice deséléments suivants peut changer !Et plutot que de faire for i = 1 to maliste.count ...maliste.item(i)... next i, faites plutot foreach element in maliste, ... element... next sinon l'ordinateur va à chaque foisrepar r de l'indice 1 pour calculer item(i) ce qui est très lent, surtout vers la fin de la liste, aulieu de tout parcourir d'un seul bloc.

Les types prédéfinis, ou enregistrements

Personnellement je ne les trouve pas forcément u les, mais bon, faites comme bon voussemble. La seule u lité que j'y vois, c'est que si l'on a la liste des posi ons x d'objets (dedessins par exemple) et une autre la liste des y, et dans une autre la liste des z, on peut toutcombiner en un seul ce qui peut faire plus propre au niveau du code.

Mais VB ne gère pas très bien ce genre de type, donc vaut mieux ne pas trop faire de chosescomme ca. Pour ne pas prendre de risque, personnellement, j'u lise un tableau à plusieursdimensions, même 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 VBest devenu ne ement plus orienté objet. En tout cas, jusque dans là 6, on ne peut pas se fairede tableaux de type prédéfini.

Contrairement à ce qu'on pourrait croire, quand on passe un type prédéfini dans unefonc on, il est passé par valeur aussi (à moins de préciser ByRef). En gros il y a une copie defaite.

Type montype (à déclarer dans un module, c'est préférable)x as integery as integernom as stringaaa as unautretypeamoiend type

et pour ini aliser :

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

Accueil

Blog

Programmation

Visual Basic

Applescript

CamL

Java

Cocoa / iPhone

Créer son site Web

Codes Sources

de tout

Humour

Contribuer

Contactez-moi

Tutoriel VB6/VBA http://jannaud.fr/visual-basic

10 sur 28 21/03/2012 16:53

Page 11: Tutoriel VB6_VBA

a.nom = "bonjour"...

Les boites de dialogue

Ne pas abuser de leur codage simplissime ! Ça devient très 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 fiche de la valeurrenvoyée, on peut me re comme d'habitude (cf fin 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 possibilités)

Autre type de boite : a = inputbox("Entrez votre age ici", "textepardefaut","titre ici")

Tandis qu'on se fiche souvent du résultat de la première (le logiciel annonce une erreur,une sauvegarde qui s'est bien passée, ...) dans la deuxième il est plus important. Il esten type string toujours, donc vérifier que l'u lisateur a bien rentré un nombre, ... Çarenvoie "" si l'u lisateur clique sur "Annuler"

Les boites plus "intelligentes" : choisir une couleur, sauvegarder un fichier, ...Windows met gracieusement à notre disposi on son savoir faire en ma ère de boîtesde dialogue : nous sommes tous habitués à 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 apparaître la grande liste des contrôles OCX à rajouter, et choisirMicroso Common Dialog. Elle apparaît alors sur la pale e de gauche. Il faut la placersur la fenêtre, n'importe où de toute façon elle sera invisible. Nommons-la "boite" poursimplifier.

Voici divers codes :Penser au préalable à fixer la propriété CancelError de la boîte à True : cela nousrenseigne sur le fait que l'u lisateur a cliqué sur "Annuler"

private sub changer_couleur()

Accueil

Blog

Programmation

Visual Basic

Applescript

CamL

Java

Cocoa / iPhone

Créer son site Web

Codes Sources

de tout

Humour

Contribuer

Contactez-moi

Tutoriel VB6/VBA http://jannaud.fr/visual-basic

11 sur 28 21/03/2012 16:53

Page 12: Tutoriel VB6_VBA

on error goto erreur:boite.showColorMe.backColor = boite.colorexit suberreur:Msgbox "Vous n'avez pas souhaité changer la couleur de fond"'boite de dialogue qui énerve l'utilisateurend sub

private sub ouvrir()on error goto erreur:boite.showOpenif boite.filename <> "" thenouvrir_fichier(boite.folder & boite.filename)' c'est à vous d'écrire le code d'ouverture d'un fichier !!! Vouscroyez quoi :)' (cf système de fichiers pour plus d'infos)exit subend iferreur:Msgbox "Vous n'avez pas souhaité ouvrir de fichier" 'boite de dialoguetout aussi intempestiveend sub

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

Les classes

Pour en créer : Fichier, ajouter -> Class Module (la même boite que pour les Form, Module,...). Pensez à renseigner le champ "name" de votre classe. Ce sera un peu comme un nouveautype pour vos variables. A une différence : c'est que ce e fois, c'est un pointeur sur votreclasse, c'est toujours passé par référence, donc il faut faire a en on, mais c'est souvent pluspra que.

Option Explicitpublic nom as stringpublic age as integerprivate poids as integer

private function mafonctionpriveequifaitjenesaisquoi(ByVal a as integer)...End Function

Accueil

Blog

Programmation

Visual Basic

Applescript

CamL

Java

Cocoa / iPhone

Créer son site Web

Codes Sources

de tout

Humour

Contribuer

Contactez-moi

Tutoriel VB6/VBA http://jannaud.fr/visual-basic

12 sur 28 21/03/2012 16:53

Page 13: Tutoriel VB6_VBA

// Renseigner les champs d'initialisation, c'est mieux (équivalent à unconstructeur)

Puis dans le code (associé à une fenetre ou à un module ou à...) :dim thomas as new nomdemaclassethomas.age = 22thomas.nom = "thomas"dim pierre as nomdemaclasse

set pierre = thomas ' il faut souvent associer set à l'assigna on à une valeur en ce quiconcerne les objets (ex : les images, ...)msgbox pierre.age ' affiche 22 : pierre est un POINTEUR ou une REFERENCE à THOMAS.Autrement dit 2 noms pour le même objet. Changer l'un change l'autre.

Lecture / écriture dans les fichiers

Une par e que les gens trouvent souvent dure. C'est dommage, je la trouve vraiment trèssimple en Visual Basic. Il y a deux types d'accès à un fichier, que ce soit en lecture, ou enécriture. Soit on lit un fichier ligne par ligne jusqu'à (si l'on veut) la dernière, soit on demandede lire le n ième octet d'un fichier. (idem pour l'écriture). Quelque chose qui fait peur et quipeut être contre-intui f est qu'il faut toujours pour la sauvegarde écraser l'ancien fichier et leremplacer en èrement par un nouveau. (C'est comme ca. Pensez à l'implémenta on sur ledisque dur d'un fichier, et à ce qu'impliquerait l'inser on d'un seul caractère en plein milieud'un fichier par exemple).

Exemples

Notre programme est un répertoire : nom + numero de telephone. On peut stocker lesinforma ons sur le disque par un fichier texte avec par exemple sur la première ligne lenombre de contacts, puis n fois le nom et la ligne d'après le numéro de téléphone etc. Onpourrait aussi faire avec la seconde méthode mais cela semblerait moins judicieux.

Notre programme a beaucoup d'op ons à enregistrer, de type "oui" ou "non" ('afficher...' ou 'ne pas afficher ...') ou des couleurs ou autre. On peut alors stocker pour gagner dela place dans le premier octet du fichier d'op ons, 'true', puis 'false' dans le 2eme, puis lacouleur du fond d'écran préféré de l'u lisateur sur les 4 octets qui suivent, puis ...

Accueil

Blog

Programmation

Visual Basic

Applescript

CamL

Java

Cocoa / iPhone

Créer son site Web

Codes Sources

de tout

Humour

Contribuer

Contactez-moi

Tutoriel VB6/VBA http://jannaud.fr/visual-basic

13 sur 28 21/03/2012 16:53

Page 14: Tutoriel VB6_VBA

C'est moins parlant, mais en même temps sur un fichier texte, le fait d'écrire sur lapremière ligne 'true', puis 'false' sur la 2eme, ... ne serait guère plus parlant.

Un autre avantage est de garan r une certaine sécurité : l'u lisateur ne pourra pass'amuser à modifier les op ons directement en ouvrant le fichier texte.

Un inconvénient est que c'est pas facile facile de se rappeler à quel octet correspondquelle op on et ça induit souvent des erreurs, surtout quand on veut ajouter denouvelles op ons au fur et à mesure du déroulement du programme, ... (même si lesop ons on les charge au début et après c'est fini).

C'est d'ailleurs pour ça que le xml est de plus en plus u lisé (vous pouvez très biensauvegarder sous ce format en écrivant vous même vos balises dans le fichier texte ! Rienne l'interdit)

Pour ouvrir un fichier (qu'importe le type) : Windows accède à un fichier par un flux dedonnées, et il ouvre donc un canal. En gros, au lieu de dire "lis la ligne du fichier"Bureau\toto.txt"" on va dire "lis la ligne du fichier associé au flux du canal 34".

La ques on qui vient naturellement (ou pas) sur les lèvres est : comment savoir quel est lenuméro de canal ?Réponse : C'est nous qui le choisissons. Mais comme on n'a pas le droit à un numéro déjàpris, il y a une fonc on toute faite qui gère ça : FreeFile() -> renvoie un en er.

Passons à la pra que !

Le mode séquen elC'est à dire tous les trucs les uns à la suite des autres

dim f as integerdim ligne as stringf = freefile()open "C:\.....\fichier.doc" for append as #fdo until EOF(f)line input #f, ligne'exécuter le code en rapport avec la ligne lue iciloopclose #f 'on ferme le flux / canal

Accueil

Blog

Programmation

Visual Basic

Applescript

CamL

Java

Cocoa / iPhone

Créer son site Web

Codes Sources

de tout

Humour

Contribuer

Contactez-moi

Tutoriel VB6/VBA http://jannaud.fr/visual-basic

14 sur 28 21/03/2012 16:53

Page 15: Tutoriel VB6_VBA

'EOF' signifie "End of File". Donc on lit les lignes jusqu'à ce que la fin du fichier soita einte. Si l'on sait à l'avance le nombre de lignes, par exemple 10, ou bien s'il est écritdans la toute première ligne de notre fichier :

dim f as integer, n as integer, i as integerdim ligne as stringf = freefile()open "C:\.....\fichier.doc" for input as #fline input #f, lignen = cint(ligne)for i = 1 to nline input #f, ligne'exécuter le code en rapport avec la ligne lue iciNext iClose #f 'A NE PAS OUBLIER !!!!

Pour écrire dans le fichier, c'est pareil :'si le fichier existe déjà on le supprimeif (dir("C:\....\toto.txt") <> "" ) thenKill "C:\....\toto.txt"end if

dim f as integer, i as integerf = freefile()open "C:\....\toto.txt" for append as #fprint #f, nfor i = 1 to nprint #f, nom_contact(i) 'si on a un tableau de contactsnext iclose #f 'A NE PAS OUBLIER !!!!

Bref, c'est facile, vous voyez ! prin #numerofichier, cequonveut et line input#numerofichier, cequonveut.Remarque :Vous pouvez u liser "input" au lieu de "line input", mais cela lira les motsun par un, au lieu de lire ligne par ligne. C'est pas forcément 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, ettout le reste va être décalé.

Le mode binaire

Accueil

Blog

Programmation

Visual Basic

Applescript

CamL

Java

Cocoa / iPhone

Créer son site Web

Codes Sources

de tout

Humour

Contribuer

Contactez-moi

Tutoriel VB6/VBA http://jannaud.fr/visual-basic

15 sur 28 21/03/2012 16:53

Page 16: Tutoriel VB6_VBA

C'est encore plus simple :dim f as integerdim b() as bytef = freefile()redim b(1 to filelen("C:\...\toto.txt")open "C:\...\toto.txt" for binary as #fget #f, 1, bclose #f

Et en écriture : idem avec put au lieu de get. (pensez à effacer le fichier au préalablepour éviter certains bugs)

Ici, b() est un tableau d'octets ('byte' en anglais). A la lecture, on lui donne la taille dufichier puis on l'ini alise avec get.A l'écriture, on possède un tableau d'octets (déjà affectés : ce sont les données àenregistrer) et on envoie ça dans le fichier. A noter que le 1 de "get #f, 1, b" signifie ici :lire les octets du fichier du canal numéro f à par r du 1er et placer ça dans b(). Dansnotre cas celà revient à lire tout le fichier puisque b() a la même taille que le fichier (àcause de filelen()). Cependant on peut très bien décider de lire les octets un par un, eton 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 octetspeut-être, ou plus ??) on n'a pas besoin de faire de mul ples divisions euclidiennespour connaitre l'écriture en base hexadécimale de notre en er, et stocker ça byte parbyte (octet par octet). L'ordinateur gère ça tout seul. Il faut quand même faire gaffe audécalage 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, aget #f, 5, bclose #f

Le mode aléatoireIl existe en fait un troisième mode d'accès à un fichier, mais je le trouve tellement paspra que que je ne l'ai jamais u lisé. C'est le mode "aléatoire" : open "C:\..." forRandom as #f. C'est un peu comme le mode Binary, sauf que là il faut dire à l'avancequels types de données seront où. En fait c'est surtout pour stocker des

Accueil

Blog

Programmation

Visual Basic

Applescript

CamL

Java

Cocoa / iPhone

Créer son site Web

Codes Sources

de tout

Humour

Contribuer

Contactez-moi

Tutoriel VB6/VBA http://jannaud.fr/visual-basic

16 sur 28 21/03/2012 16:53

Page 17: Tutoriel VB6_VBA

enregistrements (= types prédéfinis, du genre "nom" puis "n° téléphone") où il fautdéfinir par avance la taille que l'on réserve à chacun. Par exemple 20 caractères max.pour le nom. Je trouve ce mode un peu bête parce que l'on ne sait jamais par avancece que va rentrer l'u lisateur, et d'autre part, si quelqu'un a un nom à 5 le resseulement cela fait 15 caractères non u lisés (même si vu la taille des disques durs denos jours, on peut se le perme re).

Le système de fichiers

Le code qui suit est un peu complexe, et la documenta on à son sujet est peu fournie surinternet. 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 onsconnues de VB.

Dim oFs As ObjectSet oFs = CreateObject("Scripting.FileSystemObject")

Dim oDossier As ObjectDim oSousDossier As ObjectDim oSousDossiers As ObjectDim sDossier As StringDim f, f2

Set oDossier = oFs.GetFolder("C:\...\Bureau\")'oDossier est l'objet "Dossier" associé à la chaîne de caractères (ici : lebureau)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 lesfichiers du bureau

for Each f2 in fme.print f2.NameNext

For Each oSousDossier In oSousDossierssDossier = sNomDossier & oSousDossier.Name & "\"Me.Print sDossierNext

Accueil

Blog

Programmation

Visual Basic

Applescript

CamL

Java

Cocoa / iPhone

Créer son site Web

Codes Sources

de tout

Humour

Contribuer

Contactez-moi

Tutoriel VB6/VBA http://jannaud.fr/visual-basic

17 sur 28 21/03/2012 16:53

Page 18: Tutoriel VB6_VBA

Ges on des événements et des objets

La ges on d'événements est in mement liée à l'existence d'une interface graphique. Lacréa on de celle-ci est développée en tête de ce e page. Pour gérer les événements associésà des objets, double-cliquez sur l'un deux, puis dans la fenêtre du code, dans la listedéroulante en haut à droite, sélec onnez l'événement qui vous intéresse. Vous avez un choixassez grand. U lisez ensuite les propriétés fournies (ou pas) en argument pour faire ce quevous voulez (ex : mousedown renvoie le x et le y du curseur de la souris en coordonnéesrela ves, où l'origine est en haut à gauche de l'objet). Les procédures ainsi définies peuventêtre appelées tout comme n'importe quelle autre procédure de votre confec on.

Pour accéder aux propriétés d'un objet, donnez le nom de l'objet puis faites "." (sans lesguillemets ^^). Le plus simple est d'écrire Me. Me ça veut dire "moi" en anglais. En clair, c'estvotre fenêtre. '.' va ensuite vous donner la liste de tous les objets sur votre fenêtre. Vouspouvez bien entendu vous adresser au contrôle d'une autre fenêtre (par exemple Form2) enfaisant Form2. ... Form2 doit par contre être loadée, ce qui ce fait comme suit :

Load Form2Form2.show 'si vous voulezForm2.Label1.Caption = "bonjour ! je suis contrôlé depuis le code de laform1"'il faut déjà avoir un label1 sur Form2

On ne peut pas vraiment créer des objets comme ça, à la volée, c'est pas fait pour, et VB vatrès vite ramer : le mieux est de placer vos objets dès le début. Mais on peut quand même lefaire si l'envie nous en dit : Créer un contrôle, n'importe lequel, et me ez sa propriété index à0. (sans le point, c'était un signe de ponctua on ce e fois). Disons que c'est Text1(0). Dans lecode :

For i = 1 to 10Load Text1(i)Text1(i).Visible = trueText1(i).top = text1(i - 1) + 300Next i

...

Unload Text1(i) pour en supprimer un.

Accueil

Blog

Programmation

Visual Basic

Applescript

CamL

Java

Cocoa / iPhone

Créer son site Web

Codes Sources

de tout

Humour

Contribuer

Contactez-moi

Tutoriel VB6/VBA http://jannaud.fr/visual-basic

18 sur 28 21/03/2012 16:53

Page 19: Tutoriel VB6_VBA

Propriétés usuelles

Vous apprendrez très vite les propriétés des objets si vous vous amusez à lire les listesdéroulantes qui s'offrent à vous, dans le code. Les propriétés principales restent .Visible(pour cacher un contrôle ou pas), .height, .left, .width, .top (hauteur, largeur,position), .caption, .text, .ToolTipText (la pe te bulle d'aide qui apparait quandon laisse la souris 5 secondes de suite sur le même contrôle), .AddItem (pour les list,combobox, ...), .Tag (c'est une variable propre à chaque contrôle qui ne sert à rienentant que tel, mais pourtant très u le et on peut y me re ce qu'on veut : chaîne de caractères,en er, ...

Exemple d'u lisa on : vous avez plein de boites de saisie de texte, et vous voulez quecertaines aient une saisie alpha-numérique bloquée. Et bien vous allez me re toutes vostextBox avec le même nom mais un index différent, me re par exemple "chiffre" dans tous lesTag de vos TextBox bloquées, et après dans l'événement keypress, vous allez gérer suivantque le .Tag de votre textbox soit à "chiffre" ou pas.

Evenements et contrôles par culiers

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 fenêtre. Me recancel à 1 pour ne pas fermer la fenêtre

Microso .Forms 2.0 pour avoir des contrôles qui tolèrent les alphabets orientaux(chinois, japonais, ...)

GotFocus : quand un contrôle prend le focus, par exemple quand on clique dessus, oualors quand on se "déplace" avec la touche tab. (on peut u liser SetFocus sur uncontrole pour lui envoyer le focus)

Drag & Drop : très pra que : gère le glisser-déposer de n'importe quel contrôle à votreplace. Me re la propriété dragmode d'un contrôle à 'Automa c' pour cela, puis :

Private Sub Form_DragDrop(Source as Control, X as Single, Y as Single)Source.Move X, YEnd Sub

Accueil

Blog

Programmation

Visual Basic

Applescript

CamL

Java

Cocoa / iPhone

Créer son site Web

Codes Sources

de tout

Humour

Contribuer

Contactez-moi

Tutoriel VB6/VBA http://jannaud.fr/visual-basic

19 sur 28 21/03/2012 16:53

Page 20: Tutoriel VB6_VBA

Remarque : par Source.name on a accès au nom d'un contrôle, et donc on peut dansForm_DragDrop gérer les contrôles au cas par cas si l'envie nous prend.

PopupMenu : tout simplement génialissime. Permet d'ouvrir un menu, souvent au clicdroit sur un objet. Pour cela créez vous un nouveau menu avec Menu Editor (clic droitsur une form, dans le créateur d'interface ini al), me ez le en visible = false (si vousvoulez), ne me ez pas de Cap on à l'élément racine, mais donnez quand meme unnom, par exemple 'mnuderoulant'. Ensuite, par exemple dans Form_MouseDown :

If Button = 2 then 'clic droitMe.PopMenu Me.mnuderoulantend if

Les onglets : Ctrl-T, et ajouter Microso SSTabs. La ges on est ensuite assez simple : onplace nos contrôles comme d'habitude.

Un tableur : Ctrl-T, et ajouter MsFlexGrid. MSFlex1.TextMatrix(ligne, colonne) = "toto"pour me re quelque chose

Les 'Frame' : ils ont plutôt voca on à être des conteneurs. Exemple : si l'on veutdécorréler des Op on Bu on (= boutons "radio") il faut les me re dans des conteneurs,sinon quand on clique sur l'un ça désac ve tous les autres. Essayez pour comprendre ceque je dis, sinon ce n'est pas la peine. C'est l'affaire de 30 secondes, même pas besoind'une seule ligne de code, juste de placer des Op on Bu on sur la fenêtre. Ça permetde cacher plein de contrôles d'un coup : on met beaucoup de contrôles dans un Frame,puis on fait Frame1.visible = false, au lieu de le faire pour chaque objet du Frame.Très pra que. L'essayer, c'est l'adopter.

DriveListBox, DirListBox, FileListBox : affichent la liste des fichiers d'un dossier, la listedes sous-dossiers d'un dossier, et la liste des dossiers d'un Driver. Pour les corréler, à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, dès qu'on change de dossier il faut réactualiser la liste desfichiers (pour pointer vers le nouveau dossier) et idem pour le driver.

La PictureBox

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

Accueil

Blog

Programmation

Visual Basic

Applescript

CamL

Java

Cocoa / iPhone

Créer son site Web

Codes Sources

de tout

Humour

Contribuer

Contactez-moi

Tutoriel VB6/VBA http://jannaud.fr/visual-basic

20 sur 28 21/03/2012 16:53

Page 21: Tutoriel VB6_VBA

l'indique. Je vous conseille de me re sa propriété scaleMode à Pixel au lieu de Twip sinon leseffets peuvent être ina endus. En gros, 1 pixel = 15-20 twips. On se demande bien à quoipeuvent servir les twips étan donné qu'un pixel est une unité indivisible, mais bon... Me ezaussi AutoRedraw à True, sinon si vous placez une autre fenêtre devant votre PictureBox, çava effacer le dessin dessus.

Me.Picture1.line(x1, y1)-(x2, y2), vbblue [,B ou BF] : trace une ligne bleue sur lapictureBox Picture1 de la fenêtre ; B veut dire que ça fait pas une ligne, mais le rectangleassocié, et BF dit que ce rectangle sera rempli ('box' et 'box full')

Dim a as stdPictureset 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 coordonnées commencent toujours en haut à gauche d'un contrôle, et l'axe des y estorienté vers le bas, ce qui est assez déroutant, pour le moins au début

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 propriété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 mêmepour DirectX. Comment choisir ? Je vous conseille de faire d'abord votre jeu (ou autre) endessinant sur une PictureBox, et si c'est lent, de passer à DirectX. L'avantage de DirectX, c'estqu'on se fait une Sub spéciale où l'on dessine tout. Alors que sur une PictureBox, il fauteffacer ce qu'on déplace, pour le re-dessiner plus loin, ce qui est plus contraignant. En grospour un serpent une PictureBox ira très bien. Après... à vous de voir ce qui vous convient lemieux. Il y a au moins 5 codes u lisant DirectDraw dans la par e codes sources. Faites descopier-coller pour u liser DDraw à votre tour !

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

Accueil

Blog

Programmation

Visual Basic

Applescript

CamL

Java

Cocoa / iPhone

Créer son site Web

Codes Sources

de tout

Humour

Contribuer

Contactez-moi

Tutoriel VB6/VBA http://jannaud.fr/visual-basic

21 sur 28 21/03/2012 16:53

Page 22: Tutoriel VB6_VBA

Randomize Timer puis randrenvoie un nombre ré au sort entre 0 et 1. Randomize n'est à faire qu'une fois, endébut de programme, pour réini aliser le générateur de nombre aléatoire.

Timer

C'est le nombre de secondes écoulées depuis 00h00. Très précis. Permet dechronométrer des choses au millième près.

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 même un algorithme pour ce genre dechose, mais on n'en a pas besoin souvent non plus ! (cf codes sources)

Format()

Transforme n'importe quoi en une chaîne de caractères avec les spécifica ons voulues.Exemple : format(3.14, "00.0000") = "03.1400". On peut remplacer les 0 par des # pourne pas me re de 0 inu lement : Format(2.345678, "#.##") = "2.34"

isnumeric()

Renvoie true si une chaîne ne caractère peut être conver e en nombre grâce auxfonc ons de conversions CInt, Cdbl ou C...

Asc et ChrRenvoient respec vement le code Ascii d'un caractère, et le caractère associé à un codeAscii. Très u lisés en pra que (cf un peu plus bas ges on des appuis touches).

Set

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 déjà une ...liste/Collec on, mais qu'on laisse tomber celle-ci pour en recréer une nouvelle.

DoEvents

Demande à l'ordinateur de faire une "pause" à notre programme pour qu'il puissetraiter tout ce qu'il a en mémoire et qu'il veut faire depuis longtemps. A u liser avecparcimonie, sauf peut être de temps en temps dans certaines boucles.

Créer un exécutableFichier->Make project1.exe (le nom de votre projet à la place de Project1) pour créer un

Accueil

Blog

Programmation

Visual Basic

Applescript

CamL

Java

Cocoa / iPhone

Créer son site Web

Codes Sources

de tout

Humour

Contribuer

Contactez-moi

Tutoriel VB6/VBA http://jannaud.fr/visual-basic

22 sur 28 21/03/2012 16:53

Page 23: Tutoriel VB6_VBA

.exe. A en on, si vous u lisez dans votre programme des images de votre dossierimage loadées depuis une ligne de commande type Loadpicture("C:\Bureau\Thomas\monimage.jpg"), il y a de très fortes chances pour que ça ne marche pas chezquelqu'un d'autre. Faites vous un dossier Data par exemple, ou Images, que vousplacez dans le même dossier que votre projet. Référez vous aux images par App.Folder& "\Images\monimage.jpg", ce qui est une adresse rela ve, et non plus absolue. Appest l'abbrévia on de "Applica on". Il faudra ainsi livrer votre programme avec ledossier Images, et dire aux u lisateurs de placer ce dernier dans le même dossier que le.exe.

Créer un SetupOn en a souvent besoin, par exemple si votre programme s'accompagne d'images, etque le dossier images doit être placé dans le même dossier que l'exécutable, ou bien sivotre programme u lise des dll peu communes, ce qui arrive souvent, car lorsque VBs'installe, il installe des tas de contrôles (MSFlexGrid, ...) qui sont donc sur votreordinateur, mais pas sur celui d'un u lisateur lambda. Il y a un u litaire spécial, livréavec VB, qui permet de faire un Setup juste avec votre fichier .exe. Il s'agit de "AssistantEmpaquetage et Déploiement". Il va déterminer tout seul quels sont les composants àinclure à votre projet qui risquent de ne pas être sur un autre ordinateur. Il fonc onnetrès bien, mais par contre c'est à vous de dire qu'il faut inclure le dossier 'images' parexemple.

Les 'handle'A chaque nouveau contrôle créé Windows a ribue un numéro unique perme ant del'iden fier. Pour tous les contrôles, même le contrôle inclut dans le 4eme onglet duFrame du 2eme onglet. Le handle est accessible par moncontrole.hwnd. Connaissant lehandle d'un objet, on peut donc espérer demander à Windows certaines choses, parexemple quelle est la taille du contrôle de hwnd numéro... ou qu'est ce qu'il y a écritdedans. C'est ce que fait ce e source. Le truc aussi c'est que ça u lise un API qui donnele hwnd du contrôle sous la souris. Mais c'est pas magique qu'un tel API existe, puisqueWindows doit toujours savoir si on clique à qui (= quel contrôle = quel handle, donc)transme re l'événement.

Excel

Me re tout d'abord Excel en référence au projet (comme on le ferait pour une dll par

Accueil

Blog

Programmation

Visual Basic

Applescript

CamL

Java

Cocoa / iPhone

Créer son site Web

Codes Sources

de tout

Humour

Contribuer

Contactez-moi

Tutoriel VB6/VBA http://jannaud.fr/visual-basic

23 sur 28 21/03/2012 16:53

Page 24: Tutoriel VB6_VBA

exemple) : Projet -> References -> Cocher Excel

dim xlapp as Object, xlbook as object, xlsheet as objectSet xlapp = New Excel.ApplicationSet xlbook = xlapp.Workbooks.Open("C:\Bureau\toto.xls")Set xlsheet = xlbook.Sheets("Aube")xlsheet.Cells(ligne, colonne).Value = "bonjour"xlapp.ActiveWorkbook.Close Falsexlapp.QuitSet xlapp = Nothing

Ges on des appuis touches sur le clavier

Pour interdire la saisie autre que numérique par exemple, dans un TextBox : dansl'événement keyPress, on reçoit KeyAscii. On peut alors faire if (KeyAscii < Asc('0') OrKeyAscii > Asc('9')) then KeyAscii = 0. De même, si on décide (pour rire), qu'àchaque fois qu'un 'a' est tapé, de le remplacer par un 'b', on fait if KeyAscii = Asc('a') thenKeyAscii = Asc('b').

On se sert souvent du KeyAscii = 13 (touche Entrée) pour que l'u lisateur n'ait qu'à appuyersur Entrée, au lieu de relâcher 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 gérer un peu les touches dans un jeu qui ne va pas forcément vite(si si ça existe ! cf le jeu worms dans ma page de codes sources, et il marche très bien) vouspouvez u liser l'événement keydown ou keypress de la form (je recommande plutôtkeydown, car keypress c'est plus pour les le res que pour les touches du genre flèches,control, ...).Sinon ...

Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long)As Integer'à déclarer dans Option Explicit, ou en public dans un module

dim a as integera = GetAsyncKeyState(37) 'flèche gauche (38, 39, 40, correspondent' aux flèches droite, bas, haut, dans un ordre à déterminer)if a <> 0 then ...end if

Accueil

Blog

Programmation

Visual Basic

Applescript

CamL

Java

Cocoa / iPhone

Créer son site Web

Codes Sources

de tout

Humour

Contribuer

Contactez-moi

Tutoriel VB6/VBA http://jannaud.fr/visual-basic

24 sur 28 21/03/2012 16:53

Page 25: Tutoriel VB6_VBA

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 même touche en paramètre) c'est à dire que si la dernière fois c'étaitappuyé, le joueur a laissé enfoncé la touche depuis. C'est pour ça qu'il faut ini aliser àForm_load() en espérant que le joueur n'appuie sur aucune touche au moment où le jeu selance, et faire du getasynckeystate sur tous les numéros qu'on u lisera.

Fichiers *.res

Téléchargez ici une source u lisant les fichiers .res pour copier discrètement un fichier .exe survotre ordinateur. Rassurez-vous ça ne le fera pas chez vous car mon fichier .res n'est pas livréavec le programme. Téléchargez ici un fichier .res contenant toutes les images d'un jeu decartes de 52 cartes (+ joker + explica on). Ultra-pra que.

Ces fichiers se créent grâce à Visual C++. Il servent principalement à stocker d'autres fichiers à"l'intérieur" de notre programme VB. En effet on peut avoir un exécutable qui se trouve dansun dossier, et dans ce même dossier me re des images ou tout autre type de ressources. Maissi l'on fait ça, cela veut dire que l'u lisateur peut récupérer nos belles images pour les u liserà ses fins propres. Et on ne veut pas forcément si l'on est égoïste (ou si l'on aime le droit à lapropriété). D'autre part, si l'exécutable doit être placé dans le même dossier que d'autresimages pour fonc onner, ce n'est pas forcément très pra que non plus, parce qu'il fautl'expliquer aux u lisateurs, et on n'a pas non plus envie de créer un Setup pour tout.

Créa on d'un fichier .res

Soit on lance Visual C++, et on fait nouveau fichier *.res, et on inclut des images unepar une.

Soit on n'a pas que des images à me re. Alors créez un nouveau document texte avecle bloc-notes, et écrivez autant de lignes que vous avez de fichiers à ajouter. Les lignessont du genre :logiexe EXE C:\Bureau\logiciel.exeVous n'êtes pas obligés de me re EXE parce que vous avez un fichier *.exe, mais c'estplus pra que. En fait, le premier item (ici : "logiexe") est le nom de votre ressource dansle fichier .res que vous allez créer, le second (ici : "EXE") est le nom du "dossier" danslequel votre fichier sera mis (toujours dans le fichier .res), et le troisième item (ici :

Accueil

Blog

Programmation

Visual Basic

Applescript

CamL

Java

Cocoa / iPhone

Créer son site Web

Codes Sources

de tout

Humour

Contribuer

Contactez-moi

Tutoriel VB6/VBA http://jannaud.fr/visual-basic

25 sur 28 21/03/2012 16:53

Page 26: Tutoriel VB6_VBA

"C:\....exe") indique au "compilateur de ressources" où trouver le fichier sur votreordinateur.

Enfin enregistrez votre fichier texte du bloc notes en .rc et non pas .txt. Ouvrez votre .rcavec Visual C++, et faites Enregistrer sous... et là choisissez .res comme extension. Voilac'est fini.

Récapitulatif : dans le bloc-notes,fichier1 DOSSIER1 C:\....toto.bmpfichier2 DOSSIER1 C:\....maman.jpgfichiertuesmoche DOSSIERMOCHE C:\....moche.avi...à enregistrer en .rc

U lisa on d'un fichier .res depuis VB

Faites clic droit sur votre projet dans l'arborescence d'en haut à droite, et Add file, puissélec onnez votre fichier .res tout beau tout neuf. Faites :

Dim Data() as ByteData = LoadResData("logiexe", "EXE")ou Data = LoadResData("fichier2", "DOSSIER1")pour les images : Set Me.Picture1.Picture = LoadResPicture("image1", "BMP")

où vous l'avez compris, image1 peut très bien être une jpg même si elle est dans le dossier"BMP"

Jouer de la musique

Il y a encore une fois 2 manières : avec Direct Sound (cf la source de Phoenix), ou avec unobjet spécial (que l'on insère donc en faisant Ctrl+T, ou Projet->Composants) : le MicrosoMul média Control. J'en met un sur ma form par musique ou son que je voudrais jouer. Ilfaut renseigner 'Filename' (le .wav ou .mp3 (jamais essayé)) et on peut me re enVisible=False pour cacher un peu. A en on, si ce n'est pas fait, ce n'est pas parce qu'onclique sur le bouton Play que ça va marcher. Idem avec Pause, ... !!! C'est à nous de gérerl'événement "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

Accueil

Blog

Programmation

Visual Basic

Applescript

CamL

Java

Cocoa / iPhone

Créer son site Web

Codes Sources

de tout

Humour

Contribuer

Contactez-moi

Tutoriel VB6/VBA http://jannaud.fr/visual-basic

26 sur 28 21/03/2012 16:53

Page 27: Tutoriel VB6_VBA

son".

Codes sources et liens

Vous trouverez dans ma page codes sources :

des jeux : des serpents différents dont un avec une pe te intelligence ar ficielle, si onpeut appeler ça comme ça (mais essayez quand même de ba re l'ordinateur et on enreparlera !!); un space invader (u lisa on de Direct Draw au lieu de l'habituellePictureBox)

un code sur l'u lisa on du registre (très u le pour stocker certaines op ons propres aulogiciel, comme le dernier fichier ouvert par l'u lisateur, ... au lieu de stocker ça dansun fichier)

D'autres qui u lisent une MSFlexGrid, Excel, ...

D'autres encore qui stockent des informa ons dans des fichiers texte

Comment me re des icones dans un menu

U liser des ToolTipText plus poussés

Et 2 par culièrement bien u les qui u lisent les fichiers *.res : ça sert à intégrer parexemple des images à un programme, plutôt que de les me re sur le disque dur dans lemême dossier que le programme, et après avoir à faire un setup qui les copie dans leditdossier.

Tous ces exemples n'ont pas étaient faits dans le but de les me re un jour accolés à untutoriel, mais dans des situa ons bien réelles où ils étaient nécéssité. En clair, programmezpour vous faire plaisir, et naturellement vous verrez que vous aurez besoin de maitriser telleou telle technique, et là vous regarderez sur internet comment ça marche, comment on s'ensert, et après vous aprenez à la maîtriser, ... Et 2 ou 3 ans plus tard vous commencez à devenirun super guerrier de l'u lisa on de VB parce que vous avez acquis sans vous en rendrecompte un nombre incroyable de bagages techniques, qui vous perme ent de faire à peutprès tout.

Accueil

Blog

Programmation

Visual Basic

Applescript

CamL

Java

Cocoa / iPhone

Créer son site Web

Codes Sources

de tout

Humour

Contribuer

Contactez-moi

Tutoriel VB6/VBA http://jannaud.fr/visual-basic

27 sur 28 21/03/2012 16:53

Page 28: Tutoriel VB6_VBA

Laisser un commentaire

La maison se réserve le droit de supprimer les messages bourés de fote d'aurthographes 1siklé mésaj taP en s l txto pcq c trO dur a lir pr lé viE cô oam

Accueil

Blog

Programmation

Visual Basic

Applescript

CamL

Java

Cocoa / iPhone

Créer son site Web

Codes Sources

de tout

Humour

Contribuer

Contactez-moi

Tutoriel VB6/VBA http://jannaud.fr/visual-basic

28 sur 28 21/03/2012 16:53