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

ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
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
Utilisateur anonyme
 
C'est exactement ça.
C'est vrai qu'un if fonctionne aussi bien qu'un while ici.
Merci beaucoup !
0
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
Utilisateur anonyme
 
Désolé, my mistake....
Il manque un End If
0
ccm81 Messages postés 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
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
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