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
    0
    1. C'est exactement ça.
      C'est vrai qu'un if fonctionne aussi bien qu'un while ici.
      Merci beaucoup !
      0
      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 !
        0
        1. Désolé, my mistake....
          Il manque un End If
          0
          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?
            0
          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.
            0