Résolu Simplification d'une formule IF OR

benoitxi

XLDnaute Nouveau
Bonjour à tous,

Je cherche à simplifier la formule OU suivante :

If (Range("A" & i) = "Contrat1" Or Range("A" & i) = "Contrat2" Or Range("A" & i) = "Contrat3"Or Range("A" & i) = "Contrat4")

Je me suis dit que je pourrais créer une liste qui comprend tous mes contrats pour les regrouper car je serais amener a l'utiliser plusieurs fois.

Dim Liste As String
Liste = (Contrat1,Contrat2,Contrat3,Contrat4)

Mais ça ne fonctionne pas.
J’ai essayer plusieurs syntaxes avec le ; les "" mais je pense que String ne peux contenir qu’une seule valeur.

Auriez-vous une solution à me proposer qui me permettrait de simplifier l'empilage des OU.
Ayant une nombre de contrat différent important et des contions importantes je ne peux pas utiliser le <> sous peine de les empiler également
(J’ai un niveau VBA moyen)

Merci à tous
Bon week end
 
Dernière édition:

piga25

XLDnaute Barbatruc
Bonjour benoitxi

Avez vous essayer avec la formule choisir (français) ou choose (anglais)
=CHOOSE(""A"" & i,""Contrat 1"",""Contrat 2"",""Contrat 3"",""Contrat 4"")
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

En fait il faut écrire :
VB:
Liste = "Contrat11,Contrat22,Contrat33,Contrat44"
  If InStr("," & Liste & ",", "," & Range("a" & i) & ",") > 0 Then
End Sub
Pourquoi ? Imaginons que vous recherchiez le terme "Contrat1". Avec l'écriture de mon premier message, on recherche "Contrat1" dans "Contrat11,Contrat22,Contrat33,Contrat44". Et on va trouver ce terme (car "Contrat1" fait partie du terme "Contrat11"). Et on aura tort.

Avec la seconde écriture, on recherche ",Contrat1," dans ",Contrat11,Contrat22,Contrat33,Contrat44,". Bien sûr, on ne trouve pas ce terme... Et on aura raison.

edit: Salut @zebanx ;)
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

Une autre écriture possible:
VB:
liste = "Contrat11,Contrat22,Contrat33,Contrat44"
If Application.IsNumber(Application.Match(Range("a" & i), Split(liste, ","), 0)) Then
 

zebanx

XLDnaute Accro
Bonjour Benoitxi, piga25, mapomme;)

@mapomme
Quelles subtilités bien sympathiques sur le 4 /5.:p
Une petite extention pour illustrer le tout avec un cas "multiple" proposé (dans la colonne de référence).

Bonne journée et merci pour tes codes
zebanx
 

Fichiers joints

benoitxi

XLDnaute Nouveau
Re,

En fait il faut écrire :
VB:
Liste = "Contrat11,Contrat22,Contrat33,Contrat44"
  If InStr("," & Liste & ",", "," & Range("a" & i) & ",") > 0 Then
End Sub
Pourquoi ? Imaginons que vous recherchiez le terme "Contrat1". Avec l'écriture de mon premier message, on recherche "Contrat1" dans "Contrat11,Contrat22,Contrat33,Contrat44". Et on va trouver ce terme (car "Contrat1" fait partie du terme "Contrat11"). Et on aura tort.

Avec la seconde écriture, on recherche ",Contrat1," dans ",Contrat11,Contrat22,Contrat33,Contrat44,". Bien sûr, on ne trouve pas ce terme... Et on aura raison.

edit: Salut @zebanx ;)
Hello Ma pomme,

La formule IsStr est super et je me demandais comment je pourrais faire pour faire une recherche dans une plage nommé ou une colonne au lieu d'une liste prédéfinie.

Exemple ci dessous

If Range("société").Cells(i, 1) = "société1 _
And Range("Dept").Cells(i, 1) = "Dept1" _
And InStr( Range ("Colonne_service") , Range("Service").Cells(i, 1)) > 0 _ (je veux dire si le Service est présent dnas la colonne Service alors c'est bon)
Then Range("Destinataire").Cells(i, 1) = [Dest_1]

Merci pour ton aide
 

Discussions similaires


Haut Bas