EXPLICATION BOUCLE

L

LAURA15

Guest
J'essaie de me former un peu en VBA
J'ai comprsi un certains nombre de choses ouf :)
Mais je but sur cela par exemple

Jais un tableaus a 2 colonnes de ce type collone A et B
Ligne1 1
Ligne2 2
Ligne3 3
Ligne4 4
etc 5
eyc 6
etc 7
etc 8

Grace a cette macro la collone b est incremente de 1
Sub boucle_do_while_wend()
'Définition des variables
Dim a As Integer
a = 1
'Boucle jusqu'à ce qu'il
'rencontre une cellule vide
Do While Cells(a, 1).Value <> ''
Cells(a, 2).Value = a
a = a + 1
Loop
End Sub

Je croyais avoir compris mais quand j'ai voulue la modifier en faisant en sorte que l'incrementation parte de 6 cela ne fonctionne pas c'est donc que je n'ai pas compris cette partie je pense
je ne comprends pas la partie Cell(a,1) ????

voila c eque j'ai fait

Sub boucle_do_while_wend()
'Définition des variables
Dim a As Integer
a = 6
'Boucle jusqu'à ce qu'il
'rencontre une cellule vide
Do While Cells(a, 1).Value <> ''
Cells(a, 2).Value = a
a = a + 1
Loop
End Sub

cela ne fonctionne pas il ne commence pas a 6 a la ligne 1
J'aimerais comprendre pourquoi ?
qui at'il dans Cells(a,1) ???
Merci
 
L

LAURA15

Guest
J'ai regarde normalement par exemple Cells(1,1) fait reference a la ligne 1 collen 1
Donc je pensais qu'en faisant ca mais ca boucle snif dur dur
les débuts
Sub boucle_do_while_wend2()
'Définition des variables
Dim a As Integer
a = 6
'Boucle jusqu'à ce qu'il
'rencontre une cellule vide
Do While Cells(1, 1).Value <> ''
Cells(1, 2).Value = a
a = a + 1
Loop
End Sub
 

Hervé

XLDnaute Barbatruc
bonjour laura

cells(ligne, colonne) représente une cellule désignée par sa ligne et sa colonne.

dans ta boucle tu as besoin d'incrémenter deux choses, le numéro de la ligne ( Do While Cells(a, 1).Value <> ''), et le numéro à placer dans ta colonne 2 ( Cells(a, 2).Value = a).

Ce sont deux éléments distincts et tu ne peux donc utiliser la meme variable.

Ou faire varier l'une des deux utilisations :

Sub boucle_do_while_wend()
'Définition des variables
Dim a As Integer
a = 6
'Boucle jusqu'à ce qu'il
'rencontre une cellule vide
Do While Cells(a-5, 1).Value <> '''l e-5 sert à s'assurer que l'on part bien de la ligne 1
Cells(a-5, 2).Value = a
a = a + 1
Loop

De plus, il faut te méfier de ce type de boucle car si tu as une ligne vide au milieu de tes données en colonne A, la macro risque de ne pas traiter le reste de la colonne.

il vaut mieux, à mon avis lui préférer une boucle for to :

dim i as byte
for i=1 to range('a65536').end(xlup).row
cells(i,2)=i+5
next i

salut

Message édité par: Hervé, à: 07/11/2005 11:23
 
L

LAURA15

Guest
Ok super je viens de comprendre :eek:hmy:
Pour la 2éme solution en effet c'est mieux en cas de cell vide mais je voulais tester un peu toutes les boucles
Par conte je pensais qu'il fallait mettre 'for each' apprement le each n'est pas obligatoire ? bon j'ai appris ca aussi
Merci
 

Hervé

XLDnaute Barbatruc
re laura

si si le each est obligatoire :)

Tu as 2 types de boucles différents :for to et for each.

Ne confond pas les deux.

Les boucles for to, sont des boucles d'incrémentation (comme les boucles do loop) c'est à dire que l'on incrémente un élément de la boucle pour la faire 'avancer' : for to i=1 to 100, on va incrémenter i de 1 à 100.

tandis que la boucle for to est une boucle de répétition, c'est à dire que l'on répète le code tant que l'on à un élément de la boucle.

dans ton cas ceci donnerait :

dim c as range
dim a as byte

a=6

for each c in range('a1:a'&range('a65536').end(xlup).row)
cells(c.row,2)=a
a=a+1
next c

On utilise plus facilement les boucles for each lorsque l'on doit travailler sur des cellules (enfin, c'est mon avis)

en résumé : tu as 3 types de boucles possibles : for to, for each, do loop

les boucles for each sont il me semble les plus rapide.

salut

Message édité par: hervé, à: 07/11/2005 13:21
 
L

LAURA15

Guest
Ok mais je me disais que si je voulais par exemple incrementer les lignes et decrementer les chiffres par exemple que ca parte de 6 et que aille vers 1
Il faudrait bien déclarer 2 variables
Donc j'ai fait mais il ne décremente pas a , il me mets 5 partout comme si cela était uen constante en fait ?

Sub decrement()
Dim i As Byte
Dim a AS Byte
a=6
For i = 1 To Range('a65536').End(xlUp).Row
Cells(i, 2) = a -1
Next i
End Sub
 

Hervé

XLDnaute Barbatruc
re laura

oui, c'est logique. Que dis ton code ?

pour i= 1 jusqu'à la dernière cellule non vide de la colonne A, place en colonne B a-1.

Mais comme tu n'incrémente pas a, la macro fait toujours a-1.

donc il faut que tu rajoutes un a=a-1 après l'inscription de a dans la cellule.

Sub decrement()
Dim i As Byte
Dim a AS Byte
a=6
For i = 1 To Range('a65536').End(xlUp).Row
Cells(i, 2) = a -1
a=a-1
Next i
End Sub

salut
 
L

LAURA15

Guest
j'ai essayé ca aussi pour decrementer mais c ane focntionne pas non plus snif

Sub Decrement2()
Dim c As Range
Dim a As Byte

a = 6

For Each c In Range('a1:a' & Range('a65536').End(xlUp).Row)
Cells(c.Row, 2) = a
a = a - 1
Next c

End Sub
 
L

LAURA15

Guest
merci je crois que ca va je vais m'entrainer avec d'autres exemples pour vois si j'ai bien compris
Merci encore, ca va finir par rentrer, pas hyper douéeau départ mais bosseuse alors :) ca devrait aller :)
vraiment merci pour ton aide
 

Discussions similaires

Réponses
5
Affichages
248

Statistiques des forums

Discussions
312 305
Messages
2 087 070
Membres
103 454
dernier inscrit
Marion devaux