Probleme avec boucle while

rimbaut Messages postés 61 Date d'inscription jeudi 19 mai 2005 Statut Membre Dernière intervention 1 juin 2014 - 12 juil. 2008 à 19:11
rimbaut Messages postés 61 Date d'inscription jeudi 19 mai 2005 Statut Membre Dernière intervention 1 juin 2014 - 13 juil. 2008 à 15:22
Bonsoir à tous,
Je rencontre un probléme avec la boucle While. En effet, je voudrais parcourir une liste de compte d'une colonne sachant que je ne connais pas au départ le nombre de compte que peut contenir cette colonne. Aussi j'ai opté pour la boucle while wend pour solutionner mon probléme.
Ainsi, je voudrais parcourir sur la feuille "Balance" la colonne a1 de façon à chercher les comptes qui commencent par 61 et les copier sur une autre feuille.
J'ai reproduit ci après un extrait de mon code et la boucle while achoppe. Quelqu'un peut il venir à mon aide, je ne suis qu'un débutant.
Merci d'avance

Sub test2()
   Worksheets("My B400").Activate
    Dim x As Integer
    Dim y As Integer
    Dim y2 As Integer
    Dim Compteur As Byte
    
    Dim total_annee_1 As Long
    Dim total_annee_2 As Long

    total_annee_1 = 0
    total_annee_2 = 0

    y2 = 12

    while left(sheets("Balance").Cells(y,1).value = "61"
       Whith Sheets("My B400")
       .Range("a12").Value = Celles(y2, 1).Value
       End With
    Compteur = Compteur + 1
    
    Wend
    
End Sub

5 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
12 juil. 2008 à 19:36
salut,
while left(sheets("Balance").Cells(y,1).value = "61"

ouai... mais y ne change jamais ^^

sinon il manque un argument et une parenthèse pour ton left...
left$(..., 2)
with, pas whith
compteur ne te sert ici à rien puique tu ne l'utilises pas
++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp  
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
12 juil. 2008 à 19:46
Salut
Le principal est que tu comprennes ce que tu as écrit et que tu corriges toi même.
 Voici quelques indices :

- Dans le While, tu testes la cellule pointée par "y"
  Au démarrage, "y" vaut 0 --> Surement une erreur

- Dans le While, tu utilises "y" pour désigner la ligne
   Ensuite tu fais une recopie vers la cellule "A12" (*) de la cellule pointée par "y2"
   "y2" va rester à 12 ... on ne la voit évoluer nulle part ...
   Ce serait plutôt "y", non ?
   (*) Au fur et à mesure que la boucle avancera, tu écraseras le contenu de "A12"
        Il faudrait utiliser Compteur, non ?
        Il faudra penser à l'initialiser à la valeur 12 (la colonne A ne doit pas bouger, je pense) avant de commencer

- Ensuite tu incrémente "Compteur"
   C'est bien, mais cette variabnle ne sert nulle part !
   Il vaudrait mieux incrémenter la ligne, donc "y", non ?

- Quand tu débugue un programme qui contient une boucle, il faut toujours insérer un DoEvents dedans.
   Cela permet de redonner la main au système et cela te permettra d'arrêter le programme sans trop de casse si il boucle sans fin, ce qui doit se produire actuellement.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
12 juil. 2008 à 19:47
Ah oui, et puis "Celles(x...)" --> Vérifie ta syntaxe
0
rimbaut Messages postés 61 Date d'inscription jeudi 19 mai 2005 Statut Membre Dernière intervention 1 juin 2014
12 juil. 2008 à 19:57
Merci de m'avoir répondu PCPT. Ma boucle ne marche pas.
Ce que je souhaite faire est ceci :
Variable y  est la colonne 1 de la feuille "Balance" que je veux parcourir pour copier vers des feuilles appropriées les lignes correspondant aux numéros  de compte commençant par exemple par 61, 62, 63, 64, 65 ect...

J'ai une procédure qui fonctionne, c'est celle ci :
Sub Test()
    Worksheets("My B500").Activate
    Dim x As Integer
    Dim y As Integer 'ligne dans la balance
    Dim y2 As Integer ' ligne dans l'autre feuille

    Dim total_annee_1 As Long
    Dim total_annee_2 As Long

    total_annee_1 = 0
    total_annee_2 = 0

    y2 = 12
    For y = 11 To 445
    ' Si le compte commence par 63, copier les valeurs de la balance
    ' vers la feuille My B500
        If Left(Sheets("Balance").Cells(y, 1).Value, 2) = "63" Then
            Sheets("Balance").Cells(y, 1).Copy
            Sheets("My B500").Cells(y2, 1).PasteSpecial xlPasteValues

mais elle n'est pas adaptée car j'ai rentré dans ce cas précis la dimension de la colonne alors qu'en principe je ne la connais pas.
C'est pour celà que je souhaite utiliser une boucle. Le problème est que je comprends l'algo mais j'ai du mal à le traduire en vba.
Merci encore pour votre aide
    
  
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
rimbaut Messages postés 61 Date d'inscription jeudi 19 mai 2005 Statut Membre Dernière intervention 1 juin 2014
13 juil. 2008 à 15:22
Bonjour,
Toujours le problème avec la boucle. L'écriture semble correcte car elle ne bugue pas mais rien ne s'exécute.
Nota :
y2 reste à 12 car c'est la 1er position de la cellule dans la feuille My B400 qui va recevoir la valeur de la cellule trouvée dans la feuille "Balance".

Quelle est mon erreur qui fait que le code s'exécute mais rien ne se passe ?

Sub test2()
   Worksheets("My B400").Activate
    Dim x As Integer
    Dim y As Integer
    Dim y2 As Integer
    Dim Compteur As Byte
    
    Dim total_annee_1 As Long
    Dim total_annee_2 As Long

    total_annee_1 = 0
    total_annee_2 = 0

    y2 = 12
    y = 11
    While Left(Sheets("Balance").Cells(y, 1).Value, 2) = "61"
       Sheets("Balance").Cells(y, 1).Copy
       Sheets("My B400").Cells(y2, 1).PasteSpecial xlPasteValues
    Compteur = Range("a1").Value
    
    Wend
    
End Sub

Merci beaucoup pour votre patience
0
Rejoignez-nous