Boucle while() VBA

Résolu
Poloux -  
lermite222 Messages postés 9042 Statut Contributeur -
Bonjour,

Alors voilà le pb (sur lequel je bloque depuis hier).

J'Imbrique deux boucle while dans un for . en clair ça donne ça :

for i = 1 To nb

while "test"
"intruction"

while "test"
"intruction"
wend
wend
Next

Et le souci est que j'ai une erreur "1004" sur le 2eme while(). et je n'arrive pas à trouver d'ou ça peut provenir? (j'incrémente bien chaque while())

Merci à ceux qui pourrait m'aider.

5 réponses

  1. Yoda
     
    Bonjour,

    C'est le "test" qui n'est pas correct.
    Sur quoi porte ton test?

    :)
    0
  2. Poloux
     
    Il porte sur l'égalité de deux valeur successive de la même colonne :

    while Sheets(3).Cells(n, "A") = Sheets(3).Cells(n + 1, "A")

    Wend.

    Merci de ton aide.
    0
    1. Yoda
       
      Ton erreur est là:

      while Sheets(3).Cells(n, "A") = Sheets(3).Cells(n + 1, "A")

      Pour référencer une cellule avec Cells(ligne,colonne) il faut deux valeurs numériques.

      while Sheets(3).Cells(n, 1)= Sheets(3).Cells(n + 1, 1)

      ;)
      0
  3. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour,
    --> Yoda : Mais si, on peu mettre la lettre sans problème.
    -->Poloux : met la procédure complète, comme ça c'est pas possible de détecter l'erreur
    Et dis au moins le N° et libellé de l'erreur
    A+
    Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
    NOTE : Je ne répond pas aux MP pour les questions techniques.
    0
    1. Yoda
       
      Je viens d'apprendre quelque chose. Merci.

      Pour l'erreur, Poloux l'avait mis dans son premier post : c'est l'erreur 1004 .
      0
    2. Yoda
       
      Du coup, puisque la syntaxe etait bonne, c'est surement la valeur n qui est incorrecte, par exemple inférieure ou égale à 0.
      0
    3. lermite222 Messages postés 9042 Statut Contributeur 1 199
       
      Exact Yoda, mais sans plus de renseignement pas possible de trancher.
      Pourrait aussi q'il n'y ai pas 3 feuille, ou qu'elle est protégée ou.. ou..
      0
  4. Poloux
     
    Encore merci de votre aide.

    Voila le bout de la procédure en question :

    For i = 2 To nb_Ligne

    cpt1 = 0

    While Sheets(2).Cells(i, "D") = Sheets(2).Cells(i + 1, "D")

    n = i
    while Sheets(2).Cells(n, "A") = Sheets(2).Cells(n + 1, "A")

    If Sheets(2).Cells(n, "G") = "Oui" Then

    nbS = nbS + 1

    End If

    n = n + 1

    wend

    If nbS > 3 Then

    cpt1 = cpt1 + 1

    End If

    i = n + 1

    Wend

    Sheets(2).Range("P" & i) = cpt1

    Next

    Edit : Lermite => la feuille n'est pas protégé, et elle existe bien
    Edit2 : ptite explication?

    Colonne D j'ai des Noms, colonne A des n° factures.
    Une facture "Oui" est une facture validée.
    Il peut y avoir plusieur fois le même n° de facture, DONC si la même facture est validée 4 fois (ou plus) : mon compteur augment de 1
    Et on passe à un autre n° de facture.

    J'espère avoir fais assez clair :s.
    0
    1. Yoda
       
      Je pense que tu entres dans une boucle infinie qui incrémente n au delà de la valeur maxi(je ne sais plus combien le lignes maxi). Il faudrait que tu modifies le test en ajoutant une condition suplémentaire comme ça par exemple


      While Sheets(2).Cells(i, "D") = Sheets(2).Cells(i + 1, "D") and (i<=nb_Ligne)

      While (Sheets(2).Cells(n, "A") = Sheets(2).Cells(n + 1, "A")) and (n<=nb_Ligne)
      0
    2. Poloux
       
      Ok. Je test ça et je te tiens au courant :).
      0
    3. Poloux
       
      Je pensais la boucle infini impossible sur du VBA sachant que le nb de ligne est limité à 65000 environ.

      Merci du coup de pouce à tout les deux.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    65536 lignes avec Excel 97-2003
    Tu devrais revoir ta procédure, si tu poste un exemple de ton classeur (alléger et sans donnée confidentielle) sur CJoint.com ont pourrait voir pour optimiser.
    Mettre le lien sur un poste suivant.
    0
    1. Poloux
       
      Ah ça serait cool, c'est mes début VBA et c'est vrai que ça m'a l'air surchargé.. Ok je vais poster ça d'ici demain je pense. un titre en particulier (sur le post) pour que tu puisse le repérer rapidement ?
      0
    2. lermite222 Messages postés 9042 Statut Contributeur 1 199
       
      Mais non, tu dois pas créer un nouveau poste, tu le met ici.
      0