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 conditions combinées avec des OR et AND


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 7
    Points : 6
    Points
    6
    Par défaut VBA conditions combinées avec des OR et AND
    Bonjour,

    Je suis débutante en vba et je souhaiterais combiner plusieurs conditions dans un if avec plusieurs OR et AND. J'ai environ 35 conditions, est-ce trop? comment puis-je le faire autrement si ce n'est pas possible?

    Les conditions sont du style If Cells(i, "A") <> Cells(i + 1, "A") Or Cells(i, "B") <> Cells(i + 1, "B")….
    Biensur j'ai essayé de toutes les écrire mais arrivé à un point je passe à la ligne suivante et il ne veut plus considérer la deuxième ligne avec la première, donc erreur en rouge.

    Je vous remercie par avance

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je suis débutante en vba et je souhaiterais combiner plusieurs conditions dans un if avec plusieurs OR et AND. J'ai environ 35 conditions, est-ce trop? comment puis-je le faire autrement si ce n'est pas possible?
    Il y a peut-être une solution avec un Select Case mais il est difficile de répondre sans connaître le contexte exact.

    Biensur j'ai essayé de toutes les écrire mais arrivé à un point je passe à la ligne suivante et il ne veut plus considérer la deuxième ligne avec la première, donc erreur en rouge.
    Il est possible d'écrire sur plusieurs lignes une longue instruction.
    Il faut écrire un espace suivi d'un Underscore avant de passer à la ligne. Ainsi VBA considère que c'est sur une même ligne

    Une exemple en reprenant le vôtre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Cells(i, "A") <> Cells(i + 1, "A") _
       Or Cells(i, "B") <> Cells(i + 1, "B")
    Un autre exemple où j'écris les arguments d'une fonction sur plusieurs lignes mais que VBA va considérer comme une seule

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Function GetIniFile(ByVal Section As String, _
                        ByVal Key As String, _
                        ByVal FullName As String, _
                        Optional ByVal DefaultValue As String _
                        ) As String
    Au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Function GetIniFile(ByVal Section As String, ByVal Key As String, ByVal FullName As String, Optional ByVal DefaultValue As String) As String
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Bonjour,

    Je vous remercie l'espace et l'underscore ont suffit dans mon cas.
    C'est bête j'avais essayé l'underscore tout seul au début

    Bonne journée

  4. #4
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Salut

    Le code semble comparer deux lignes, il serait peut-être intéressant de faire une seconde boucle (j'imagine que le i est issu d'une 1ère boucle?) pour incrémenter la colonne.

    ça donnerait un truc comme ça par exemple
    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
    Option Explicit
     
    Sub test()
    Dim iLigne As Long, iColonne As Integer
    Dim boDiff As Boolean
     
        'On pointe la feuille où se trouvent les données
        With Feuil1
            'On initialise le flag de retour
            boDiff = False
     
            'ici je suppose que les ligne sont comparées 2 à 2 et que les series sont espacées de 4 lignes
            For iLigne = 1 To 10 Step 5
                'On boucle ensuite sur les colonnes
                For iColonne = 1 To 35
                    'On compare les contenus
                    If .Cells(iLigne, iColonne).Value <> .Cells(iLigne + 1, iColonne).Value Then
                        'le contenu diverge
                        boDiff = True
                        'On quitte la boucle des colonnes
                    End If
                Next
     
                'On applique du code en fonction du résultat pour cette 1ère série de valeur
                If boDiff Then
                    'On fait des choses si des données ne sont pas toutes identiques (au moins un écart)
                Else
                    'On fait des choses si les donnée sont toutes identiques
                End If
     
            Next 'On passe à la série de valeurs suivante
        End With
     
    End Sub
    Non testé et à adapter bien sûr.
    Il est même imaginable de faire une function qui teste une série de données en fonction d'un numéro de ligne par exemple.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

Discussions similaires

  1. [VBA-E] Adaptation avec des listbox
    Par sebi78 dans le forum Macros et VBA Excel
    Réponses: 34
    Dernier message: 18/04/2007, 13h15
  2. [VBA-E]Problème avec des ToggleButton
    Par dilkas dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 05/03/2007, 11h15
  3. Réponses: 6
    Dernier message: 20/02/2007, 17h00
  4. Réponses: 1
    Dernier message: 05/09/2006, 23h37
  5. [VBA-E] Problème avec des dates !
    Par yaya54 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 21/03/2006, 13h12

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