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
    Candidat au Club
    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

    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
    Quelques contributions : USERFORM - Créer, Consulter, Modifier et Supprimer des enregistrements à l'aide d'un formulaire - Géolocalisation d'une adresse avec Excel et Google sans VBA

  3. #3
    Candidat au Club
    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
    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

###raw>template_hook.ano_emploi###