Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

macro IF... AND... OR...

10 réponses
Avatar
Françoise
bonjour à tous !

j'ai une macro qui fonctionne bien avec 2 arguments, mais si je veux en
rajouter, ça ne marche plus, quelqu'un peut il me dire quelle est la
meilleure façon de faire ?
voici la base macro :
======
début :
Dim rg, rg2 As Range
Dim CodeArt As String
Dim DescArt As String
Dim Qte As Double
Dim i As Integer
Dim IndiceEnCours As Integer
Dim Feuille As Worksheet
Dim bFeuilleStock As Boolean

suite qui pose problème :
' On traite toutes les cellules
For i = rg2.Row + 1 To rg.Row - 1
' On récupère le code article
CodeArt = Cells(i, rg2.Column)
======>If CodeArt <> "A" And CodeArt <> "-" Or CodeArt <> "B" Then
' On récupère la description
DescArt = Cells(i, rg2.Column + 2)
' On récupère la quantité
Qte = Cells(i, rg2.Column + 3)
Etc...
=======
En fait je voudrais mettre :
If CodeArt DIFFERENT DE "A","B","AC","BC","-"
donc 5 arguments différents
et je n'arrive pas à concrétiser ce code !!!!

d'avance merci pour votre aide
Françoise

10 réponses

Avatar
garnote
Bonjour,

Essaie ceci :

Sub Test()
If CodeArt <> "A" And CodeArt <> "B" And CodeArt <> "AC" _
And CodeArt <> "BC" And CodeArt <> "-" Then
MsgBox " Différent de A, B, AC, BC et -"
'...
'...
End If
End Sub

La macro fait la différence entre majuscule et minuscule.


Serge



"Françoise" a écrit dans le message de news:

bonjour à tous !

j'ai une macro qui fonctionne bien avec 2 arguments, mais si je veux en
rajouter, ça ne marche plus, quelqu'un peut il me dire quelle est la
meilleure façon de faire ?
voici la base macro :
===== > début :
Dim rg, rg2 As Range
Dim CodeArt As String
Dim DescArt As String
Dim Qte As Double
Dim i As Integer
Dim IndiceEnCours As Integer
Dim Feuille As Worksheet
Dim bFeuilleStock As Boolean

suite qui pose problème :
' On traite toutes les cellules
For i = rg2.Row + 1 To rg.Row - 1
' On récupère le code article
CodeArt = Cells(i, rg2.Column)
======>If CodeArt <> "A" And CodeArt <> "-" Or CodeArt <> "B" Then
' On récupère la description
DescArt = Cells(i, rg2.Column + 2)
' On récupère la quantité
Qte = Cells(i, rg2.Column + 3)
Etc...
====== > En fait je voudrais mettre :
If CodeArt DIFFERENT DE "A","B","AC","BC","-"
donc 5 arguments différents
et je n'arrive pas à concrétiser ce code !!!!

d'avance merci pour votre aide
Françoise


Avatar
Françoise
Merci Serge,

ça marche impec, en fait la solution était simple !
une question subsidiaire, combien de conditions de ce type peut-on inclure ?
Encore merci !

"garnote" a écrit :

Bonjour,

Essaie ceci :

Sub Test()
If CodeArt <> "A" And CodeArt <> "B" And CodeArt <> "AC" _
And CodeArt <> "BC" And CodeArt <> "-" Then
MsgBox " Différent de A, B, AC, BC et -"
'...
'...
End If
End Sub

La macro fait la différence entre majuscule et minuscule.


Serge



"Françoise" a écrit dans le message de news:

> bonjour à tous !
>
> j'ai une macro qui fonctionne bien avec 2 arguments, mais si je veux en
> rajouter, ça ne marche plus, quelqu'un peut il me dire quelle est la
> meilleure façon de faire ?
> voici la base macro :
> ===== > > début :
> Dim rg, rg2 As Range
> Dim CodeArt As String
> Dim DescArt As String
> Dim Qte As Double
> Dim i As Integer
> Dim IndiceEnCours As Integer
> Dim Feuille As Worksheet
> Dim bFeuilleStock As Boolean
>
> suite qui pose problème :
> ' On traite toutes les cellules
> For i = rg2.Row + 1 To rg.Row - 1
> ' On récupère le code article
> CodeArt = Cells(i, rg2.Column)
> ======>If CodeArt <> "A" And CodeArt <> "-" Or CodeArt <> "B" Then
> ' On récupère la description
> DescArt = Cells(i, rg2.Column + 2)
> ' On récupère la quantité
> Qte = Cells(i, rg2.Column + 3)
> Etc...
> ====== > > En fait je voudrais mettre :
> If CodeArt DIFFERENT DE "A","B","AC","BC","-"
> donc 5 arguments différents
> et je n'arrive pas à concrétiser ce code !!!!
>
> d'avance merci pour votre aide
> Françoise





Avatar
Coetera
> En fait je voudrais mettre :
If CodeArt DIFFERENT DE "A","B","AC","BC","-"
donc 5 arguments différents
et je n'arrive pas à concrétiser ce code !!!!



**************

Si la liste risque d'être longue, mieux vaut passer par ce type de syntaxe :

leTableau = Array("A", "B", "C", "AC", "BC", "-")
If IsError(Application.Match(CodeArt , leTableau, 0)) Then ...

Etc
Avatar
garnote
> une question subsidiaire, combien de conditions de ce type peut-on inclure ?


Je ne sais pas.

Une autre façon de faire :
Tu nommes, par exemple « choix » une plage contenant A, B, AC, BC
et :

If IsError(Application.Match(CodeArt, Range("choix"), 0)) Then
MsgBox "Différent de ..."
'...
'...
End If

Pratique si ta liste de valeurs s'aallonge.

Serge



"Françoise" a écrit dans le message de news:

Merci Serge,

ça marche impec, en fait la solution était simple !
une question subsidiaire, combien de conditions de ce type peut-on inclure ?
Encore merci !

"garnote" a écrit :

Bonjour,

Essaie ceci :

Sub Test()
If CodeArt <> "A" And CodeArt <> "B" And CodeArt <> "AC" _
And CodeArt <> "BC" And CodeArt <> "-" Then
MsgBox " Différent de A, B, AC, BC et -"
'...
'...
End If
End Sub

La macro fait la différence entre majuscule et minuscule.


Serge



"Françoise" a écrit dans le message de news:

> bonjour à tous !
>
> j'ai une macro qui fonctionne bien avec 2 arguments, mais si je veux en
> rajouter, ça ne marche plus, quelqu'un peut il me dire quelle est la
> meilleure façon de faire ?
> voici la base macro :
> ===== >> > début :
> Dim rg, rg2 As Range
> Dim CodeArt As String
> Dim DescArt As String
> Dim Qte As Double
> Dim i As Integer
> Dim IndiceEnCours As Integer
> Dim Feuille As Worksheet
> Dim bFeuilleStock As Boolean
>
> suite qui pose problème :
> ' On traite toutes les cellules
> For i = rg2.Row + 1 To rg.Row - 1
> ' On récupère le code article
> CodeArt = Cells(i, rg2.Column)
> ======>If CodeArt <> "A" And CodeArt <> "-" Or CodeArt <> "B" Then
> ' On récupère la description
> DescArt = Cells(i, rg2.Column + 2)
> ' On récupère la quantité
> Qte = Cells(i, rg2.Column + 3)
> Etc...
> ====== >> > En fait je voudrais mettre :
> If CodeArt DIFFERENT DE "A","B","AC","BC","-"
> donc 5 arguments différents
> et je n'arrive pas à concrétiser ce code !!!!
>
> d'avance merci pour votre aide
> Françoise







Avatar
garnote
Et une dernière remarque :
Cette approche et celle de Coetera ne font pas
la différence entre majuscule et minuscule.
BC, bC, bc, Bc; c'est pareil.

Serge


"garnote" a écrit dans le message de news: %23Ik$
une question subsidiaire, combien de conditions de ce type peut-on inclure ?


Je ne sais pas.

Une autre façon de faire :
Tu nommes, par exemple « choix » une plage contenant A, B, AC, BC
et :

If IsError(Application.Match(CodeArt, Range("choix"), 0)) Then
MsgBox "Différent de ..."
'...
'...
End If

Pratique si ta liste de valeurs s'aallonge.

Serge



"Françoise" a écrit dans le message de news:

Merci Serge,

ça marche impec, en fait la solution était simple !
une question subsidiaire, combien de conditions de ce type peut-on inclure ?
Encore merci !

"garnote" a écrit :

Bonjour,

Essaie ceci :

Sub Test()
If CodeArt <> "A" And CodeArt <> "B" And CodeArt <> "AC" _
And CodeArt <> "BC" And CodeArt <> "-" Then
MsgBox " Différent de A, B, AC, BC et -"
'...
'...
End If
End Sub

La macro fait la différence entre majuscule et minuscule.


Serge



"Françoise" a écrit dans le message de news:

> bonjour à tous !
>
> j'ai une macro qui fonctionne bien avec 2 arguments, mais si je veux en
> rajouter, ça ne marche plus, quelqu'un peut il me dire quelle est la
> meilleure façon de faire ?
> voici la base macro :
> ===== >>> > début :
> Dim rg, rg2 As Range
> Dim CodeArt As String
> Dim DescArt As String
> Dim Qte As Double
> Dim i As Integer
> Dim IndiceEnCours As Integer
> Dim Feuille As Worksheet
> Dim bFeuilleStock As Boolean
>
> suite qui pose problème :
> ' On traite toutes les cellules
> For i = rg2.Row + 1 To rg.Row - 1
> ' On récupère le code article
> CodeArt = Cells(i, rg2.Column)
> ======>If CodeArt <> "A" And CodeArt <> "-" Or CodeArt <> "B" Then
> ' On récupère la description
> DescArt = Cells(i, rg2.Column + 2)
> ' On récupère la quantité
> Qte = Cells(i, rg2.Column + 3)
> Etc...
> ====== >>> > En fait je voudrais mettre :
> If CodeArt DIFFERENT DE "A","B","AC","BC","-"
> donc 5 arguments différents
> et je n'arrive pas à concrétiser ce code !!!!
>
> d'avance merci pour votre aide
> Françoise











Avatar
Françoise
Merci à tous les deux, j'ai bien saisi la méthode et cela répond parfaitement
à mes questions.
c'est super !

"garnote" a écrit :


Et une dernière remarque :
Cette approche et celle de Coetera ne font pas
la différence entre majuscule et minuscule.
BC, bC, bc, Bc; c'est pareil.

Serge


"garnote" a écrit dans le message de news: %23Ik$
>> une question subsidiaire, combien de conditions de ce type peut-on inclure ?
> Je ne sais pas.
>
> Une autre façon de faire :
> Tu nommes, par exemple « choix » une plage contenant A, B, AC, BC
> et :
>
> If IsError(Application.Match(CodeArt, Range("choix"), 0)) Then
> MsgBox "Différent de ..."
> '...
> '...
> End If
>
> Pratique si ta liste de valeurs s'aallonge.
>
> Serge
>
>
>
> "Françoise" a écrit dans le message de news:
>
>> Merci Serge,
>>
>> ça marche impec, en fait la solution était simple !
>> une question subsidiaire, combien de conditions de ce type peut-on inclure ?
>> Encore merci !
>>
>> "garnote" a écrit :
>>
>>> Bonjour,
>>>
>>> Essaie ceci :
>>>
>>> Sub Test()
>>> If CodeArt <> "A" And CodeArt <> "B" And CodeArt <> "AC" _
>>> And CodeArt <> "BC" And CodeArt <> "-" Then
>>> MsgBox " Différent de A, B, AC, BC et -"
>>> '...
>>> '...
>>> End If
>>> End Sub
>>>
>>> La macro fait la différence entre majuscule et minuscule.
>>>
>>>
>>> Serge
>>>
>>>
>>>
>>> "Françoise" a écrit dans le message de news:
>>>
>>> > bonjour à tous !
>>> >
>>> > j'ai une macro qui fonctionne bien avec 2 arguments, mais si je veux en
>>> > rajouter, ça ne marche plus, quelqu'un peut il me dire quelle est la
>>> > meilleure façon de faire ?
>>> > voici la base macro :
>>> > ===== > >>> > début :
>>> > Dim rg, rg2 As Range
>>> > Dim CodeArt As String
>>> > Dim DescArt As String
>>> > Dim Qte As Double
>>> > Dim i As Integer
>>> > Dim IndiceEnCours As Integer
>>> > Dim Feuille As Worksheet
>>> > Dim bFeuilleStock As Boolean
>>> >
>>> > suite qui pose problème :
>>> > ' On traite toutes les cellules
>>> > For i = rg2.Row + 1 To rg.Row - 1
>>> > ' On récupère le code article
>>> > CodeArt = Cells(i, rg2.Column)
>>> > ======>If CodeArt <> "A" And CodeArt <> "-" Or CodeArt <> "B" Then
>>> > ' On récupère la description
>>> > DescArt = Cells(i, rg2.Column + 2)
>>> > ' On récupère la quantité
>>> > Qte = Cells(i, rg2.Column + 3)
>>> > Etc...
>>> > ====== > >>> > En fait je voudrais mettre :
>>> > If CodeArt DIFFERENT DE "A","B","AC","BC","-"
>>> > donc 5 arguments différents
>>> > et je n'arrive pas à concrétiser ce code !!!!
>>> >
>>> > d'avance merci pour votre aide
>>> > Françoise
>>>
>>>
>>>
>
>





Avatar
Françoise
Merci à tous les deux, j'ai bien saisi la méthode et cela répond parfaitement
à mes questions.
c'est super !


"Coetera" a écrit :

> En fait je voudrais mettre :
> If CodeArt DIFFERENT DE "A","B","AC","BC","-"
> donc 5 arguments différents
> et je n'arrive pas à concrétiser ce code !!!!

**************

Si la liste risque d'être longue, mieux vaut passer par ce type de syntaxe :

leTableau = Array("A", "B", "C", "AC", "BC", "-")
If IsError(Application.Match(CodeArt , leTableau, 0)) Then ...

Etc





Avatar
Jacquouille
Bonsoir
AMHA, il ne s'agit pas du nombre de conditions, mais plutôt du nombre de
caractères que peut contenir une instruction VBA ( 256 ? ??? )
Bonne soirée.

--
Bien amicalmement,
"Le vin est au repas ce que le parfum est à la femme."

Jacquouille.

"Françoise" a écrit dans le message de
news:
Merci Serge,

ça marche impec, en fait la solution était simple !
une question subsidiaire, combien de conditions de ce type peut-on inclure
?
Encore merci !

"garnote" a écrit :

Bonjour,

Essaie ceci :

Sub Test()
If CodeArt <> "A" And CodeArt <> "B" And CodeArt <> "AC" _
And CodeArt <> "BC" And CodeArt <> "-" Then
MsgBox " Différent de A, B, AC, BC et -"
'...
'...
End If
End Sub

La macro fait la différence entre majuscule et minuscule.


Serge



"Françoise" a écrit dans le message
de news:

> bonjour à tous !
>
> j'ai une macro qui fonctionne bien avec 2 arguments, mais si je veux en
> rajouter, ça ne marche plus, quelqu'un peut il me dire quelle est la
> meilleure façon de faire ?
> voici la base macro :
> ===== >> > début :
> Dim rg, rg2 As Range
> Dim CodeArt As String
> Dim DescArt As String
> Dim Qte As Double
> Dim i As Integer
> Dim IndiceEnCours As Integer
> Dim Feuille As Worksheet
> Dim bFeuilleStock As Boolean
>
> suite qui pose problème :
> ' On traite toutes les cellules
> For i = rg2.Row + 1 To rg.Row - 1
> ' On récupère le code article
> CodeArt = Cells(i, rg2.Column)
> ======>If CodeArt <> "A" And CodeArt <> "-" Or CodeArt <> "B" Then
> ' On récupère la description
> DescArt = Cells(i, rg2.Column + 2)
> ' On récupère la quantité
> Qte = Cells(i, rg2.Column + 3)
> Etc...
> ====== >> > En fait je voudrais mettre :
> If CodeArt DIFFERENT DE "A","B","AC","BC","-"
> donc 5 arguments différents
> et je n'arrive pas à concrétiser ce code !!!!
>
> d'avance merci pour votre aide
> Françoise







Avatar
Pounet95
Bonsoir,

Personnellement, j'aime assez utiliser la structure "Selon le cas" qui
permet pas mal de possibilités

Select case CodeArt
Case "A","B","AC","BC"
'instructions
Case 1 to 9
'instructions
Case else
'instructions
End Select

Pounet95

"Françoise" a écrit dans le message de
news:
Merci à tous les deux, j'ai bien saisi la méthode et cela répond
parfaitement
à mes questions.
c'est super !


"Coetera" a écrit :

> En fait je voudrais mettre :
> If CodeArt DIFFERENT DE "A","B","AC","BC","-"
> donc 5 arguments différents
> et je n'arrive pas à concrétiser ce code !!!!

**************

Si la liste risque d'être longue, mieux vaut passer par ce type de
syntaxe :

leTableau = Array("A", "B", "C", "AC", "BC", "-")
If IsError(Application.Match(CodeArt , leTableau, 0)) Then ...

Etc







Avatar
garnote
Ce qui pourrait donner quelque chose du genre :

Une macro qui fait la différence entre minuscules et majuscules :
Sub Autre1()
CodeArt = Cells(1, 1)
Select Case CodeArt
Case "A", "B", "BC", "AC", "-"
'Ne fait rien.
Case Else
'Fait cela :
MsgBox "Bonjour"
'...
'...
End Select
End Sub

Une macro qui ne fait pas la différence :
Sub Autre2()
CodeArt = UCase(Cells(1, 1))
Select Case CodeArt
Case "A", "B", "BC", "AC", "-"
'Ne fait rien.
Case Else
'Fait cela :
MsgBox "Bonjour"
'...
'...
End Select
End Sub


Serge


"Pounet95" a écrit dans le message de news:
Bonsoir,

Personnellement, j'aime assez utiliser la structure "Selon le cas" qui permet pas mal de possibilités

Select case CodeArt
Case "A","B","AC","BC"
'instructions
Case 1 to 9
'instructions
Case else
'instructions
End Select

Pounet95

"Françoise" a écrit dans le message de
news:
Merci à tous les deux, j'ai bien saisi la méthode et cela répond parfaitement
à mes questions.
c'est super !


"Coetera" a écrit :

> En fait je voudrais mettre :
> If CodeArt DIFFERENT DE "A","B","AC","BC","-"
> donc 5 arguments différents
> et je n'arrive pas à concrétiser ce code !!!!

**************

Si la liste risque d'être longue, mieux vaut passer par ce type de syntaxe :

leTableau = Array("A", "B", "C", "AC", "BC", "-")
If IsError(Application.Match(CodeArt , leTableau, 0)) Then ...

Etc