Problème avec SOMME(SI(

cedana

XLDnaute Nouveau
Bonjour à tous.
Je souhaite sommer dans une feuille le chiffre mensuel pour chaque article.
Mais le code est composé de lettres et de chiffres du style : BL1-145698 ,
BL1-158796 ou uniquement de lettres comme PREL.
Pour PREL j'y arrive en utilisant la formule suivante:

{=SOMME(SI(Janv!$C$5:$C$30="PREL";Janv!$D$5:$D$30))}

Mais pour BL1-145698 je dois prendre en référence que BL1, j' ai donc pensé à extraire les 3 premiers caractères en inserant LEFT( ,3 ) mais je ne trouve pas la solution. Si vous pouvez m'aider je vous remercie d'avance.
 

Tibo

XLDnaute Barbatruc
Re : Problème avec SOMME(SI(

Bonjour,

Tu peux essayer avec cette formule :

Code:
=SOMME(SI(GAUCHE(Janv!$C$5:$C$30;3)="BL1";Janv!$D$5:$D$30) )

Formule qui demande une validation matricielle : CTRL + MAJ + ENTREE


Tu as l'équivalent avec la fonction SOMMEPROD qui nécessite une simple validation par ENTREE :

Code:
=SOMMEPROD((GAUCHE(Janv!$C$5:$C$30;3)="BL1")*Janv!$D$5:$D$30)

à voir aussi, tu fais référence à la fonction LEFT qui est anglaise alors que SOMME est une fonction française...

@+
 

mth

XLDnaute Barbatruc
Re : Problème avec SOMME(SI(

Bonjour à tous :)

Pour jouer, je me suis laissée tentée par INDIRECT() :)
(par paresse pour ne faire qu'une seule formule, en admettant que les intitulés du récaps sont indentiques aux noms des onglets)

Code:
{=SOMME(SI(NON(ESTERREUR(CHERCHE(B$5&"*";INDIRECT($A6&"!C5:C30"))));INDIRECT($A6&"!D5:D30")))}
Bonne journée :)

mth
 

Pièces jointes

  • Classeur1(1).xls
    34 KB · Affichages: 55
  • Classeur1(1).xls
    34 KB · Affichages: 55
  • Classeur1(1).xls
    34 KB · Affichages: 59

cedana

XLDnaute Nouveau
Re : Problème avec SOMME(SI(

Bonjour Tibo.
Merci pour ta réponse. Je suis vraiement Gauche, J'avais utilisé GAUCHE mais
en l'écrivant comme ça GAUCFE.

Dans un autre classeur, je dois recopier une formule semblable dans 320 cellules, en VBA ça donne ceci, sauf qu'il me faut insérer cette fois LEFT
pour extraire BL1 mais cette fois je bloque.

Code:
Sub Rec()

Sheets("Synthèse").Select

Dim i As Long, j As Long
  For i = 1 To 12
       Cells(i + 7, 6).FormulaArray = _
      "=SUM(IF(" & Sheets(i + 8).Name & "!R7C3:R85C3=" & """BL1""" & "," & Sheets(i + 8).Name & "!R7C5:R85C5))"
  Next i
 End Sub

Merci de votre aide
 

mth

XLDnaute Barbatruc
Re : Problème avec SOMME(SI(

re :)

cedana, le peu que je comprends de ton code me laisse penser que la fonction INDIRECT() du post précédent pourrait t'aider. As-tu essayé ?

Si non, si tu tiens absolument à une macro, il faudrait que tu joignes un extrait de cet autre fichier pour que l'on puisse t'aider au mieux.

Bon après-midi,

mth
 

cedana

XLDnaute Nouveau
Re : Problème avec SOMME(SI(

Bonjour MTH.
Merci pour ta réponse, je vais utiliser la fonction INDIRECT() qui fonctionne bien.
Pour le code VBA suivant ça marche aussi.

Selection.FormulaArray = _
"=SUM(IF(LEFT(Janvier!R7C3:R20C3, 3)=""BL1"",Janvier!R7C5:R20C5))"

Par contre je n' arrive pas à positionner le LEFT correctement dans le code ci-après.
A chaque tour de boucle les pages 1, 2 etc..sont sélectionnées, donc LEFT doit être
entre & et Sheets. Je continue à y croire.
SUB RECAP()
For i=1 TO 12
Selection.FormulaArray = _
"=SUM(IF(" & Sheets(i).Name & "!R7C3:R85C3=" & """BL1""" & "," & Sheets(i).Name & "!R7C5:R85C5))"
Next i
End Sub

Merci à tous et à +
 

mth

XLDnaute Barbatruc
Re : Problème avec SOMME(SI(

re,

Y a-t-il une raison particulière pour laquelle tu ne veux pas fournir un extrait de ton autre fichier ?
Perso, sans rien juste avec ton bout de code je ne vois pas du tout où tu veux en venir.
Juste comme ça un exemple de code qui fonctionne (testé sur ton fichier dans lequel j'ai ajouté des onglets).
Ca ne sert à rien mais tu pourras peut-être l'adapter à ton cas puisque tu es le seul à le connaître.

Code:
Sub RECAP()
Dim y As Byte
Dim x As String, z As String
With Sheets("Recap")
    For y = 1 To Worksheets.Count
        If Sheets(y).Name <> "RECAP" Then
                x = Sheets(y).Name & "!R7C3:R20C3"
                z = Sheets(y).Name & "!R7C5:R20C5"
                    .Cells(y + 5, 3).FormulaArray = _
                       "=SUM(IF(LEFT(" & x & ", 3)=""BL1""," & z & "))"
        End If
    Next y
End With
End Sub

Bonne soirée,

mth
 

Pièces jointes

  • Classeu2.xls
    86 KB · Affichages: 50

cedana

XLDnaute Nouveau
Re : Problème avec SOMME(SI(

Bonjour MTH.
La raison pour laquelle je n'ai pas joint le fichier est très simple. C'est qu'il est au bureau de l'association et que j'ai oublié de le copier sur ma clé USB. Mais j'ai en mémoire ce bout de code qui me posait problème. Il me fallait extraire les 3 premiers cararactères d'une chaine comme celle-ci : BL1-458923 et j'avais commencé par ce code qui ne pouvait pas fonctionner.

Code:
"=SUM(IF(" & Sheets(i).Name & "!R7C3:R85C3=" & """BL1""" & "," & Sheets(i).Name & "!R7C5:R85C5))"
Et grace à ton aide, j'ai résolu le problème avec la modification suivante.

Code:
"=SUM(IF(Left(" & Sheets(i).Name & "!R7C3:R85C3, 3)=" & """BL1""" & "," & Sheets(i).Name & "!R7C5:R85C5)))"

Ce fichier est en construction, et la fonction " Somme(Si " devra être recopiée dans plus de 1400 cellules, donc pour me faciliter la tâche j'ai fait un essai avec ce code VBA à l'intérieur d'une boucle et comme ça marche, je te dis un grand merci.
Je te souhaite une bonne journée et à + sur le forum.
 

Discussions similaires

Statistiques des forums

Discussions
312 248
Messages
2 086 593
Membres
103 248
dernier inscrit
Happycat