L ’événement CHANGE est détecté par Vba dès
qu ’un caractère est saisi ( ou tapé) dans l ’objet
TextBox.
Par contre l ’événement AFTERUPDATE laisse le
temps à l ’utilisateur de taper plusieurs dans la
boite, et détecte qu ’il a fini quand il appuie sur :
• la touche Entrée
• ou la touche Tab
• ou la souris
On a souvent besoin de faire faire à notre
programme un traitement d ’initialisation de
variables, ou de plages de cellules d ’une feuille
d ’Excel, qu ’on ne peut pas simplement réaliser en
modifiant les propriétés de certains objets.
Dans ce cas on écrit le traitement nécessaire dans
une procédure intitulée :
Private Sub Userform_Initialize()
Elle sera déclenchée automatiquement au
démarrage du programme, et ne fonctionnera
qu ’une seule fois
Pour faire appel à une méthode sans paramètre
Objet. Méthode Exemple : Saisie.SetFocus
Syntaxe d’écriture du code
Pour faire appel à une méthode qui a des paramètres
Objet. Méthode nom_du_paramètre :=valeur, nom_du_paramètre :=valeur… en donnant les paramètres sans ordre prédéfini, mais en les nommant
Objet. Méthode (valeur,valeur,,valeur) en donnant les valeurs des paramètres en fonction de leur position dans la liste des paramètres attendus
expression.Replace(What, Replacement, LookAt, SearchOrder, MatchCase, MatchByte)
Cet exemple montre comment remplacer chaque occurrence de la fonction SIN par la fonction COS. La plage de remplacement est la colonne A de Feuil2.
En nommant les paramètres :Worksheets("Feuil2").Columns("A").Replace _
What:="SIN", Replacement:="COS", _ MatchCase:=True
Sans nommer les paramètres :Worksheets("Feuil2").Columns("A").Replace _
("SIN","COS", , ,True)
Syntaxe d’écriture du code
Pour attribuer une valeur à une propriétéObjet.Propriété = valeur Exemple : OK.Visible = true
Pour mémoriser la valeur d’une propriété dans une variable
Nom_de_variable = Objet.PropriétéExemple : nom = Saisie.Value
Pour écrire une ligne de code sur plusieurs lignes de l’éditeur : il faut indiquer qu’il y a une suite en tapant en fin de ligne le caractère souligné _
Pour mettre des commentaires Commencer la ligne de code par une apostrophe
Différents cas de construction de IF THEN …..
IF a >0 THEN
instruction 1
IF b > 12 THEN
instruction 2
ELSEIF b<8 THEN
instruction 3
ELSE instruction 4
END IF
ELSE instruction 5
END IF
IF a >0 THEN
instruction 1
ELSEIF a = 0 THEN instruction 2
ELSEIF a<-10 THEN
instruction 3
ELSEIF a < -5 THEN
instruction 4
ELSE instruction 5
END IF
IF a > 0 THEN
IF b > 12 THEN
instruction1
END IF
IF c > 8 THEN
instruction 2
ELSE
instruction 3
END IF
instruction 4
ELSE instruction 5
END IF
Nous allons étudier un programme qui permet de faire répéter plusieurs fois un même enchaînement de procédures et événements.
On ne peut pas matérialiser un traitement répétitif par une boucle classique ( Pour, Jusqu ’à, ou Tant Que) lorsqu ’un événement, déclenché par l ’utilisateur, intervient au cours de ce traitement.
Dans ce programme on trouvera aussi des procédures qui ne dépendent pas directement d ’un événement
Dim nb1, nb2, err, nbfois As Integer
Private Sub UserForm_Initialize() Randomize err = 0 Genere nbfois = 0End Sub
Sub Genere() nombre1.Caption = Int(Rnd * 8) + 2 nombre2.Caption = Int(Rnd * 8) + 2 nb1 = nombre1.Caption nb2 = nombre2.Caption End Sub
Sub AfficheBilan() Dim rep As Integer rep = Val(reponse.Value) If rep = (nb1 * nb2) Then MsgBox "Bien" Else: MsgBox "faux" err = err + 1 End IfEnd Sub
AfficheBilan et Genere sont des procédures qui sont déclenchées par d ’autres procédures et non pas par des événements
Sub validez_Click() nbfois = nbfois + 1 If nbfois < 4 Then AfficheBilan If nbfois = 3 Then validez.Caption = "FIN" MsgBox "vous avez fait " & err & " erreurs" reponse.Locked = True Else: reponse.SetFocus Genere reponse.Value = "" End If Else End End IfEnd Sub
Les boites de dialogue MSGBOX
Pour afficher simplement un message et le bouton OK :
MSGBOX (’’ vous avez fait’’ & erreurs & ’’erreurs ’’)
Pour afficher un texte et les boutons OK et ANNULER :
Réponse = MSGBOX (’’ texte ’’ ,1, ’’titre ’’)
Le 2° paramètre, qui vaut ici 1, provoque l’apparition des 2 boutons OK et ANNULER
Le 3° paramètre apparaîtra en titre en haut de la boîte de dialogue
La variable Réponse contiendra :
1 si l’utilisateur a cliqué sur OK,
ou 2 s’il a cliqué sur ANNULER.
On peut ensuite tester cette variable pour continuer le traitement selon le choix de l’utilisateur
Ainsi la ligne suivante affichera la boite ci-dessous
Choix = MSGBOX (’’erreur d’écriture ’’,1, ’’vérification LO10’’)
Autres valeurs possibles du 2° paramètre de MSGBOX
2 : pour afficher les boutons Abandonner, Répéter et Ignorer
3 : pour afficher les boutons Oui, Non, et Annuler
4 : pour afficher les boutons Oui et Non
5 : pour afficher les boutons Répéter et Annuler
Valeurs possibles de la réponse en fonction du choix de l’utilisateur dans MSGBOX
1 s’il a cliqué sur OK
3 s’il a cliqué sur Abandonner
4 s’il a cliqué sur Répéter
2 s’il a cliqué sur Annuler
5 s’il a cliqué sur Ignorer
6 s’il a cliqué sur Oui
7 s’il a cliqué sur Non
Définitions
C ’est une zone précise de la mémoire centrale,
allouée temporairement à un programme pour
gérer les valeurs successives d ’une information.
Une variable est définie par :
• son nom
• et son type
Construction d’un nom de variable
Un nom de variable doit
commencer par une lettre
avoir moins de 255 caractère, et au moins 1
ne contenir que
des lettres
et des chiffres (facultatifs)
et traits de soulignement _ (facultatifs)
les espaces sont interdits ainsi que les autres signes de ponctuation
former un mot quelconque, sauf un mot réservé du langage Basic, comme End ou Sub, etc.
Définitions
Une variable n ’a toujours qu ’une seule valeur à
un instant donné.
Une valeur ne peut être mémorisée dans une
variable que si leurs types respectifs sont
compatibles.
Exemple : un nombre entier peut-être mémorisé
dans une variable de type réel, mais il perdra sa
nature d ’entier.
Définitions
Une variable peut être renseignée
•par une donnée utilisateur lors d ’une
ACQUISITION
•ou directement par programme, suite à un calcul,
un test, une lecture dans un fichier, un appel de
procédure ou de fonction, lors d ’une
AFFECTATION
Définitions
La désignation du type de la variable permettra
à l ’ordinateur :
• de dimensionner au mieux l ’espace alloué en
mémoire centrale
•de filtrer des valeurs cohérentes
•de savoir quels procédés de codage et
décodage il doit appliquer
Définitions
Voici quelques types de variables courants :
•Boolean : vrai ou faux (true/false, 1/0)
•Date : de 1/1/100 à 31/12/9999
•Byte : entiers de 0 à 255
•Integer : entiers de -32768 à +32767
•Currency : entiers de ± 1015
Définitions
•single : réels avec une précision de 7
décimales : de ±1.4 E-45 à ±3.04 E+38
•double : réels avec une précision de 15
décimales : de ±4.94 E-324 à ±1.79
E+308
•string : chaîne de caractères (65 535
octets maximum)
•string*10 : chaîne de 10 caractères
Définitions
Les déclarations de variables facilitent la
compréhension des programmes et participent à
leur optimisation : nous déclarerons donc
TOUTES les variables que nous utiliserons.
En Visual Basic on déclare généralement les
variables ainsi :
Dim NB As Integer
Dim Trouve As Boolean
Outils de traitement des variables de type
chaînes de caractères
La fonction LEN indique le nombre de caractères contenus dans la variable :
LONG = LEN(Saisie.Value)
La procédure LCASE transforme tous les caractères de la variable en minuscules :
LCASE (prénom)
La procédure UCASE transforme tous les caractères de la variable en majuscules :
UCASE (nom)
chaînes de caractères (suite)
La fonction Left recopie des caractères à partir du premier
caractère.
Exemple :
soit la variable NomComplet = ’’DUPONT Jean’’
La commande NomDeFamille = Left (Nomcomplet, 6)
permettra de mettre ’’DUPONT ’’ dans la variable
NomDeFamille
La fonction Right recopie des caractères à partir du dernier caractère.
Exemple :
soit la variable NomComplet = ’’DUPONT Jean’’
la commande Prénom = Right (Nomcomplet, 4)
permettra de mettre ’’Jean’’ dans la variable Prénom
chaînes de caractères (suite)
chaînes de caractères (suite)
NomComplet = ’’DUPONT Jean’’
La fonction Mid permet de recopier
• un certain nombre de caractères (3° paramètre),
• d’une variable Chaîne de caractères (1° paramètre),
• à partir du n° caractère (2° paramètre)
La commande Prénom = Mid(NomComplet,8,4) permet d’obtenir ’’Jean’’ dans la variable Prénom
La fonction InStr permet de savoir si une sous-chaîne se trouve dans une chaîne et à partir de quel endroit (attention aux minuscules, majuscules)
NomComplet = ’’DUPONT JEAN’’
Position = InStr(NomComplet,’’ON’’) Position = 4
Position = InStr(NomComplet,’’on’’) Position = 0
Position = InStr(NomComplet,’’N’’) Position = 5 et c’est tout
Position = InStr(NomComplet,’’I’’) Position = 0
chaînes de caractères (suite)
chaînes de caractères (suite)
Pour remplacer une sous-chaîne, par une autre sous-chaîne, dans une chaîne, on utilise la méthode Replace
Dans la commande suivante :
trouvé = formule.Replace(’’x’’,’’RCM’’)
trouvé est une variable booléenne qui vaudra Vrai si on a trouvé, au moins une fois, la lettre ’’x’’, à remplacer par la chaîne ’’RCM’’, dans la variable formule
chaînes de caractères (suite)
trouvé = formule.Replace(’’x’’,’’RCM’’)
dans cette commande nous n’avons pas précisé s ’il fallait différencier ‘ x ’ et ‘ X ’ donc par défaut ils ne sont pas différenciés, et tous les ‘ x ’ et ‘ X ’ sont remplacés.
Si on ne veut faire remplacer que les ‘ x ’ minuscules, il faut préciser le 5° paramètre de Replace et le mettre à False
trouvé = formule.Replace(’’x’’,’’RCM’’, , , False)
chaînes de caractères (suite et fin)
Exercice :
soit NomComplet = ’’DUPONT JEAN’’
Que trouvera-t-on dans la variable X après la commande :
X=Mid (NomComplet, 1 , InStr (NomComplet ,’’ ’’) -1) ?
Voici différents moyens pour désigner en Visual-Basic une cellule d ’une feuille
d ’Excel et y mettre la valeur 12
• Range( ’ ’A1 ’ ’) = 12
• Set x =Range( ’ ’A1 ’ ’)
x = 12
• Range( ’ ’A1 ’ ’) .Name = ’ ’age ’ ’
Range(’ ’age ’ ’) = 12
Pour mettre en Visual-Basic une formule dans une cellule d ’une feuille d ’Excel
• Range( ’ ’B1 ’ ’) = ’ ’= sin(RC[-1] ) ’ ’
le R vient du mot Row (niveau de ligne)
et le C vient de Column
Dans la cellule B1 on aura le sinus de la valeur située dans la cellule A1 ( même ligne et colonne précédente par rapport à B1)
Voici différents moyens pour désigner en Visual-Basic une plage de cellules
d ’une feuille d ’Excel
•Range( ’ ’A1:B10 ’ ’) = 12
la valeur 12 est recopiée dans toutes les cellules de la plage ’ ’A1:B10 ’ ’
attention : ceci ne permet pas la recopie automatique d ’une formule
•Range( ’ ’prénoms ’ ’) = ’ ’sophie ’ ’
la valeur ’ ’sophie ’ ’ est recopiée dans toutes les cellules de la plage ’ ’prénoms’ ’
Avec la propriété Name, on nomme une plage de cellules. Le nom est visible dans la liste des cellules nommées de la feuille Excel.
•Range (’ ’C2:D10 ’ ’).Name = ’ ’prénoms ’ ’
une plage de cellules d ’Excel en Visual-Basic (suite)
• PR = ’ ’sophie ’ ’ impossible
la valeur ’ ’sophie ’ ’ n ’ est pas recopiée dans toutes les cellules de la variable PR
• set PR = Range (’ ’C2:D10 ’ ’)
La variable n ’est pas visible dans la liste des cellules nommées de la feuille Excel.
une plage de cellules d ’Excel en Visual-Basic (suite)
PR.Cells(5,2) désigne la cellule de la 5° ligne , 2° colonne de la plage référencée par PR (c ’est la cellule D6 de la feuille)
• set PR = Range (’ ’C2:D10 ’ ’)
une plage de cellules d ’Excel en Visual-Basic (suite)
PR.Cells(10) désigne la même cellule (les cellules sont implicitement numérotées dans PR ligne par ligne)
• set PR = Range (’ ’C2:D10 ’ ’)
une plage de cellules d ’Excel en Visual-Basic (suite)
PR.Columns(2) désigne toutes les cellules de la 2° colonne de la plage référencée par PR (ce sont les cellules D2 à D10 de la feuille)
La commande PR.Columns(2) = ’ ’oui ’ ’
remplit toutes les cellules de la 2° colonne de PR avec ’ ’oui ’ ’
• set PR = Range (’ ’C2:D10 ’ ’)
une plage de cellules d ’Excel en Visual-Basic (suite)
PR.Rows(7) désigne toutes les cellules de la 7° ligne de la plage référencée par PR (ce sont les cellules C8 et D8 de la feuille)
La commande PR.Rows(7) = 0
remplit toutes les cellules de la 7° colonne de PR avec 0
PR.Rows.Count indique le nombre total de lignes de la plage PR
• set PR = Range (’ ’C2:D10 ’ ’)
une plage de cellules d ’Excel en Visual-Basic (suite)
PR.Cells.Count indique le nombre total de cellules de la plage PR
PR.Columns.Count indique le nombre total de colonnes de la plage PR
Range(’ ’A1 ’ ’ ) = PR.Cells.Count ??
PR.Cells(PR.Cells.Count) désigne la dernière cellule de la plage référencée par PR (c ’est la cellule D10 de la feuille)
• set PR = Range (’ ’C2:D10 ’ ’)
une plage de cellules d ’Excel en Visual-Basic (suite)
PR.Cells(9,2) et
PR.Cells(18) et
PR.Cells(PR.Rows.Count,PR.Columns.Count) désignent aussi la même cellule, D10 de la feuille d ’Excel
Private Sub UserForm_Initialize()
Dim i As Integer
For i = 1 To Range("noms").Cells.Count
Range("noms").Cells(i).Interior.ColorIndex = 3
Next i
End Sub
Private Sub UserForm_Initialize()
Dim i As Integer
i = 1
Do
Range("noms").Cells(i).Interior.ColorIndex = 3
Loop Until i = Range("noms").Cells.Count
End Sub
Private Sub UserForm_Initialize()
Dim i As Integer
i = 1
Do
Range("noms").Cells(i).Interior.ColorIndex = 3
i = i + 1
Loop Until i = Range("noms").Cells.Count
End Sub
Private Sub UserForm_Initialize()
Dim i As Integer
i = 1
Do While i < > Range("noms").Cells.Count
i = i + 1
Range("noms").Cells(i).Interior.ColorIndex = 3
Loop
End Sub
Private Sub Choix_AfterUpdate()
L = UCase(Choix.Text)
If L < > "O" or L < > "N " Then
MsgBox ("erreur ")
Else
Range("corrigé!G2") = L
End If
End Sub
Top Related