Boucle while en VBA

Résolu
Bonjour,

Je découvre la boucle while en VBA et je ne comprends pas exactement comment ça fonctionne.
Voici mon code :


Dim a As String
a = 0
Dim b As Long

For b = 1 To 1000
Do While Sheets("Feuil1").Cells(b, 1).Value = ""
Sheets("Feuil3").Cells(b, 1).Value = a
Exit Do
a = a + 1
Sheets("Feuil3").Cells(b, 1).Value = Sheets("Feuil1").Cells(b, 1).Value
Loop

Next
End Sub


Je cherche à écrire en feuille 3 la valeur de la case de la feuille 1 si elle est non nulle et un chiffre sinon (qui est incrémenté chaque fois que l'on a une valeur non nulle).

J'obtiendrai donc quelque chose du style

0
0
valeur de la cellule (3,1)
1
1
1
1
valeur de la cellule (8,1)
2
2
2
2

etc ...

Quelqu'un peut-il m'aider ?

Merci !

4 réponses

  1. bonsoir,

    ce que j'ai compris

    Const bmax = 30
    Dim b As Long
    Dim a As Long
    a = 0
    b = 1
    If Sheets("Feuil1").Cells(b, 1).Value = "" Then
      a = 0
      Sheets("Feuil3").Cells(b, 1).Value = a
    Else
      Sheets("Feuil3").Cells(b, 1).Value = Sheets("Feuil1").Cells(b, 1).Value
    End If
    For b = 2 To bmax
      If Sheets("Feuil1").Cells(b, 1).Value = "" Then
        If Sheets("Feuil1").Cells(b - 1, 1).Value <> "" Then
          a = a + 1
        End If
        Sheets("Feuil3").Cells(b, 1).Value = a
      Else
        Sheets("Feuil3").Cells(b, 1).Value = Sheets("Feuil1").Cells(b, 1).Value
      End If
    Next b


    bonne suite
    1. C'est exactement ça.
      C'est vrai qu'un if fonctionne aussi bien qu'un while ici.
      Merci beaucoup !
      1. Je suis désolé, je réouvre le sujet.
        J'aimerais maintenant faire la même chose pour chacune de mais colonnes.
        J'ai écrit ce code, mais il y a une erreur (1004)....

        Dim cmax As Long
        Dim c As Long
        cmax = 50000
        
        For c = 1 To cmax
        
        Dim bmax As Long
        bmax = Sheets("Feuil1").Cells(65536, c).End(xlUp).Row
        Dim b As Long
        Dim a As Long
        a = 0
        b = 1
        
        
        If Sheets("Feuil1").Cells(b, c).Value = "" Then
          a = 0
          Sheets("Feuil3").Cells(b, c).Value = a
        Else
          Sheets("Feuil3").Cells(b, c).Value = Sheets("Feuil1").Cells(b, c).Value
        End If
        For b = 2 To bmax
          If Sheets("Feuil1").Cells(b, c).Value = "" Then
            If Sheets("Feuil1").Cells(b - 1, c).Value <> "" Then
              a = a + 1
            End If
            Sheets("Feuil3").Cells(b, c).Value = a
          Else
            Sheets("Feuil3").Cells(b, c).Value = Sheets("Feuil1").Cells(b, c).Value
          End If
        Next b
        Next c
        
        End Sub


        Merci encore !
        1. Désolé, my mistake....
          Il manque un End If
          1. re
            avant d'aller plus loin
            Q1. cmax = 50000
            es tu sur d'avoir 50000 colonnes à traiter?
            Q2. ton erreur, sur quelle ligne de code se produit elle?
            Q3. as tu regardé les valeurs des variables au moment du plantage?
          2. Re,

            Mon erreur était le End If manquant...
            Merci quand même.
            En effet, je ne suis pas sûr de traiter 50000 colonnes, mais je ne connais pas le nombre à l'avance.