Boucle while en VBA

Résolu/Fermé
Utilisateur anonyme - 11 avril 2011 à 18:05
 Utilisateur anonyme - 12 avril 2011 à 16:19
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 10903 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 novembre 2024 2 428
11 avril 2011 à 21:21
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
12 avril 2011 à 09:30
C'est exactement ça.
C'est vrai qu'un if fonctionne aussi bien qu'un while ici.
Merci beaucoup !
0
Utilisateur anonyme
12 avril 2011 à 14:28
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
12 avril 2011 à 14:35
Désolé, my mistake....
Il manque un End If
0
ccm81 Messages postés 10903 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 novembre 2024 2 428
12 avril 2011 à 15:09
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
12 avril 2011 à 16:19
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