Vérification une ligne test VBA

  • Initiateur de la discussion JJ1
  • Date de début
J

JJ1

Guest
Re,

Dans ma macro, j'ai écrit:

If [L1] = 0 And [M1] < 2 And [Q1] = "541" Or [Q1] = "631" Or [Q1] = "640" Or [Q1] = "721" Or [Q1] = "730" Or [Q1] = "820" Then (action)

Je pense que le fait de mettre Or n'est pas adapté à la suite du And? Avez-vous une façon de simplifier mon test?
L1=0
et
M1 <2
et
Q1 avec 6 conditions OU
Merci beaucoup.
 

Hulk

XLDnaute Barbatruc
Re : Vérification une ligne test VBA

Hello JJ, Forum,

Si j'ai bien compris, comme ceci ça joue...
Code:
    If [L1] = 0 _
        And [M1] < 2 _
        And [Q1] = "541" Then
        MsgBox "OK"
    ElseIf [L1] = 0 _
        And [M1] < 2 _
        And [Q1] = "631" Then
        MsgBox "OK"
    ElseIf [L1] = 0 _
        And [M1] < 2 _
        And [Q1] = "640" Then
        MsgBox "OK"
    ElseIf [L1] = 0 _
        And [M1] < 2 _
        And [Q1] = "721" Then
        MsgBox "OK"
    ElseIf [L1] = 0 _
        And [M1] < 2 _
        And [Q1] = "730" Then
        MsgBox "OK"
    ElseIf [L1] = 0 _
        And [M1] < 2 _
        And [Q1] = "820" Then
        MsgBox "OK"
    Else
        MsgBox "PAS OK"
    End If
Ai essayé avec un tableau et p'tite boucle, en vain... Peut-être quelqu'un d'autre arrivera.

Dans l'attente si ça te convient...
 
J

JJ1

Guest
Re : Vérification une ligne test VBA

Bonjour Hulk, merci pour ta solution.
Moi j'avais mis (mais c'est à rallonge ! ):
If [L1] = 0 And [M1] < 2 And [Q1] = "541" Or [L1] = 0 And [M1] < 2 And [Q1] = "631" Or [L1] = 0 And [M1] < 2 And [Q1] = "640" Or [L1] = 0 And [M1] < 2 And [Q1] = "721" Or [L1] = 0 And [M1] < 2 And [Q1] = "730" Or [L1] = 0 And [M1] < 2 And [Q1] = "820" Then

Merci
Bon AM
 

job75

XLDnaute Barbatruc
Re : Vérification une ligne test VBA

Rebonjour JJ1,

Les And c'est comme les * (multiplication) et les Or comme les +, suivre les règles algébriques.

Donc encadrer les Or par des parenthèses.

Si Q1 contient effectivement une valeur texte :

Code:
If [L1] = 0 And [M1] < 2 And ([Q1] = "541" Or [Q1] = "631" Or [Q1] = "640" Or [Q1] = "721" Or [Q1] = "730" Or [Q1] = "820") Then
Si Q1 contient une valeur nombre :

Code:
If [L1] = 0 And [M1] < 2 And ([Q1] = 541 Or [Q1] = 631 Or [Q1] = 640 Or [Q1] = 721 Or [Q1] = 730 Or [Q1] = 820) Then
A+
 

job75

XLDnaute Barbatruc
Re : Vérification une ligne test VBA

Re,

Nom d'une pipe je ne l'avais pas vu, impardonnable, salut Hulk :)

Ceci est plus simple et devrait fonctionner dans tous les cas (texte ou nombre) :

Code:
If [L1] = 0 And [M1] < 2 And InStr(" 541 631 640 721 730 820 ", " " & [Q1] & " ") Then
Nota : je n'ai pas testé...

A+
 
J

JJ1

Guest
Re : Vérification une ligne test VBA

Bonjour Hulk, Job,
Merci pour vos solutions, je n'avais pas osé la parenthèse avant le dernier And....(mais j'y avais pensé!)
Petite question aux pros du VBA/Formule:


j'ai zappé le problème en mettant un SI OU renvoyant 1 ou 0 dans mon tableau et je teste par les And =1 en VBA
Est-ce plus rapide pour l'exécution une macro de mettre les conditions dans le tableau avec des SI ou de mettre les conditions IF AND OR directement dans le code sans conditions dans le tableau?



Merci
Bonne journée
 

job75

XLDnaute Barbatruc
Re : Vérification une ligne test VBA

Re JJ1,

Tout dépend à quel moment les calculs se font.

Les formules dans la feuille se recalculent dès que les cellules sont modifiées, et bien sûr la macro est ensuite plus rapide.

Mais je suppose qu'on aura besoin de cellules/colonne supplémentaires.

En VBA s'il y a beaucoup de cellules à traiter, mémorise le tableau dans une variable matricielle (tablo).

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 196
Messages
2 086 097
Membres
103 116
dernier inscrit
kutobi87