Boucle while en VBA

Résolu
Utilisateur anonyme -  
 Utilisateur anonyme -
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. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
  2. Utilisateur anonyme
     
    C'est exactement ça.
    C'est vrai qu'un if fonctionne aussi bien qu'un while ici.
    Merci beaucoup !
    0
  3. Utilisateur anonyme
     
    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
  4. Utilisateur anonyme
     
    Désolé, my mistake....
    Il manque un End If
    0
    1. ccm81 Messages postés 11033 Statut Membre 2 434
       
      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. Utilisateur anonyme
       
      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