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 :

Problème avec la boucle "Do-Loop Until"


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 43
    Points : 25
    Points
    25
    Par défaut Problème avec la boucle "Do-Loop Until"
    Bonjour!

    Je vous expose mon problème. Lorsque sup20= vbNo, ou sup21=vbNo, le programme s'arrete au lieu de reprendre la boucle. Pouvez-vous me dire pourquoi, merci d'avance.

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    Private Sub CommandButton1_Click()
    Dim sup2
    sup2 = InputBox("entrer le nom du commercial attitré")
     
    Do
     
    If sup2 = "Zielyk Daniel" Then
     
    'on commence par remplir les heures d'éric
    Dim sup16
    sup16 = MsgBox("voulez-vous remplir les heures d'Eric Lastennet?", vbYesNo + vbDefaultButton1 + vbQuestion)
    If sup16 = vbYes Then
    Cells(10, 4) = InputBox("saisir le nombre d'heures d'étude de temps effectuées")
    Cells(11, 4) = InputBox("saisir le nombre d'heures de démonstrations effectuées")
    Cells(12, 4) = InputBox("saisir le nombre d'heures de support technique effectuées")
    Cells(14, 4) = InputBox("saisir le nombre d'heures d'applications effectuées")
    Cells(15, 4) = InputBox("saisir le nombre d'heures d'exposition effectuées")
    Cells(16, 4) = InputBox("saisir le nombre d'heures d'installation effectuées")
    Cells(17, 4) = InputBox("saisir le nombre d'heures de show room maitenance effectuées")
    Cells(19, 4) = InputBox("saisir le nombre d'heures de permanence téléphonique effectuées")
    Cells(20, 4) = InputBox("saisir le nombre d'heures de traduction effectuées")
    Cells(21, 4) = InputBox("saisir le nombre d'heures de SAV effectuées")
    Cells(22, 4) = InputBox("saisir le nombre d'heures de Formation clients effectuées")
    Cells(23, 4) = InputBox("saisir le nombre d'heures de Formation du personnel effectuées")
    Cells(24, 4) = InputBox("saisir le nombre d'heures de Réception clefs-en-main effectuées")
    Cells(26, 4) = InputBox("saisir le nombre d'heures de Formation professionnelle effectuées")
    End If
     
    'si on ne veut pas remplir les heures d'éric, alors on remplit les heures de fabrice
    If sup16 = vbNo Then
     Dim sup17
     sup17 = MsgBox("voulez-vous remplir les heures d'Fabrice Crassin?", vbYesNo + vbDefaultButton1 + vbQuestion)
     If sup17 = vbYes Then
      Cells(10, 13) = InputBox("saisir le nombre d'heures d'étude de temps effectuées")
      Cells(11, 13) = InputBox("saisir le nombre d'heures de démonstrations effectuées")
      Cells(12, 13) = InputBox("saisir le nombre d'heures de support technique effectuées")
      Cells(14, 13) = InputBox("saisir le nombre d'heures d'applications effectuées")
      Cells(15, 13) = InputBox("saisir le nombre d'heures d'exposition effectuées")
      Cells(16, 13) = InputBox("saisir le nombre d'heures d'installation effectuées")
      Cells(17, 13) = InputBox("saisir le nombre d'heures de show room maitenance effectuées")
      Cells(19, 13) = InputBox("saisir le nombre d'heures de permanence téléphonique effectuées")
      Cells(20, 13) = InputBox("saisir le nombre d'heures de traduction effectuées")
      Cells(21, 13) = InputBox("saisir le nombre d'heures de SAV effectuées")
      Cells(22, 13) = InputBox("saisir le nombre d'heures de Formation clients effectuées")
      Cells(23, 13) = InputBox("saisir le nombre d'heures de Formation du personnel effectuées")
      Cells(24, 13) = InputBox("saisir le nombre d'heures de Réception clefs-en-main effectuées")
      Cells(26, 13) = InputBox("saisir le nombre d'heures de Formation professionnelle effectuées")
      Dim sup21
    sup21 = MsgBox("voulez-vous arréter de remplir la fiche horraire?", vbYesNo + vbDefaultButton1 + vbQuestion)
     If sup21 = vbYes Then
      Exit Sub
     End If
     End If
     
    End If
     
    End If
     
    If sup17 = vbNo Then
    Dim sup20
    sup20 = MsgBox("voulez-vous arréter de remplir la fiche horraire?", vbYesNo + vbDefaultButton1 + vbQuestion)
     If sup20 = vbYes Then
      Exit Sub
     End If
    End If
     
    Loop Until sup20 = vbNo Or sup21 = vbNo
     
    End Sub

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Points : 723
    Points
    723
    Par défaut
    Bonjour,

    Pour ton problème,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Loop Until sup20 = vbNo Or sup21 = vbNo
    Ca te met sur la voie ?

    Cette ligne veut dire que ta boucle continue tant que sup20 <> vbNo ou sup21 <> vbNo. Dans le cas contraire, ben fin de la procédure...

    Bonne continuation.
    DeaD

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 43
    Points : 25
    Points
    25
    Par défaut
    hump désolé je ne suis encore que débutant dans toutes sortes de programmations, donc non ça ne me met pas sur la voie ... tu pourrais m'expliquer un peu mieux stp ??

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Points : 723
    Points
    723
    Par défaut
    Enlève
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Until sup20 = vbNo Or sup21 = vbNo
    et laisse juste le et vois ce que ça donne.

    En gros, tu as une condition de sortie de ta boucle qui est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Until sup20 = vbNo Or sup21 = vbNo
    Lorsque c'est le cas, le programme quitte la boucle tout simplement et s'arrête donc puisque c'est la fin.

    Et vu ton code, lorsque tu arrives à sup20 et sup21, peu importe ta réponse, le programme s'arrête.

    En gros, laisse juste le Loop et ça devrait marcher

    Tiens moi au courant (et ne m'électrocute pas... Oula, la fin de journée est rude )
    DeaD

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 43
    Points : 25
    Points
    25
    Par défaut
    je viens de tester ta solution, malheureusement, cela ne marche pas il m'affiche :
    Erreur de compilation:
    Attendu: While ou Until ou fin d'instruction

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Points : 723
    Points
    723
    Par défaut
    Ah oui, en effet, c'est ma faute J'avais oublié

    Mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Loop Until sup20 = "HiHi" Or sup21 = "HoHo"
    On risque pas de sortir de la boucle comme ça

    Après, c'est pas la bonne méthode mais j'ai pas envie de tout changer Si quelqu'un veut prendre ça
    DeaD

  7. #7
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Plus ismple encore mais sans changer d'idée par contre
    par contre ca serait peut être une bonne idée de déclarer les variable au début du code et pas au milieu des boucle
    et un type pourais être une idée à développer
    (mais n'est pas obligatoire)
    « Il n'y a pas de recette miracle qui permet aux gens d’écrire des programmes corrects sans avoir à réfléchir. Il faut apprendre aux gens comment réfléchir »

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Points : 723
    Points
    723
    Par défaut
    Tiens, tiens.

    Je ne connaissais pas le Merci Krovax

    Tu sais ce qu'il te reste à faire maintenant !
    DeaD

  9. #9
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 43
    Points : 25
    Points
    25
    Par défaut
    j'ai toujours mon problème, cette fois ci avec la comande il me dit : erreur de compilation
    Attendu: fin d'instruction

  10. #10
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    bizard ca fonctionne sous 2003 et 2007. Au pire essaye
    Si ca ne fonctionne tjs pas redonne toute ta boucle
    « Il n'y a pas de recette miracle qui permet aux gens d’écrire des programmes corrects sans avoir à réfléchir. Il faut apprendre aux gens comment réfléchir »

  11. #11
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 628
    Points : 34 330
    Points
    34 330
    Par défaut
    bonjour,
    et si vous changiez la syntaxe en passant par :
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  12. #12
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    bonjour le fil le forum pour moi il me semble qu' il serait plus facile de passer par un userform avec une combobox ou listbox pour les noms des commerciaux puis avec 14 textbox & un bouton valider il code serait beaucoup plus simple si tu as 20 commerciaux cela va vite devenir une usine a gaz ????
    SALUTATIONS

  13. #13
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 43
    Points : 25
    Points
    25
    Par défaut
    bonjour laeticia,
    pourrais-tu m'expliquer plus amplement les différentes procdures que tu me proposes stp ?

    Excuse moi Krovax, mais peut tu me dire ce que représentent les chiffres 1 et 2 stp

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Points : 723
    Points
    723
    Par défaut
    Les chiffres 1 et 2 représentent... TADAM... (roulement de tambours)... les chiffres 1 et 2 !

    En gros la boucle continue tant que 1 n'est pas égal à 2 D'après mes cours de maths, je ne crois pas que c'est possible

    Bref, la boucle continue et ne s'arrête pas comme je te l'avais proposé.

    Teste et dis-nous !
    DeaD

  15. #15
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 43
    Points : 25
    Points
    25
    Par défaut
    mais en gros c'est ce que je fais quand j'écris non?

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Points : 723
    Points
    723
    Par défaut
    Oh que non !

    est une fenêtre de dialogue. vbNo est la réponse "Non" dans cette fenêtre et vbYes est la réponse "Oui".

    En gros, d'après ton code, qd tu réponds "Oui" pour "Oui j'ai fini" tu mets un Exit Sub qui signifie fin de la procédure et donc fin du programme.

    De plus ton programme doit continuer à boucler en permanence tant que tu n'as pas répondu "Oui" dans cette petite fenêtre.

    Or ta boucle se termine si Cela signifie que quand tu cliques sur "Non", ta boucle se termine et le programme aussi donc. C'est donc bien différent de ce qui t'a été proposé.

    1 = 2 n'arrivant jamais, tu es complètement sûr que ton programme ne s'arrêtera jamais peu importe ta réponse à sup20 et sup21.

    Te souviens-tu quand je t'avais demandé si cela te mettait sur la voie ? Je pensais exactement à ça et c'est ce qu'on te proposait.

    Bref, maintenant, change comme cela t'a été proposé et reviens nous voir après pour nous dire comment cela marche. Mais fais ce qu'on te propose. Cela nous sert à rien de te proposer des choses si tu ne les testes pas...

    Sinon, je suis tout à fait d'accord avec le commentaire de laetitia que je salue bien bas ( le sol)
    DeaD

  17. #17
    Nouveau membre du Club
    Inscrit en
    Avril 2009
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 43
    Points : 25
    Points
    25
    Par défaut
    alros j'ai effectué la première modification que vous m'aviez conseillé, ce qui nous donne maintenant:
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    Private Sub CommandButton1_Click()
    Dim sup2
    sup2 = InputBox("entrer le nom du commercial attitré")
     
    Do
     
    If sup2 = "Zielyk Daniel" Then
     
    'on commence par remplir les heures d'éric
    Dim sup16
    sup16 = MsgBox("voulez-vous remplir les heures d'Eric Lastennet?", vbYesNo + vbDefaultButton1 + vbQuestion)
    If sup16 = vbYes Then
    Cells(10, 4) = InputBox("saisir le nombre d'heures d'étude de temps effectuées")
    Cells(11, 4) = InputBox("saisir le nombre d'heures de démonstrations effectuées")
    Cells(12, 4) = InputBox("saisir le nombre d'heures de support technique effectuées")
    Cells(14, 4) = InputBox("saisir le nombre d'heures d'applications effectuées")
    Cells(15, 4) = InputBox("saisir le nombre d'heures d'exposition effectuées")
    Cells(16, 4) = InputBox("saisir le nombre d'heures d'installation effectuées")
    Cells(17, 4) = InputBox("saisir le nombre d'heures de show room maitenance effectuées")
    Cells(19, 4) = InputBox("saisir le nombre d'heures de permanence téléphonique effectuées")
    Cells(20, 4) = InputBox("saisir le nombre d'heures de traduction effectuées")
    Cells(21, 4) = InputBox("saisir le nombre d'heures de SAV effectuées")
    Cells(22, 4) = InputBox("saisir le nombre d'heures de Formation clients effectuées")
    Cells(23, 4) = InputBox("saisir le nombre d'heures de Formation du personnel effectuées")
    Cells(24, 4) = InputBox("saisir le nombre d'heures de Réception clefs-en-main effectuées")
    Cells(26, 4) = InputBox("saisir le nombre d'heures de Formation professionnelle effectuées")
    End If
     
    'si on ne veut pas remplir les heures d'éric, alors on remplit les heures de fabrice
    If sup16 = vbNo Then
     Dim sup17
     sup17 = MsgBox("voulez-vous remplir les heures d'Fabrice Crassin?", vbYesNo + vbDefaultButton1 + vbQuestion)
     If sup17 = vbYes Then
      Cells(10, 13) = InputBox("saisir le nombre d'heures d'étude de temps effectuées")
      Cells(11, 13) = InputBox("saisir le nombre d'heures de démonstrations effectuées")
      Cells(12, 13) = InputBox("saisir le nombre d'heures de support technique effectuées")
      Cells(14, 13) = InputBox("saisir le nombre d'heures d'applications effectuées")
      Cells(15, 13) = InputBox("saisir le nombre d'heures d'exposition effectuées")
      Cells(16, 13) = InputBox("saisir le nombre d'heures d'installation effectuées")
      Cells(17, 13) = InputBox("saisir le nombre d'heures de show room maitenance effectuées")
      Cells(19, 13) = InputBox("saisir le nombre d'heures de permanence téléphonique effectuées")
      Cells(20, 13) = InputBox("saisir le nombre d'heures de traduction effectuées")
      Cells(21, 13) = InputBox("saisir le nombre d'heures de SAV effectuées")
      Cells(22, 13) = InputBox("saisir le nombre d'heures de Formation clients effectuées")
      Cells(23, 13) = InputBox("saisir le nombre d'heures de Formation du personnel effectuées")
      Cells(24, 13) = InputBox("saisir le nombre d'heures de Réception clefs-en-main effectuées")
      Cells(26, 13) = InputBox("saisir le nombre d'heures de Formation professionnelle effectuées")
     
     End If
     
    End If
     
    End If
     
     
     
    If sup17 = vbNo Then
    Dim sup20
    sup20 = MsgBox("voulez-vous arréter de remplir la fiche horraire?", vbYesNo + vbDefaultButton1 + vbQuestion)
     If sup20 = vbYes Then
      Exit Sub
     End If
    End If
     
    Loop Until sup20 = vbNo
     
     
     
    End Sub
    Cependant, en ce qui concerne ma variable sup20, j'ai beau changer sa valeur (c'est à dire qu'elle soit égale à vbNo ou vbYes), la bloucle ne s'effectue tjs pas et à chaque fois mon programme se termine...

  18. #18
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Points : 723
    Points
    723
    Par défaut
    As-tu écouté ce qui a été dit dans les différents posts ?

    Oublie tes vbYes ou vbNo et mets ce qui a été proposé avant : Soit tu le fais, soit tu restes avec ton problème, à toi de choisir.

    A+
    DeaD

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

Discussions similaires

  1. Problème avec une boucle de type Do While =>Loop
    Par Runsh63 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 23/09/2011, 08h53
  2. Problème avec une boucle Do.. Loop Until
    Par gta126 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 29/12/2007, 11h27
  3. [MySQL] Problème avec une boucle
    Par yayacameleon dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 09/03/2006, 09h53
  4. [JMeter] Problème avec la boucle infinie pour les tests
    Par zegreg dans le forum Tests et Performance
    Réponses: 1
    Dernier message: 05/10/2005, 11h41
  5. [Tableaux] Problème avec les boucles
    Par speed_man002 dans le forum Langage
    Réponses: 4
    Dernier message: 21/09/2005, 15h42

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