IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[VBA-E] while et do while


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 48
    Par défaut [VBA-E] while et do while
    Bonjour,

    Je travaille actuellement à extraire des données d'une feuille en compilant les informations importantes dans une autre feuille.

    Pour cela, je dois "scanner" les lignes de ma feuille (dont le nombre est indéterminé). Je me suis donc orienté vers l'utilisation d'un "Do while".

    Pourtant son utilisation reste obscure à mes yeux en VBa (je l'utilise en C et en java). Aide incluse est muette sur l'utilisation de celui-ci et je n'ai trouvé aucune référence à celui-ci si ce n'est une partie de la faq ou l'on voit apparaitre un "Do while not... Loop".

    J'ai donc réutilisé cette syntaxe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Do While Range("A" & numcase).Value = ""
         Sheets("Batch SIN " & annee).Select
         Range("F" & numcase).Select
         DatEnt = ActiveCell.Value
         If Mid(DatEnt, 7, 4) = annee Then
              NumSem = NoSem(DatEnt)
              Sheets(nomfeuille).Select
              Range("C" & (7 + NumSem)).Select
              ActiveCell.Value = ActiveCell.Value + 1
         End If   
         numcase = numcase + 1
    Loop
    Je commence à scanner mes lignes à la ligne 11 et je devrait théoriquement m'aréter à la ligne 54. Cependant le traitement se finit en s'étant arêter à la ligne 31, ce que je ne comprends pas... (Le champ en A31 est renseigner de la même façon que les lignes précédentes et suivantes...)

    Le reste du traitement situer dans ma boucle s'effectue correctement (jusqu'à la ligne 31).

    Merci de votre aide,

    Aethis

  2. #2
    Membre éprouvé Avatar de cwain
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 218
    Par défaut
    Salut
    Peut-être tu devrais mettre le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Batch SIN " & annee).Select
    en fin de boucle (avant le "Loop"). Je crois que dans le cas où tu remplis ta condition "If", tu changes de feuille, mais tu n'as pas d'instruction pour revenir à ta feuille initiale avant la fin de la boucle

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 48
    Par défaut
    Donc, je viens d'essayer avec le Trim("") et le résultat est le même.
    edit : suite au message de ousk qui l'a supprimé


    La ligne suivante ne contient pas d'espace (je viens de vérifier).


    Quand au fait de changer le feuille avant la fin de la boucle, je ne vois pas l'intérêt vu que je le fais en début de boucle et que je ne fais pas de traitement en fin de boucle sur cette feuille. (mais je vais tester au cas où )

    Edit 2 :

    avec ça je passe même pas à la ligne 12... Bref, j'ai pas tout compris ^^'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Do While Range("A" & numcase).Value = ""
            Sheets("Batch SIN " & annee).Select
            Range("F" & numcase).Select
            DatEnt = ActiveCell.Value
            If Mid(DatEnt, 7, 4) = annee Then
                NumSem = NoSem(DatEnt)
                Sheets(nomfeuille).Select
                Range("C" & (7 + NumSem)).Select
                ActiveCell.Value = ActiveCell.Value + 1
            End If
            Sheets("Batch SIN " & annee).Select
     
     
            numcase = numcase + 1
     
        Loop

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    J'ai effacé mon message car j'avais lu (et je ne pense pas me tromper)
    Do While Range("A" & numcase).Value = """
    au lieu de
    Do While Range("A" & numcase).Value = ""
    Ceci dit, Do While voulant dire "Tant que", si tes cellules de la colonne A sont TOUTES renseignées, je suis fort étonné que tu rentres dans la boucle et que tu fasses quoi que ce soit dans tes lignes 11 à 31
    Et c'est pareil quelque soit le langage
    Essaie donc avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Do While Range("A" & numcase).Value <> ""
    et dis-nous
    A+

    Psst ! Tu l'avais pas vue celle-là, cwain !!!

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 48
    Par défaut
    Ceci dit, Do While voulant dire "Tant que", si tes cellules de la colonne A sont TOUTES renseignées, je suis fort étonné que tu rentres dans la boucle et que tu fasses quoi que ce soit dans tes lignes 11 à 31
    Et c'est pareil quelque soit le langage
    Je sais bien, c'est pour ça que j'avais commencer par mettre Do whle not..., mais je ne rentrais pas dans la boucle.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
        numcase = 11
        Do While Range("A" & numcase).Value <> ""
            Sheets("Batch SIN " & annee).Select
            Range("F" & numcase).Select
            DatEnt = ActiveCell.Value
            If Mid(DatEnt, 7, 4) = annee Then
                NumSem = NoSem(DatEnt)
                Sheets(nomfeuille).Select
                Range("C" & (7 + NumSem)).Select
                ActiveCell.Value = ActiveCell.Value + 1
            End If
     
            Sheets("Batch SIN " & annee).Select
            Range("G" & numcase).Select
            If ActiveCell.Value <> "" Then
                DatEnt = ActiveCell.Value
                If Mid(DatEnt, 7, 4) = annee Then
                    NumSem = NoSem(DatEnt)
                    Sheets(nomfeuille).Select
                    Range("D" & (7 + NumSem)).Select
                    ActiveCell.Value = ActiveCell.Value + 1
                End If
            End If
            numcase = numcase + 1
     
        Loop
    et en changeant le code c'est le même problème, je ne rentre pas dans la boucle (vérifier à coup de F8)...


    ps : j'ai rajouté un peu de code dans ma boucle vu que je dois faire un deuxième traitement, mais le problème n'est pas là ^^.

  6. #6
    Membre éprouvé Avatar de cwain
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 218
    Par défaut
    L'intérêt, c'est que la condition (pour que ta boucle tourne) porte sur une cellule d'une feuille. Si tu changes de feuille en cours de boucle et que tu arrives au Loop, VBA va vérifier la condition sur la nouvelle feuille que tu as sélectionnée.

    Essaie de mettre des points d'arrêts dans ton code pour voir ce qui ne va pas

  7. #7
    Membre éprouvé Avatar de cwain
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    218
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 218
    Par défaut
    Bon OK, j'avais pas vu le = au lieu du <> !

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 48
    Par défaut
    Citation Envoyé par cwain
    L'intérêt, c'est que la condition (pour que ta boucle tourne) porte sur une cellule d'une feuille. Si tu changes de feuille en cours de boucle et que tu arrives au Loop, VBA va vérifier la condition sur la nouvelle feuille que tu as sélectionnée.

    Essaie de mettre des points d'arrêts dans ton code pour voir ce qui ne va pas
    c'est bon, j'ai trouvé, grace à ta remarque d'ailleur

    Je ne selectionnais pas la bonne feuille avant de commencer le traitement

    Merci de votre aide.

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Alors tu avais deux erreurs

  10. #10
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 344
    Par défaut
    Citation Envoyé par Aethis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Do While Range("A" & numcase).Value = ""
         Sheets("Batch SIN " & annee).Select
         Range("F" & numcase).Select
         DatEnt = ActiveCell.Value
         If Mid(DatEnt, 7, 4) = annee Then
              NumSem = NoSem(DatEnt)
              Sheets(nomfeuille).Select
              Range("C" & (7 + NumSem)).Select
              ActiveCell.Value = ActiveCell.Value + 1
         End If   
         numcase = numcase + 1
    Loop

    Personnellement, je n'aurai pas utilisé de boucle While, mais plutot un simple For

    De cette façon :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Sheets("Batch SIN " & annee).Select
    for i =1 to range("A1").end(xldown).row
         Range("F" & i).Select
         DatEnt = ActiveCell.Value
         If Mid(DatEnt, 7, 4) = annee Then
              NumSem = NoSem(DatEnt)
              Sheets(nomfeuille).Select
              Range("C" & (7 + NumSem)).Select
              ActiveCell.Value = ActiveCell.Value + 1
         End If   
         Sheets("Batch SIN " & annee).Select
    next i
    (en espérant ne pas m'etre trompé dans ma recopie )

    Sinon pour ton code, c'est normal qu'il s'arrete a la ligne 12, vu que dans ta condition du While :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Do While Range("A" & numcase).Value = ""
    TU lui dit ""Fait tant que la cellule est vide, gnagnagna", vu que ta cellule (si j'ai bien compris) est pleine, il ne rentre pas dans la boucle faut que ut mette :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Do While Range("A" & numcase).Value <> ""
    EDIT : crotte grillé par le Dodo
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. start while: prog in while bash
    Par Luke spywoker dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 17/02/2011, 00h26
  2. [MySQL] while dans un while
    Par kopax dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 11/04/2010, 08h21
  3. [MySQL] while dans une while ?
    Par link.80 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 27/06/2009, 18h09
  4. [VBA-E] Boucle while!
    Par max2245 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/12/2005, 19h26
  5. [VBA] Boucle Do While
    Par jmde dans le forum Access
    Réponses: 4
    Dernier message: 16/10/2005, 20h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo