Question sur une boucle

Bonjour

j"ai une toute petite question sur une boucle qui ne se produit pas , j'aimerai simplement remplir un tableau de cellules de 4 lignes et 4 colonnes , chaque cellule prenant la valeur du numero de ligne , j'ai ecris le code suivant

Sub remplissage()
For i = 1 To 4
 While j < 4
 j = j + 1
 Cells(i, j) = i
 Wend
Next
End Sub

ma premiere ligne et remplie de "1" c'est parfait , mais pour les valeurs de i allant de 2 à 4 la boucle ne se fait pas apres le next

est ce à cause de l'insertion du wend ?

Merci pour vos réponses

Salut rocket4,

Avant de te donner la solution, je t'invite à essayer d'exécuter ton code en pas à pas pour voir ce qui cloche. Je pense que tu peux trouver tout seul !

Pour exécuter en mode pas à pas :

1. Aller dans l'éditeur VBA (ALT + F11)

2. Se placer dans ta macro

3. Appuyer sur F8 autant de fois que nécessaire pour dérouler la macro

mode debug

Suggestion :

Sub remplissage()
For i = 1 To 4
    For j = 1 To 4
        Cells(i, j) = i
    Next j
Next i
End Sub

Cordialement,

Daniel

Merci Dan42153 pour cette réponse , je vais examiner ta proposition , je savais qu'il y avait plus simple bien sur mais je voulais volontairement introduire un "while" et je voulais savoir ce qui ne fonctionnement dans ce que j'avais ecris

Bonjour à tous,

Bonne année.

Une autre proposition.

Cdlt.

Public Sub DEMO()
Dim tbl(1 To 4, 1 To 4)
Dim I As Byte, J As Byte

    For I = 1 To UBound(tbl, 1)
        For J = 1 To UBound(tbl, 2)
            tbl(I, J) = I
        Next J
    Next I

    Cells(1).Resize(UBound(tbl, 1), UBound(tbl, 2)).Value = tbl
    Erase tbl()

End Sub

l'utilisation de la touche f8 montre que la premiere ligne est bien remplie , ensuite pour les autres lignes je passe de while à next 3 fois

mais je ne comprend toujours pas pourquoi


Merci jean eric pour cette proposition , je sais que des solutions plus simple permettent de faire autrement mais je souhaiterai rester dans dans le contexte de mon premier code afin de comprendre le comportement du "while" dans la boucle


ca y est j'ai trouvé !!!

Sub remplissage()
For i = 1 To 4
[b]j = 0[/b]
While j < 4
j = j + 1
Cells(i, j) = i
Wend
Next i
End Sub


Sub remplissage()
For i = 1 To 4
j = 0   ---> il manquait ceci pour initialiser la valeur de j
While j < 4
j = j + 1
Cells(i, j) = i
Wend
Next i
End Sub

Je vois qu'il y a pas mal d'âmes charitables

Pour répondre à ta question, j'ai oublié de te dire "d'espionner" ta variable j pour voir comment elle évolue au cours du pas à pas :

1. Aller dans l'éditeur VBA (ALT + F11)

2. Se placer dans ta macro

3. Sélectionner la variable j puis faire clic droit / ajouter un espion / OK

3bis. Une nouvelle fenêtre s'affiche

4. Reviens sur ta macro et exécute ton code en mode pas à pas

Au fur et à mesure que tu déroules ton code, la valeur de la variable j va évoluer.

Lorsque tu arriveras à la 2è ligne, regarde combien vaut ta variable j...

mode debug

Tu as été plus rapide !!

C'était bien ça. Tu ne réinitialisais pas ta variable j lors de chaque itération de i.

Morale de l'histoire :

Lorsque ton code ne produit pas le résultat attendu, utilise le mode Débogage de VBA !

En plus de F8, regarde ce qu'il y a dans le menu Débogage.

En complément de ça, il est très utile de regarder l'évolution de tes variables pour voir ce qui cloche ou pas. Pour cela, afficher la fenêtre des variables locales peut très fortement t'aider ! (Menu Affichage / Fenêtre Variables locales)

merci vba-new ! , une methode que je ne connaissais pas !

Rechercher des sujets similaires à "question boucle"