Excel – Le langage Basic [vb]

Transcription

Excel – Le langage Basic [vb]
Excel – Le langage Basic [vb]
K. Zampieri, Version 21 octobre 2013
Table des matières
1 Symboles d’un programme Basic
1.1 Commentaires . . . . . . . . . . .
1.2 Mots-clés . . . . . . . . . . . . .
1.3 Identifiants . . . . . . . . . . . .
1.4 Types fondamentaux . . . . . . .
1.5 Règles d’écriture des programmes
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
3
3
3
3
3
2 Déclarations
2.1 Déclaration de variables . . .
2.2 Déclaration de constantes . .
2.3 Variables indicées . . . . . . .
2.4 Dimensionnement dynamique
2.5 Les chaines de caractères . . .
2.6 Portée des variables . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4
4
4
5
5
5
5
3 Instructions simples
3.1 Instruction d’affectation . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 Boite de message (MessageBox) . . . . . . . . . . . . . . . . . . . . . . .
3.3 Boite de saisie (InputBox) . . . . . . . . . . . . . . . . . . . . . . . . . .
6
6
6
7
.
.
.
.
.
.
.
.
.
.
.
.
4 Instructions structurées
4.1 Test : Instruction Si . . . . . . . . . . .
4.2 Test : Instruction Si-Alors . . . . . . .
4.3 Test : Instruction Si-cascade . . . . . .
4.4 Test : Instruction Selon . . . . . . . . .
4.5 Gestion des erreurs : Si erreur dérouter
4.6 Gestion des erreurs : Variante . . . . .
4.7 Boucle : Instruction Pour . . . . . . . .
4.8 Boucle : Instruction TantQue . . . . .
4.9 Boucle : Variantes sur le TantQue . . .
4.10 Boucle : Instruction PourTout . . . . .
4.11 Instruction Avec . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8
8
8
8
8
9
9
9
10
10
10
11
5 Procédures et fonctions
5.1 Déclaration d’une procédure
5.2 Appel d’une procédure . . .
5.3 Déclaration d’une fonction .
5.4 Appel d’une fonction . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
12
12
12
12
13
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
.
.
.
.
.
.
.
.
Bureautique – vb00mcours, October 21, 2013
6 Fonctions standard
6.1 Fonctions mathématiques . . . . .
6.2 Fonctions de chaine de caractères
6.3 Fonctions logiques . . . . . . . . .
6.4 Fonctions diverses . . . . . . . . .
6.5 Fonctions Excel . . . . . . . . . .
2
.
.
.
.
.
14
14
14
14
14
14
.
.
.
.
.
.
.
15
15
15
15
15
16
16
16
8 Utilisation des fonctions Excel dans le VBA
8.1 Principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.2 Fonctions courantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
17
17
9 Exercices : Déclarations et Instructions simples
9.1 Boite de message simple . . . . . . . . . . . . . .
9.2 Boite de message avec retour de valeur . . . . . .
9.3 Saisie de valeur . . . . . . . . . . . . . . . . . . .
9.4 Utilisation de variables . . . . . . . . . . . . . . .
.
.
.
.
19
19
21
22
23
10 Exercices : Instructions structurées
10.1 Saisie validée d’un nombre . . . . . . . . . . . . . . . . . . . . . . . . . .
24
24
11 Exercices : Procédures et fonctions
11.1 Fonction numeroSemaine . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.2 Procédure transposer . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
25
28
7 Quelques fonctions/méthodes
7.1 Fonction RGB . . . . . . . .
7.2 Fonction Timer . . . . . . .
7.3 Fonction Now . . . . . . . .
7.4 Méthode Wait . . . . . . . .
7.5 Méthode Cursor . . . . . . .
7.6 Méthode OnTime . . . . . .
7.7 Méthode Quit . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Bureautique – vb00mcours, October 21, 2013
3
Introduction
Mots-Clés Excel, Langage Basic.
Requis VBA.
Comprend [Minot-X2].
Le langage Basic (Beginners All-purpose Symbolic Information Code) est un langage
assez ancien (1964) qui présentait la particularité d’être interprété et, à cause de cela,
était très facile à apprendre.
Les nouvelles versions de ce langage sont compilées avant l’exécution mais un interpréteur est en fonction lors de l’écriture des instructions. Une partie des erreurs est
donc signalée au fur et à mesure de la frappe des lignes de codes. La compilation avant
exécution permet d’avoir de bonnes performances lors de l’utilisation.
Le langage Basic utilisé par le VBA est très proche de la version appelée Q-Basic.
Ce module présente le langage Basic : gestion des entrées/sorties, l’utilisation de variables, de boucles, de tests, etc.
Remarque On parlera indifféremment de VB ou de VBA. Le langage utilisé est le
même, à la différence près que Visual Basic for Applications (VBA) nécessite un support
logiciel (tout produit de la gamme Office, tel que Word ou Excel par exemple), alors que
Visual Basic (VB) se suffit à lui-même.
Conclusion
Bureautique – vb00mcours, October 21, 2013
4
== Activités Cours ==
1
Symboles d’un programme Basic
1.1
Commentaires
Un commentaire débute par le mot-clé REM ou l’apostrophe ’.
1.2
Mots-clés
Les mots-clés sont réservés, insensibles à la casse et aux accents.
1.3
Identifiants
Un identifiant est constitué de lettres, de chiffres et du blanc souligné. Il commence
toujours par une lettre. Il n’est pas sensible à la case. 40 caractères maximum. Il est
mnémonique (mais pas trop long !).
1.4
Types fondamentaux
Les types fondamentaux sont les suivants :
– Integer Entier (2 octets)
– Long Entier long (4 octets)
– Single Réel (4 octets)
– Double Réel double précision (8 octets)
– Boolean Booléen (2 octets)
– String Chaine de caractères (maximum 64000 caractères)
– Variant Peut contenir des données de tout type y compris Error et Null. Utilise 16
octets pour un nombre et 22 octets plus 2 octets pour la longueur pour les chaı̂nes.
1.5
Règles d’écriture des programmes
Voici quelques règles :
– Une instruction peut avoir 255 caractères au maximum. Pour continuer l’écriture
d’une instruction à la ligne suivante, on met un blanc puis un blanc souligné _ et
on poursuit à la ligne suivante.
– Possibilité de séparer deux instructions sur la même ligne avec le : (deux points).
C’est cependant déconseillé sauf pour l’initialisation à la déclaration.
– Commentez par REM ou ’ en début de ligne – ou par ’ après une instruction.
– Donnez une adresse à une ligne plutôt qu’un numéro. Attention : après une adresse
numérique, pas de : (deux points). Après une adresse littéral, nécessité de : (deux
points).
– Les lignes blanches sont admises.
– L’indentation des instructions n’est pas obligatoire mais conseillé.
Bureautique – vb00mcours, October 21, 2013
2
2.1
5
Déclarations
Déclaration de variables
Syntaxe
[Static] Dim x [As TypeVariable]
Explication Avec Dim la variable n’existe qu’à l’intérieur de la procédure où elle est
déclarée et elle est remise à zéro à chaque appel. Avec Static elle conserve la valeur
qu’elle avait lors de la sortie précédente de la procédure. Le mot-clé As et son paramètre
précisent le type de donnée stockée.
Remarque Définir le type d’une variable est facultatif mais conseillé : VBA se débrouille bien, en général, mais quelques fois, l’absence de déclaration conduit à des erreurs.
Le type est Variant s’il n’est pas précisé.
Exemple
Dim chn As String ’une chaine de caractères
Dim n As Integer ’un entier
Dim reel As Double ’un réel
Syntaxe
Option implicit
Explication Cette déclaration en début de programme oblige à déclarer les variables
ce qui permet le contrôle des fautes d’orthographe dans les noms de variables. Cela alourdit l’écriture mais en général accélère les calculs.
Remarque
Une variable non déclarée est du type Variant.
Attention
Dim a As Integer, b As Integer, c As Single ’est correct
Dim a, b, c As Integer ’uniquement c est Integer
2.2
Déclaration de constantes
Syntaxe
Const nom As TypeConst = valeur
Explication
Déclare une constante nom de type TypeConst initialisée à valeur.
Bureautique – vb00mcours, October 21, 2013
2.3
6
Variables indicées
Syntaxe
Dim t1(dim1, dim2, ...) As TypeVariable
Dim t2(1 To dim1, ...) As TypeVariable ’si base 1
Dim t2(0 To dim1, ...) As TypeVariable ’si base 0
Explication Déclare une variable indicée. Les indices doivent être des nombres entiers
ou des variables entières. La déclaration Option Base 1 est le mode implicite. L’instruction Option Base 0 modifie la deuxième déclaration.
2.4
Dimensionnement dynamique
Syntaxe
Dim t() As TypeVariable ’déclaration d’un tableau
...
ReDim [Preserve] t(dim1, dim2, ...) ’redimensionnement d’un tableau
Explication Dans le cas de Preserve les anciennes valeurs sont conservées et les
nouvelles valeurs sont initialisées à zéro.
2.5
Les chaines de caractères
Syntaxe
[Static] Dim s As String [*n] ’déclaration
Explication Déclare une variable s de type chaine de caractères. Le paramètre *n (où
n est un entier) précise le nombre maximum de caractères.
– L’opérateur de concaténation est le &.
– L’instruction Option Compare Text fait que a=A.
– L’instruction Option Compare Binary fait que a<>A.
– La fonction len(s) renvoie la longueur de la chaine s.
2.6
Portée des variables
Une variable (ou constante) n’est connue que dans le module où elle est défini : ce
peut être dans une fonction, une procédure, une feuille de travail.
Pour avoir une variable visible dans tout le projet, il faut la déclarer Public ou Global
dans la partie Déclarations d’un module VBA.
Bureautique – vb00mcours, October 21, 2013
3
7
Instructions simples
3.1
Instruction d’affectation
Syntaxe
variable = expression
Explication
Affecte une valeur à une variable.
Remarque
– Hiérarchie classique des opérateurs : ^ * / + – Si égalité de priorité : priorité à gauche
– Attention : une seule affectation par instruction
3.2
Boite de message (MessageBox)
Syntaxe
valeur = MsgBox(prompt[,buttons][,title])
Explication Affiche un message et récupère la valeur des boutons.
– prompt Texte constituant le message à l’utilisateur (chaine de caractères)
– buttons Expression numérique décrivant les boutons demandés dans la boite de
message
– title Texte venant en titre de la boite de message (chaine de caractères)
Les noms commençant par vb représentent des constantes Visual Basic. On peut utiliser
le nom de la constante ou sa valeur :
vbOKOnly
0
vbOKCancel
1
vbAbortRetryIgnore 2
vbYesNoCancel
3
vbYesNo
4
vbRetryCancel
5
vbCritical
16
Affiche
Affiche
Affiche
Affiche
Affiche
Affiche
Affiche
Les valeurs renvoyées sont :
vbOK
vbCancel
vbAbort
vbRetry
vbIgnore
vbYes
vbNo
1
2
3
4
5
6
7
OK
Annuler
Abandonner
Réessayer
Ignorer
Oui
Non
le bouton OK uniquement
les boutons OK et Annuler
les boutons Abandonner, Réessayer et Ignorer
les boutons Oui, Non et Annuler
les boutons Oui et Non
les boutons Réessayer et Annuler
l’icône Message critique
Bureautique – vb00mcours, October 21, 2013
3.3
8
Boite de saisie (InputBox)
Syntaxe
valeur = InputBox(prompt[,title][,default][,left][,top][,helpFile][,helpContextId]) //
valeur = Application.InputBox(...[,Type]) //Méthode
Explication Récupère et renvoie le texte saisi par l’utilisateur. La donnée récupérée est
de type String (chaine de caractères). Attention, même si le texte tapé par l’utilisateur
est un numérique, VB la considère en tant que chaine alors qu’Excel convertira cette
valeur en numérique (cadrage à droite).
– prompt Texte demandant l’entrée de la donnée (chaine de caractères)
– title Texte venant en titre de la boite de message (chaine de caractères)
– default Valeur par défaut de la donnée à entrer
– left et top Position en nombre de points à partir du coin en haut à gauche de
l’écran. Par défaut, la boite est positionnée au centre de l’écran
– helpFile et helpContextId Fichiers d’aides
– type Type du résultat attendu (par défaut, du texte)
Le paramètre type (somme de valeurs) est défini comme suit :
– 0 : une formule
– 1 : un nombre (l’utilisateur saisissant les réels avec une virgule)
– 2 : une chaine de caractères
– 4 : une valeur logique (True ou False, l’utilisateur tapant Vrai ou Faux)
– 8 : un objet de la classe « Range » (que l’on peut saisir avec la souris). Utilisez
l’instruction Set pour l’affectation
Bureautique – vb00mcours, October 21, 2013
4
4.1
9
Instructions structurées
Test : Instruction Si
Syntaxe
If condition Then
instructionsAlors
Else
instructionsSinon
End If
Explication
Remarque
fausse.
4.2
Effectue la structure de choix classique du Si algorithmique.
Le else est facultatif s’il n’y a rien à faire quand l’expression logique est
Test : Instruction Si-Alors
Syntaxe
If condition Then instructionSimple
Remarque
4.3
Une seule instruction et pas de Else ni de End If.
Test : Instruction Si-cascade
Syntaxe
If condition Then
instructionsAlors
Else If condition2 Then
instructions2Alors
...
Else
instructionsSinon
End If
Remarque Utilisation possible de Not, And, Or et Xor (ordre de priorité alphabétique
pour les trois derniers).
4.4
Test : Instruction Selon
Syntaxe
Select Case expression
Case c1
instructionsC1
Case c2, c3
Bureautique – vb00mcours, October 21, 2013
10
instructionsC2
Case c4 To c5
instructionsC3
Case Else
instructionsDefault
End Select
4.5
Gestion des erreurs : Si erreur dérouter
Syntaxe
On Error Goto xxx
...
xxx:
...
Resume
Explication
4.6
Le Resume permet de reprendre à la ligne suivante si il y a erreur.
Gestion des erreurs : Variante
Syntaxe
On Error Resume Next
...
Explication
Si il y a erreur, passe à la ligne suivante.
Remarque Il est aussi possible de récupérer le code de l’erreur pour la traiter :
– err.number ’le numéro de l’erreur
– err.description ’la description de l’erreur
4.7
Boucle : Instruction Pour
Syntaxe
For v = vDebut To vFin [Step vPas]
instructions
Next [v]
Explication Le compteur v est un entier ou un réel. Le pas est facultatif (par défaut
1) ainsi que le compteur en Next.
Remarque
Pour sortir de la boucle : Exit For.
Bureautique – vb00mcours, October 21, 2013
4.8
Boucle : Instruction TantQue
Syntaxe
While Condition
instructions
Wend
Remarque
4.9
Pour sortir de la boucle : Exit Do.
Boucle : Variantes sur le TantQue
Syntaxe
Do While Condition
instructions
Loop
Syntaxe
Do Until Condition
instructions
Loop
Syntaxe
Do
instructions
Loop Until Condition
Syntaxe
Do
instructions
Loop While Condition
Remarque
4.10
Pour sortir de ces boucles : Exit Do.
Boucle : Instruction PourTout
Syntaxe
For Each element In ZoneA
instructions
Next element
Remarque
Pour sortir de la boucle : Exit For.
11
Bureautique – vb00mcours, October 21, 2013
4.11
12
Instruction Avec
Syntaxe
With obj
.Prop1 = ...
.Prop2 = ...
...
End With
Explication Permet de spécifier les propriétés d’un objet ou d’un type défini par
l’utilisateur pour une série d’instructions. Les instructions With accélèrent l’exécution
des procédures et permettent d’éviter des saisies répétitives.
Bureautique – vb00mcours, October 21, 2013
5
13
Procédures et fonctions
On appelle procédure un morceau de code que l’on peut appeler. Exemple : une
procédure de mise en page, d’impression, de modification d’un jeu de données,...
On appelle fonction un morceau de code qui restitue une seule valeur. Exemple : le
calcul d’un sinus, le calcul d’un déterminant...
Le but d’une procédure ou d’une fonction est d’écrire un morceau de code réutilisable dans la même application ou dans une autre application. L’autre raison d’être des
procédures et fonctions est la structuration du programme en unités simples pour être
comprises facilement. C’est donc une raison de clarté de programmation et d’esthétique
du programme.
5.1
Déclaration d’une procédure
Syntaxe
[Private | Public] Sub nomproc ( listeDesParamètres )
...
End Sub
Explication Avec Private la procédure n’est connue que dans le module où elle est
définie alors qu’avec Public elle l’est dans tout le projet.
Les paramètres formels sont séparés par des virgules (,). Il est possible de préciser le
mode de passage par valeur ByVal (par défaut) ou par référence ByRef ainsi que le type
des paramètres dans l’en-tête comme suit :
[ByVal|ByRef] par1 As Type1,...
Même si la procédure n’a pas besoin de paramètres, les parenthèses sont nécessaires.
5.2
Appel d’une procédure
Syntaxe
Call nomproc ( listeDesParamètresEffectifs )
Attention Les paramètres effectifs sont séparés par des points-virgules ( ;). S’il n’y a
pas de paramètres, on ne met pas les parenthèses : Call nomproc.
5.3
Déclaration d’une fonction
Syntaxe
[Private | Public] Function nomfcn ( listeDesParamètres ) [As TypeRésultat]
...
nomfcn =
...
End Function
Bureautique – vb00mcours, October 21, 2013
14
Explication Avec Private la fonction n’est connue que dans le module où elle est
définie alors qu’avec Public elle l’est dans tout le projet.
Les paramètres formels sont séparés par des virgules (,). Il est possible de préciser le
mode de passage par valeur ByVal (par défaut) ou par référence ByRef ainsi que le type
des paramètres dans l’en-tête comme suit :
[ByVal|ByRef] par1 As Type1,...
Même si la fonction n’a pas besoin de paramètres, les parenthèses sont nécessaires.
Attention Le nom de la fonction qui est aussi le nom du résultat, doit apparaı̂tre dans
le corps de la fonction (généralement à la fin), non suivi de la parenthèse, à gauche du
signe =.
5.4
Appel d’une fonction
Syntaxe
valeur = nomfcn ( listeDesParamètresEffectifs )
Attention
Les paramètres effectifs sont séparés par des virgules (,).
Bureautique – vb00mcours, October 21, 2013
6
15
Fonctions standard
La description et l’utilisation des fonctions standard (avec des exemples) se trouve
dans l’aide de Visual Basic au mot-clé Function.
6.1
Fonctions mathématiques
Syntaxe
INT ABS EXP LOG SQR RDN COS SIN TAN ATN...
Explication
cosinus...
6.2
Partie entière, valeur absolue, exponentielle, logarithme, carré, aléatoire,
Fonctions de chaine de caractères
Syntaxe
LEN TRIM UCASE LCASE
Explication
6.3
Longueur de la chaine, élimination des blancs, mise en majuscule...
Fonctions logiques
Syntaxe
ISARRAY ISDATE ISEMPTY ISNULL ISNUMERIC
Explication
6.4
Est un tableau, est une date, est vide, est nul, est un nombre...
Fonctions diverses
Syntaxe
RGB DAY HOUR
Explication
6.5
Proportion de rouge vert bleu, jour de la semaine, heure...
Fonctions Excel
Syntaxe
SOLVER
Explication
Appel du solveur
Bureautique – vb00mcours, October 21, 2013
7
7.1
16
Quelques fonctions/méthodes
Fonction RGB
Syntaxe
RGB(r,g,b)
Explication Renvoie une couleur définie par sa quantité de rouge, de vert et de bleu,
par trois entiers compris entre 0 et 255. Voici le tableau fourni dans VBA :
Couleur
Noir
Bleu
Vert
Cyan
Rouge
Magenta
Jaune
Blanc
7.2
R
0
0
0
0
255
255
255
255
Timer
Explication
Single.
Renvoie le nombre de secondes depuis minuit sous forme d’une variable
Fonction Now
Syntaxe
Now
Explication
7.4
B
0
255
0
255
0
255
0
255
Fonction Timer
Syntaxe
7.3
G
0
0
255
255
0
0
255
255
Renvoie une variable de type Variant contenant la date et l’heure.
Méthode Wait
Syntaxe
Application.Wait(dt)
Explication Permet d’attendre une date donnée ou d’arrêter le processus pendant un
petit moment. La date dt est de type Variant.
Attention
fait !
Exemple
Pendant l’attente le poste de travail est bloqué : plus rien ne peut y être
Le code suivant permet d’attendre 15 secondes.
dtreprise = Now + "00:00:15"
Application.Wait(dtreprise)
Bureautique – vb00mcours, October 21, 2013
7.5
17
Méthode Cursor
Syntaxe
Application.Cursor = type_du_curseur_a_afficher
Explication
Permet de faire apparaı̂tre le sablier.
Exemple
reprise = Timer + 20
DoWhile Timer < reprise
Application.Cursor = xlwait ’sablier
Loop
Application.Cursor = xldefault ’fleche
7.6
Méthode OnTime
Syntaxe
Application.OnTime(EarliestTime, Procedure, LastestTime)
Explication Permet d’attendre une date ou un moment pour lancer une procédure.
EarlistTime et LastestTime sont des variables de type Variant et Procedure de type
String.
Exemple
’Lance la procédure depuis l’heure jusqu’à:
Application.OnTime(TimeValue("17:10:05"),"MaProcedure",TimeValue("17:11:10"))
’Lance la procédure à l’heure indiquée:
Application.OnTime(TimeValue("17:10:05"),"MaProcedure")
7.7
Méthode Quit
Syntaxe
Application.Quit
Explication
Permet de quitter l’application Excel.
Bureautique – vb00mcours, October 21, 2013
8
18
Utilisation des fonctions Excel dans le VBA
8.1
Principe
Les fonctions Excel sont utilisables en VBA. Cependant :
– Elles doivent être utilisées sous leur nom en anglais.
– Le séparateur des paramètres dans l’appel est la virgule et non le point-virgule
comme dans leur appel dans Excel.
– Leur appel ne se fait pas comme dans Excel, excepté pour les fonctions propres au
Basic et certaines fonctions comme cos, sqr... now, date. La méthode à utiliser est
la suivante :
Range("...").FormulaR1C1 = "=FCNEXCEL(...)"
Dans les fonctions, utilisez le repérage des cellules par R1C1 comme le rappelle la
propriété FormulaR1C1.
8.2
Fonctions courantes
Les fonctions les plus courantes sont :
INDEX valeurDeLaCellule=INDEX(matriceOuTable,numlig,numcol)
EQUIV position=MATCH(valeurCherchée,matrice,typeRésultat
COLONNE numeroColonne=COLUMN(référenceCellule)
LIGNE numeroLigne=ROW(référenceCellule)
COLONNES nombreColonnes=COLUMNS(plage)
LIGNES nombreLignes=ROWS(plage)
ADRESSE référenceCellule=ADDRESS(numlig,numcol,type,mode)
INDIRECT valeurDansCellule=INDIRECT(éférenceCellule)
RECHERCHE valeurResultat=LOOKUP(valeur,vecteurCible,vecteurResultat)
RECHERCHEV valeurResultat=VLOOKUP(valeur,matrice,numcol,type)
RECHERCHEH valeurResultat=HLOOKUP(valeur,matrice,numlig,type)
CHOISIR valeur=CHOOSE(num,listeValeurs)
DECALER référencePlage=OFFSET(référence,decalLig,decalCol,haut,large)
CONVERT nombre=CONVERT(nombre,uniteeOrigine,unitéDesrtination)
CAR caractère=ASC(codeCaractère)
CODE codeAscii=CHR(caractère)
TEXTE nombreTexte=TEXT(nombre,format)
MAJUSCULE texteM=UPPER(texte)
MINUSCULE texteM=LOWER(texte)
NOMPROPRE texteM=PROPER(texte)
INFO chemin=INFO("directory")
INFO nombreFeuilles=INFO("nbfich")
INFO adresseCellule=INFO("cellule")
CELLULE chemin=CELL("filename",référence)
Bureautique – vb00mcours, October 21, 2013
NBCAR nbcar=LEN(référenceOuTexte)
SUPPRESPACE texteN=TRIM(texteOuCellule)
GAUCHE sousChaine=LEFT(chaineOuCellule,numcaractères)
DROITE sousChaine=RIGHT(chaineOuCellule,numcaractères)
STXT sousChaine=MID(chaine,départ,longueur)
SUBSTITUE chaine=SUBSTITUTE(chainee,sousChaine,chaineRemplacement)
CHERCHE position=SEARCH(texteATrouver,texte,débutRecherche)
TROUVE position=FIND(texteATrouver,texte,débutRecherche)
AUJOURDHUI dt=TODAY()
MAINTENANT dthr=NOW()
JOUR jr=DAY(dt)
JOURSEM ns=WEEKDAY(dt)
MOIS mm=MONTH(dt)
ANNEE an=YEAR(dt)
DATE dt=DATE(an,mm,jr)
19
Bureautique – vb00mcours, October 21, 2013
20
== Activités Exercices ==
9
Exercices : Déclarations et Instructions simples
9.1
Boite de message simple
Cet exercice crée une boite de message simple.
Action
Accédez à VB (par [Alt F11]) ou appelez Développeur>Visual Basic.
Action Dans l’explorateur de projets (à gauche), cliquez du bouton droit sur VBAProject, sélectionnez Insertion et cliquez sur Module.
Action
Une feuille de code vierge apparaı̂t. Écrivez l’en-tête d’une procédure boiteMsg1.
Solution simple Tapez la ligne suivante puis appuyez sur Entrée. VB insère un
End Sub en met la première lettre des mots-clés en majuscule.
sub boiteMsg1()
Action Affichez "Bonjour tout le monde!" dans une boite de message. Fixez son
titre à "Premier programme".
Solution simple Entre le Sub et le End Sub, tapez le mot-clé msgbox et un espace :
VB nous aide en nous indiquant la syntaxe à utiliser :
– « Prompt » est le contenu de la boite de message. Tapez entre guillemets "Bonjour tout le monde
suivi d’une virgule.
– VB ouvre une liste déroulante, grâce à laquelle il est possible de choisir un style
de boite de message. Pour le moment, nous n’indiquerons rien et donc ajoutez une
virgule pour passer au paramètre suivant.
– « Title » est l’intitulé de la boite qui apparaı̂t dans la barre bleue supérieure. Tapez
entre guillemets "Premier programme".
– Les paramètres « HelpFile » et « Context » ne seront pas utilisés.
Action
Testez votre procédure.
Bureautique – vb00mcours, October 21, 2013
21
Solution simple Le curseur doit être positionné dans la procédure. Dans la barre
de menu VB, appelez Exécution>Exécuter Sub/User Form (ou tapez F5 ou utilisez le
triangle vert de la barre d’outils).
Action
Validez votre procédure avec la solution.
Solution simple
Sub boiteMsg1()
MsgBox "Bonjour tout le monde", , "Premier programme"
End Sub
@[vb00-boiteMsg1]
Action Notez les points suivants :
– Au lancement de la procédure, le fond d’écran est bien revenu dans la grille Excel
elle-même et non pas le fond d’écran de Visual Basic : toutes les applications qu’on
pourra développer concernant les grilles Excel et uniquement elles.
– La boite de message implique que l’utilisateur clique sur le bouton OK pour arrêter
le programme. Ce dernier restera en suspens indéfiniment jusqu’à la validation à
l’aide du bouton.
Bureautique – vb00mcours, October 21, 2013
9.2
22
Boite de message avec retour de valeur
Cet exercice crée une boite de message qui renvoie une valeur suite à l’action de
l’utilisateur sur la boite de message.
Action Écrivez une procédure boiteMsg2 qui affiche la boite de message ci-dessus et
qui range en A1 de la feuille active, l’action de l’utilisateur.
Action
Testez votre procédure.
Action
Validez votre procédure avec la solution.
Solution simple
Sub boiteMsg2()
ActiveSheet.Range("A1").Value = MsgBox("1 pour OK, 2 pour Annuler", _
vbOKCancel, "Deuxième programme")
End Sub
@[vb00-boiteMsg2]
Explication Voici quelques explications :
– La cellule A1 reçoit la valeur de retour de la fonction MsgBox.
– vbOKCancel est le paramètre du type de boite à utiliser. Dans notre cas, une alternative entre les deux boutons OK et Annuler.
Action Vous constaterez en lançant plusieurs fois votre procédure, que le résultat de
l’exécution précédente est restée. Complétez votre procédure de sorte à effacer l’ancien
résultat.
Solution simple
Il suffit d’ajouter la ligne suivante (au début de la procédure) :
ActiveSheet.Range("A1").Value = ""
Bureautique – vb00mcours, October 21, 2013
9.3
23
Saisie de valeur
Cet exercice crée une boite de message avec saisie de valeur.
Action Écrivez une procédure boiteMsg3 qui affiche la boite de message ci-dessus et
qui range l’entrée de l’utilisateur en A1 de la feuille active.
Action
Testez votre procédure en tapant du texte et des chiffres.
Solution simple InputBox est la fonction VB de saisie de texte. La donnée récupérée
est toujours de type String même si le texte tapé par l’utilisateur est un numérique.
C’est Excel qui convertit la chaine de caractères numériques en une valeur numérique et
la présente cadré à droite.
Action
Validez votre procédure avec la solution.
Solution simple
Sub boiteMsg3()
ActiveSheet.Range("A1").Value = InputBox("Entrez ce que vous voulez", _
"Troisième programme", "Hello")
End Sub
@[vb00-boiteMsg3]
Bureautique – vb00mcours, October 21, 2013
9.4
24
Utilisation de variables
Cet exercice déclare une variable puis crée une boite de message avec saisie de valeur
et range la valeur saisie en colonne A et ligne saisie.
Action Écrivez une procédure testSaisie1 qui affiche la boite de message ci-dessus
et qui range la valeur saisie en colonne A et ligne saisie.
Action
Testez votre procédure.
Action
Validez votre procédure avec la solution.
Solution simple
Sub testSaisie1()
Dim vInt As Integer
vInt = InputBox("Entrez un entier positif", "Test saisie", 1)
ActiveSheet.Range("A" & vInt).Value = vInt
End Sub
@[vb00-testSaisie1]
Action Relancez et tapez volontairement un caractère. VB refuse en dénonçant une
erreur de type :
Solution simple En fait, il est plus judicieux de déclarer la variable comme étant de
type String et de valider ultérieurement son contenu.
Bureautique – vb00mcours, October 21, 2013
10
25
Exercices : Instructions structurées
10.1
Saisie validée d’un nombre
Cet exercice demande une entrée jusqu’à ce qu’elle représente un nombre.
Action Écrivez une procédure testNumeric qui demande une entrée jusqu’à ce qu’elle
représente une valeur numérique et range la valeur saisie en A2. Utilisez une structure
Do-Until.
Action
Testez.
Action
Validez votre procédure avec la solution.
Solution simple
Sub testNumeric()
Dim vStr As String
Do
vStr = InputBox("Entrez une valeur numérique")
Loop Until IsNumeric(vStr)
ActiveSheet.Range("A2").Value = vStr
End Sub
@[vb00-testNumeric1]
Action Comme les variables sont par défaut initialisée à vide, écrivez une procédure
testNumeric2 qui utilise une structure while. Rangez la valeur saisie en A3.
Action Testez en cliquant également sur le bouton Annuler. Note : Pour sortir de
boucles infinies, faites [Ctrl Pause].
Action
Validez votre procédure avec la solution.
Solution simple
Sub testNumeric2()
Dim vStr As String
While Not IsNumeric(vStr)
vStr = InputBox("Entrez une valeur numérique")
Wend
ActiveSheet.Range("A3").Value = vStr
End Sub
@[vb00-testNumeric2]
Bureautique – vb00mcours, October 21, 2013
11
26
Exercices : Procédures et fonctions
11.1
Fonction numeroSemaine
Excel intègre une fonction nommée NO.SEMAINE qui peut poser des problèmes. En
effet, le numéro de semaine calculé utilise la norme américaine qui veut que la première
semaine de l’année soit toujours numérotée 1, quel que soit le nombre de jours de ladite
semaine. En Europe, au contraire, la semaine numérotée 1 est la première qui compte au
moins quatre jours.
Cet exercice crée une fonction qui calcule le numéro en utilisant soit la norme américaine, soit la norme européenne.
Action Écrivez l’en-tête d’une fonction numeroSemaine(dateTexte,norme_US_ou_EU)
qui prend en paramètres une date dateTexte et une chaine de caractères norme_US_ou_EU
et renvoie un entier.
Solution simple
Action Écrivez le corps de la fonction numeroSemaine. Elle doit retourner le numéro
de semaine du premier janvier de l’année considérée.
Outil La fonction format(dt,"ww",vbMonday,xxx) présente la date dt sous la forme
d’un numéro de semaine (ww) en considérant que la semaine commence le lundi (vbMonday)
et la numérotation annuelle dès le premier jour de l’année (si xxx vaut vbFirstJan1) ou
ayant au moins quatre jours (si xxx vaut vbFirstFourDays) sur la nouvelle année.
Action
Validez votre fonction avec la solution.
Solution simple
Public Function numeroSemaine(ByVal dateTexte As Date, _
ByVal norme_US_ou_EU As String) As Integer
If norme_US_ou_EU = "US" Then
numeroSemaine = CInt(Format(dateTexte, "ww", vbMonday, vbFirstJan1))
Else
numeroSemaine = CInt(Format(dateTexte, "ww", vbMonday, vbFirstFourDays))
End If
End Function
@[vb00-numeroSemaineA1]
Action Dans la grille Excel du même classeur, inscrivez la date 01/01/2011 puis en
A2, lancez la fonction via l’Assistant de formule.
Bureautique – vb00mcours, October 21, 2013
Action
27
L’assistant fonction ouvre une fenêtre comparable aux siennes :
Action Avec ”EU”, la valeur renvoyée est 52 soit la 52è semaine de l’année 2010 et
non pas la première semaine de 2011. Avec le paramètre ”US”, la valeur renvoyée est 1.
Action Écrivez une procédure test_numeroSemaine qui demande et saisit une date
dans une boite de saisie. Par défaut, mettez la date du jour.
Bureautique – vb00mcours, October 21, 2013
Action
Calculez et affichez le numéro de semaine dans le système européen.
Action
Testez. Exemple d’exécution.
Action
Validez votre procédure avec la solution.
28
Solution simple
Sub test_numeroSemaine()
Dim dt As Date
dt = InputBox("Indiquez une date", "Calcul du numéro de semaine", Date)
MsgBox ("Le numéro de semaine du " & dt & " est le n˚" & numeroSemaine(dt, "EU"))
End Sub
@[vb00-testNumeroSemaine1]
Bureautique – vb00mcours, October 21, 2013
11.2
29
Procédure transposer
Cet exercice réalise la transposition d’une plage sélectionnée.
Action Écrivez une procédure transposer qui réalise la transposition d’une plage
sélectionnée.
Action
Validez votre procédure avec la solution.
Solution simple
Sub transposer()
Dim contenu()
Dim olig As Long: olig = ActiveCell.Row
Dim ocol As Long: ocol = ActiveCell.Column
Dim nligs As Long: nligs = Selection.Rows.Count
Dim ncols As Long: ncols = Selection.Columns.Count
ReDim contenu(0 To nligs, 0 To ncols)
Dim ix As Long, jx As Long
For ix = 0 To nligs - 1
For jx = 0 To ncols - 1
contenu(ix, jx) = Cells(ix + olig, jx + ocol)
Next jx
Next ix
Selection.ClearContents
Cells(olig, ocol).Select
For ix = 0 To ncols - 1
For jx = 0 To nligs - 1
Cells(ix + olig, jx + ocol).Formula = contenu(jx, ix)
Next jx
Next ix
End Sub
@[vb00-transposerA1]
Action Copiez/collez les données brutes fournies dans un onglet renommé transposer.
@[va00commerciaux.txt]
Action Écrivez une procédure test_transposer qui demande et saisit une plage dans
une boite de saisie.
Bureautique – vb00mcours, October 21, 2013
Action
Transposez la plage sélectionnée.
Action
Testez. Voici le résultat d’exécution.
Action
Validez votre procédure avec la solution.
30
Solution simple
Sub test_transposer()
Dim pl As Range
Set pl = Application.InputBox(prompt:="Sélectionnez une plage", Type:=8)
pl.Select
Call transposer
End Sub
@[vb00-testTransposer1]