|
Les boucles
Le bouton Valider : les boucles
Comme toujours, le bouton Valider contient
le coeur de notre macro.
Le premier problème que nous allons devoir résoudre
est d'atteindre la première ligne vide de notre tableau
pour y insérer notre code.
Première constatation : le point de départ
de notre tableau est la cellule A3. On prendra toujours comme
référence une cellule contenant déjà
un texte. D'où le choix d'A3 dans notre exemple.
Notre première ligne de code sera donc :
Worksheets("Feuil1").Range("A3").Select
Deuxième constation : pour savoir si une cellule
est vide, il va falloir en tester le contenu. La question,
en langage naturel, serait "La cellule actuelle est-elle
vide ?" L'instruction correspondante est IsEmpty(ActiveCell)
qui renvoie la valeur True pour vide
et False pour pleine.
IsEmpty, pour les non anglophones, se
traduit par EstVide.
Quant à ActiveCell, elle désigne
la CelluleActive, c'est-à-dire
celle où est placé notre curseur.
Poursuivons.
Qu'allons-nous devoir faire ? En fait, il va nous suffire de
descendre, ligne par ligne dans la colonne A pour tester le contenu
de chacune de ces cellules et nous arrêter ensuite sur la
première vide.
En langage naturel, nous pourrions donc écrire le postulat
suivant : "Je descend d'une ligne jusqu'à ce que je
rencontre une cellule vide".
Faire quelque chose jusqu'à ce que pourrait se traduire
en anglais par : Do until... Loop
Pour se déplacer d'une ligne ou d'une colonne en vba Excel,
on utilise l'instruction AdresseCelluledeRéférence.Offset
(nbredeLigne,nbredeColonne).
-
On utilisera des valeurs positives pour se
déplacer vers le bas ou vers la droite et des valeurs
négatives pour se déplacer vers le Hautet vers
la gauche .
-
Ainsi, pour se déplacer d'une ligne
vers le bas par rapport à la cellule active, on écrira
: ActiveCell.Offset(1,0).
Pour se déplacer d'une ligne vers le Hautet 3 colonnes
vers la droite : ActiveCell.Offset(-1,3)...
Notre code final sera donc :
Do Until IsEmpty(ActiveCell) = True
ActiveCell.Offset(1, 0).Activate
Loop
En gros, voici la traduction, ligne par ligne
Fait jusqu'à ce que la celluleactive
soit vide (=true)
Descend d'une ligne (mais reste dans la même
colonne)
Sinon recommence
L'instruction "ActiveCell.Offset(1,0)" (descend d'une
ligne) sera répétée jusqu'à ce que
la macro rencontre une cellule vide.
Il existe une autre syntaxe permettant d'obtenir le même
résultat et que je vous invite à découvrir
ici.
|