Bonjour,
Je voudrais savoir s'il y a une formule qui va :
Par exemple sur la colonne A j'ai des textes et sur la colonne B des valeurs.
Je voudrais donc sommer les cellules de la colonne B si A contient un texte.
Merci,
Version imprimable
Bonjour,
Je voudrais savoir s'il y a une formule qui va :
Par exemple sur la colonne A j'ai des textes et sur la colonne B des valeurs.
Je voudrais donc sommer les cellules de la colonne B si A contient un texte.
Merci,
Bonjour,
peut être via SOMME.SI ou SOMMEPROD mais comme ici c'est le forum VBA et non le forum Excel dédié aux formules de calculs !
_______________________________________________________________________________________________________
Je suis Paris, Charlie, Bruxelles, …
Je l'ai mis ici au cas où il faudra passer par une macro.
+1 avec @Marc-L : Largement faisable en formule mais après tout dépends aussi de ton besoin ensuite.
Mais si tu n'as que ça à traiter alors formule !
Alors voilà j'ai essayé de créer ma propre fonction mais j'ai un bug
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Function Xsum(text as string, optional text2 as string) col = cells(4,8) for i =2 to 1000 if range(i,col) like "*text*" or range(i,col) like "*text2" then c = c + range(i,(col+1)) end if next i xsum = c end sub
Quel est ce bug ?
Concernant cette ligne :
Aucun intérêt de tester like "*text2" car like "*text*" aura déjà renvoyé VRAI => text2 c'est bien text* non ?!? :aie:Code:if range(i,col) like "*text*" or range(i,col) like "*text2" then
Sinon, aucune déclaration de variable c'est la fête !
Pour toi il y a quoi dans col ?Code:col = cells(4,8)
Non j'ai par exemple dans une colonne on va dire plusieurs textes différents et je veux sommer les valeurs correspondantes aux textes que je veux qui sont dans la colonne suivante.
Dans col j'ai la colonne où je cherche mes textes.
Bonjour,
exemple sur la ligne 1 à 14
par formule :
par vba en calculant directement dans la procédureCode:=SOMME.SI(A1:A14;"<>";B1:B14)
par vba en inscrivant la formule dans la cellule C1Code:
1
2
3 Sub SommeSi() MsgBox Application.WorksheetFunction.SumIf(Range("A1:A14"), "<>", Range("B1:B14")) End Sub
Code:Range("C1").Formula = "=SUMIF(A1:A14,""<>"",B1:B14)"
j'épargne le coup du FormulaR1C1 ?
EDIT : tu viens de préciser qu'il faut sommer en fonction d'un texte bien précis, ce qui change la formule, mais l'idée reste la même
pour le mot "toto"
pour une série de mots écris de D1 à D10 avec le résultat en E1 à E10Code:=SOMME.SI(A1:A14;"toto";B1:B14)
bref, y'a des tonnes de possibilités, tout dépend de ton contexte d'utilisationCode:Range("E1").Resize(10, 1).FormulaR1C1 = "=SUMIF(R1C1:R14C1,RC[-1],R1C2:R14C2)"
La formule suivante me correspondrait si je pouvais préciser autant de texte que je veux :
Somme.si(A:A;"premiertexte" ou " deuxièmetexte" etc;B:B)
Serait-ce possible ?
Dans un seul SOMME.SI ce n'est pas possible.
mais tu peux additionner des SOMME.SI !
ou encore utiliser ma dernières proposition : tu écris l'ensemble des mots dans une colonne pour réaliser des SOMME.SI unitaires, et tu fais une SOMME en bas de la colonneCode:Somme.si(A:A;"premiertexte";B:B) + Somme.si(A:A;" deuxièmetexte" etc;B:B)
Sinon, il faudra se tourner éventuellement vers SOMMEPROD ? Mais faut voir combien de mot tu dois chercher
Par vba, il peut aussi être utile d'étudier la piste des filtres automatiques avec la fonction SOUS.TOTAL pour compter les lignes visibles
D'accord. J'applique ça. Merci à toi et à vous tous.