XL 2019 Recherche et somme selon plusieurs conditions entre deux feuilles

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Bonjour,
Un essai en supposant que le 1 corresponde au numéro de semaine et que le A1 corresponde aux titres des colonnes et lignes indiqués en rouge :
VB:
=SOMME.SI.ENS(Base!$E$2:$E$31;Base!$B$2:$B$31;DROITE($A$4;NBCAR($A$4)-3);Base!$D$2:$D$31;I$5&$H6)
Cordialement
 
Hello,

comme on ne sais pas d'où proviennent "1" et "A1" ça donne ça
VB:
=SOMME.SI.ENS(Base!E2:E31;Base!B2:B31;1;Base!D2:D31;"A1")

edit : oups, pas vu la solution de ALS35
Sous forme de tableau structurée c'est plus parlant
Code:
=SOMME.SI.ENS(Tableau1[Heures];Tableau1[Semaine];1;Tableau1[Référence];"A1")
 
Bonjour,

Toujours sur le même sujet mais pour une autre utilité je souhaiterai obtenir un code VBA pour faire une recherche et somme selon plusieurs conditions entre deux feuilles.

J'ai fait quelques recherches mais je me trouve face a quelques difficultés ( lignes et colonnes vides dans les deux feuilles )

Si joint un fichier pour une meilleure compréhension.

Merci d’avance pour votre aide

Cordialement
 

Pièces jointes

Bonjour,
Si j'ai bien compris, on peut le faire de façon simple par formule avec en J5:
Code:
=SI($A5<>"";SIERREUR(SOMME.SI.ENS(Base!$E$5:$E$39;Base!$C$5:$C$39;J$4;Base!$D$5:$D$39;$A5);"");SIERREUR(SOMME.SI.ENS(Base!$E$5:$E$39;Base!$C$5:$C$39;J$4;Base!$D$5:$D$39;"");""))
C'est la même formule partout, il suffit de dupliquer en évitant les cellules grises. ( celles de la feuille, pas les vôtres. 🙂 )
Le "sierreur" permet de masquer les erreurs, et le format de cellule "0;;" permet de masquer les zéros.
Si vous tenez au VBA utilisez l'astuce du post #5, c'est à mon avis le plus simple.
 

Pièces jointes

Re,
Super sylvanu.
Merci cela fonctionne parfaitement.
Par contre comme proposé j'ai utilisé le code VBA et cela provoque une erreur!
J'ai essayé de faire travailler mes cellules grises🙂, mais pas de solution.


VB:
Sub Calc()
Formule = "=SI($A5<>"";SIERREUR(SOMME.SI.ENS(Base!$E$5:$E$39;Base!$C$5:$C$39;J$4;Base!$D$5:$D$39;$A5);"");SIERREUR(SOMME.SI.ENS(Base!$E$5:$E$39;Base!$C$5:$C$39;J$4;Base!$D$5:$D$39;"");""))"""
With [J5:AF57]
    .Formula = Formule: Selection = .Value
End With
End Sub
 

Pièces jointes

Re,

1- En fait VBA ne "parle" qu'anglais; Donc il faut utiliser :
- Formula si la formule est en anglais ( cf post #5 )
- FormulaLocal pour utiliser une formule dans la langue de votre Excel
- FormulaR1C1 avec formule en anglais ET adresses cellules de type R1C1 au lieu de A1.
( à notre que FormulaLocal ne fonctionnera que sur des XL parlant la même langue. Sinon il est préférable d'utiliser la formule en anglais pour être compatible tous PC )

2- Dans une formule globale il faut éviter faire attention à éviter les cellules grisées qui ne doivent pas contenir de formule, donc utiliser :
VB:
=SI(OU(J$4="";$A5="");"";SI($A5<>"";SIERREUR(SOMME.SI.ENS(Base!$E$5:$E$39;Base!$C$5:$C$39;J$4;Base!$D$5:$D$39;$A5);"");SIERREUR(SOMME.SI.ENS(Base!$E$5:$E$39;Base!$C$5:$C$39;J$4;Base!$D$5:$D$39;"");"")))

En clair avec la formule modifiée et en français cela donne :
Code:
Sub Calc()
Formule = "=SI(OU(J$4="""";$A5="""");"""";SI($A5<>"""";SIERREUR(SOMME.SI.ENS(Base!$E$5:$E$39;Base!$C$5:$C$39;J$4;Base!$D$5:$D$39;$A5);"""");SIERREUR(SOMME.SI.ENS(Base!$E$5:$E$39;Base!$C$5:$C$39;J$4;Base!$D$5:$D$39;"""");"""")))"
With [J5:AF57]
    .FormulaLocal = Formule: .Select: Selection = .Value
End With
[A1].Select
End Sub
 

Pièces jointes

Re,

Merci infiniment pour toute l'aide, explications et les solutions proposées.
Encore une fois la solution par formule fonction parfaitement.
J'ai essai de tout comprendre et finaliser le code VBA pour obtenir le même résultat.

A l'exception de la colonne A ( qui est Vide ) le code fonctionne.

Si joint un fichier avec les deux solutions pour une meilleure compréhension.

Merci d’avance pour votre aide
 

Pièces jointes

Re,
Si le pb ne se posr que pour ABS et sos, on peut ajouter :
VB:
With Sheets("Base")
    [J5] = Application.SumIfs(.[E5:E39], .[$C$5:$C$39], [J4], .[D5:D39], "")
    [AD5] = Application.SumIfs(.[E5:E39], .[$C$5:$C$39], [AD4], .[D5:D39], "")
End With
s'il y en a plus alors il faudra compliquer la formule.
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
14
Affichages
3 K
Retour