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 :

Plusieurs conditions dans un while


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de laloune
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2005
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2005
    Messages : 487
    Par défaut Plusieurs conditions dans un while
    Salut à tous !

    j'ai un petit souci avec VBA : je souhaiterais mettre plusieurs conditions dans une condition While. J'ai écrit ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    While k="toto" or k="tata"
     
      instructions...
     
    Wend
    Merci d'avance !!

    laloune

  2. #2
    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 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    bonjour,
    et quel est ton problème exactement ?
    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 :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

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

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    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

  3. #3
    Membre éclairé Avatar de laloune
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2005
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2005
    Messages : 487
    Par défaut
    ooops, en me relisant je viens de me rendre compte que ce n'était en effet pas très clair :p

    en fait ce que je souhaite faire, c'est effectuer une boucle avec un while qui prend en compte 2 conditions : tant que k="toto" ou tant que k="tata", alors on exécute les instructions...

    j'ai essayé la syntaxe ci-dessus mais il me génère une erreur...

    ma question est donc : est-il possible de mettre plusieurs conditions dans un while ?

    Merci
    laloune

  4. #4
    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 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    euh, quelle erreur est générée stp ?
    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 :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

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

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    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

  5. #5
    Membre éclairé Avatar de laloune
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2005
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2005
    Messages : 487
    Par défaut
    "1004 - Erreur définie par l'application ou par l'objet"

    j'ai testé mes 2 conditions indépendamment, et elles fonctionnent...

    merci

  6. #6
    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 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    est-ce que ta variable k est un string ?

    ce code fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub test()
    Dim k As String
    k = "toto"
    While k = "toto" Or k = "tata"
     
      Debug.Print "instructions..."
      k = "tati"
     
    Wend
    End Sub
    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 :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

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

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    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

  7. #7
    Membre chevronné
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Par défaut
    Re,

    Schématiquement, une erreur 1004 survient lorsque VBA demande à Excel de faire quelque chose qui est impossible, ou qui se traduirait par l’affichage dans Excel d’un message d’erreur si on essayait de faire la même chose manuellement, indépendamment de VBA :

    Par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       Range("A" & NumLigne).Select
    n’ a rien de choquant, mais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Test()
    Dim NumLigne As Long
    NumLigne = 2 ^ 21
        Range("A" & NumLigne).Select
    End Sub
    va générer une erreur 1004, car 2 puissance 21 = 2 097 152, ce qui est supérieur au nb de lignes d’une feuillle Excel, même avec la version 2007.

    En l’occurrence, l’instruction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       Range("A" & NumLigne).Select
    est correcte, mais va provoquer "l’ire” d’Excel si NumLigne ne désigne pas un numéro de ligne correct.

    Par conséquent ton problème n’a rien à voir avec ton test, mais avec l’une des instructions, à l’intérieur de la boucle.

    Que se passe-t-il si tu cliques sur le bouton Débogage, quand survient l’erreur ? Quelle instruction est surlignée ?

    Cordialement,

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Citation Envoyé par laloune Voir le message
    "1004 - Erreur définie par l'application ou par l'objet"

    j'ai testé mes 2 conditions indépendamment, et elles fonctionnent...

    merci
    Salut
    Exécute ta macro pas-à-pas et regarde la ligne en erreur :
    Si la boucle avec chaque instruction fonctionne, mais pas avec les 2 couplées avec Or, ça ne veut pas forcément dire que ton erreur provient de cette ligne
    A+

  9. #9
    Membre chevronné
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Par défaut
    Bonjour,

    Citation Envoyé par laloune Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    While k="toto" or k="tata"
    Cela devrait fonctionner, à condition que k soit modifié dans la boucle. Sinon, le résultat du test ne risque pas de changer, et si k était égal à toto" ou à "tata", le traitement ne sortira jamais de la boucle.

    Toutefois, évite les boucles

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    While k="toto" or k="tata"
        instructions...
    Wend
    Emploie plutôt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Do While k="toto" or k="tata"
        instructions...
    Loop
    L’intérêt est que la seconde syntaxe permet de sortir de la boucle si nécessaire evec un

    Par exemple, en phase de test, tu peux employer (à adapter bien sûr, s’il est normal de passer 1 000 fois dans la boucle) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Do While k="toto" or k="tata"
        instructions...
        i = i  + 1
            If i = 1000 Then
                MsgBox "Apparemment, bug, déjà 1000 passages dans la boucle !"
                Exit Do
            If i = 1000 Then
    Loop

    En résumé, Do While ... Loop permet de faire tout ce que fait While ... Wend, mais avec plus de souplesse

    Cordialement,

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

Discussions similaires

  1. Plusieurs conditions dans un while/wend, possible?
    Par rsoul dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/06/2008, 15h10
  2. plusieurs condition dans un while
    Par realkilla dans le forum C#
    Réponses: 4
    Dernier message: 17/05/2008, 16h16
  3. [Bash] mettre plusieurs conditions dans un while
    Par arnaudperfect dans le forum Shell et commandes GNU
    Réponses: 13
    Dernier message: 22/07/2007, 22h44
  4. Validation de plusieurs conditions dans un EVALUATE
    Par apokrif dans le forum Cobol
    Réponses: 4
    Dernier message: 29/03/2007, 23h28
  5. Plusieur Condition dans REquette UPDATE
    Par ducseb dans le forum Langage SQL
    Réponses: 12
    Dernier message: 11/08/2005, 11h46

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