[Résolu] Comparer la valeur de ma celulle à une liste de valeur

Sniker

XLDnaute Nouveau
Bonjour,

Je cherche à simplifier un petit bout de code qui marche mais qui se révèle fastidieux lorsque la liste de valeur s’allonge.

Dans mon exemple j'ai en colonne A des noms de légumes. et en colonne B des nombres à additionner seulement si le légume fait parti de la liste : Choux, Poireau, Carotte, Patate ou Haricot

Sub MacroTest1()
Dim Cel As Range
Dim Somm As Integer
Somm = 0
For Each Cel In Range("A2:A13")
If Cel = "Choux" Or Cel = "Poireau" Or Cel = "Carotte" Or Cel = "Patate" Or Cel = "Haricot" Then
Somm = Somm + Range("B" & Cel.Row).Value
End If
Next
MsgBox (" Total Legumes : " & Somm)
End Sub

Ma question est ; comment puis-je simplifier l'écriture si j'ai une 20aines de "légumes" dans ma condition ?

J'aurais aimer pouvoir écrire :
IF Cel.value IS IN ("Choux","Poireau","Carotte","Patate","Haricot") THEN

Je vous remercie pour votre aide.

Thierry
 
Dernière édition:

david84

XLDnaute Barbatruc
Re : Comparer la valeur de ma celulle à une liste de valeur

Bonsoir,
sans fichier exemple j'en reste aux suppositions : tu peux utiliser la fonction CountIf, par exemple
Code:
If Application.WorksheetFunction.CountIf(Range("A2:A13"),Cel.value)>0 then ...
A+
Edit : teste plutôt cette idée :
Code:
Sub toto()
Dim T, Pl As Range, cel As Range
T = Array("pomme", "poire", "orange")
Set Pl = Range("A2:A13")
For Each cel In Pl
    If Not IsError(Application.Match(cel.Value, T, 0)) Then MsgBox cel.Address
Next cel
End Sub
 
Dernière édition:

kingfadhel

XLDnaute Impliqué
Re : Comparer la valeur de ma celulle à une liste de valeur

Bonsoir,
j'ai pris le code de david et j'ai fait qlq retouche


Code:
Sub toto()
Dim T
Dim Pl As Range, cel As Range
T = Range("M2:M20") 'ici tu rensigne la liste séléctionnée (Choux, Poireau, Carotte, Patate ou Haricot) 
Set Pl = Range("A2:A13")
Dim Somm As Integer
Somm = 0
For Each cel In Pl
    If Not IsError(Application.Match(cel.Value, T, 0)) Then Somm = Somm + Range("B" & cel.Row).Value
Next cel
MsgBox (" Total Legumes : " & Somm)
End Sub
 

Si...

XLDnaute Barbatruc
Re : Comparer la valeur de ma celulle à une liste de valeur

salut

cela me fait penser à un Somme.Si...
Code:
Sub SommeSi()
  Dim T, s As Long
  T = Array("Choux", "Poireau", "Carotte", "Patate", "Haricot")
  For n = 0 To UBound(T)
    s = s + Application.SumIf([A2:A13], T(n), [B2:B13])
  Next
  MsgBox s
End Sub

Attention toutefois à la casse !
 

Sniker

XLDnaute Nouveau
Re : Comparer la valeur de ma celulle à une liste de valeur

Bonjour,
Autant de propositions en si peu de temps je suis ravis !

David, je trouve ta solution tres elégante et econome, je découvre dans ton code l'usage de Application.Match() je vais me documenter pour bien en comprendre le fonctionnement.

Merci kingfadhel pour ta proposition, j'avais aussi la possibilité de stoquer dans des celulles les valeurs à comparer. Cependant ma macro définitive (qui en fait, ne sevira pas à compter des legumes) ne tournera sur des fichiers différents toutes les semaines.

Si..., tu as raison il sagit bien d'un Somme Si. merci également à toi pour cette solution qui me semble la plus simple.

En fait, je n'ai pensé à placer mes "legumes" dans un Array() et c'etait visiblement la base. Je vous remercie à tous les trois pour votre aide.

à une prochaine fois peut etre.

Thierry
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 910
Membres
101 837
dernier inscrit
Ugo