If avec multiples Or

Bonjour,

Je me retrouve souvent à avoir des conditions un peu à rallonge dans mes If, y-a-t'il une manière plus légère d'écrire par exemple la ligne de code suivante ?

If Cells(R, 1).Value = 7108 Or Cells(R, 1).Value = 7110 Or Cells(R, 1).Value = 7118 Or Cells(R, 1).Value = 7120) Then

Je pensais à quelque chose du genre :

If Cells(R, 1).Value = {7108, 7110, 7118, 7120} Then

Je vous remercie

Bonne journée

Bonjour,

tu peux utiliser l'instruction select case

select case Cells(R, 1).Value

case 7108,7110,7118,7120

' les instructions à appliquer si condition vérifiée
case else
' instructions à appliquer dans la négative
end select

Ha je n'y avait pas pensé, puis surtout j'avais oublié l'existence du Case Else

Mais donc aucune possibilité de faire des listes ?

Dans le cas où je souhaiterais garder la structure If Then Elseif etc...

Disons que la liste m'intéresse parce que je pourrais l'utiliser dans bien d'autres cas, comme multiplier les variables dans des fonctions sumif, countif, .... sans avoir à multiplier les lignes autant qu'il y a de valeurs possibles.

re-bonjour,

tu peux définir une fonction qui fait le test par rapport à ta liste.

par exemple OUM (ou multiple)

If OUM(x,1715,1785,1562,1456) then ' x est la variable à tester, les éléments suivants forment la liste des valeurs à tester)

else

end if

sub test ()
If OUM(x,1715,1785,1562,1456) then ' x est la variable à tester, les éléments suivants forment la liste des valeurs à tester)
...
else
...
end if
end sub

Function OUM(ParamArray p()) As Boolean
premval = p(LBound(p)) & ""
For i = LBound(p) + 1 To UBound(p)
 If premval = p(i) & "" Then OUM = True: Exit Function
Next i
End Function

C'est génial ce que tu as fait ! Je te remercie !

Cela va beaucoup m'aider. Je te souhaite un bon après-midi

Salut le Forum

Avec l'utilisation de la fonction 'MATCH'

Sub essai()
    Dim x As Boolean
    x = FindArray(1715, 1715, 1785, 1562, 1456)
End Sub

Public Function FindArray(Valeur, ParamArray Tablo()) As Boolean
    Dim MyArray
    MyArray = Tablo()
    If IsError(Application.Match(Valeur, MyArray, 0)) Then
        FindArray = False
    Else
        FindArray = True
    End If
End Function

Mytå

Bonjour Myta,

Je ne comprends pas le code...

En fait tu créé une fonction Finarray c'est çà ?

Public Function FindArray(Valeur, ParamArray Tablo()) As Boolean
    Dim MyArray
    MyArray = Tablo()
    If IsError(Application.Match(Valeur, MyArray, 0)) Then
        FindArray = False
    Else
        FindArray = True
    End If
End Function

J'ai l'impression ici que tu créé la fonction et que tu dis si je trouve une valeur (alors là déjà là je ne sais aps ce qu'il faut mettre en valeur ? puisque j'en cherche 4) et si ta fonction equiv la trouve bien dans la base de donnée alors tu execute Findarray

Je ne comprends pas tout, ne serait-ce que le x, le x c'est la valeur de FindArray ?

Re le Forum

La Fonction FindArray retourne Vrai ou Faux

Retourne VRAI comme résultat pour x

x = FindArray(1715, 1715, 1785, 1562, 1456)

Retourne FAUX comme résultat pour x

x = FindArray(1700, 1715, 1785, 1562, 1456)

Tu peux faire un test

If FindArray(1700, 1715, 1785, 1562, 1456) then . . .

Mytå

Rechercher des sujets similaires à "multiples"