Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
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 !
Les cellules fusionnées et le décalage des colonnes des cellules à prendre en compte n'arrangent pas les choses !
Un essai avec des fonctions personnalisées :
Code:
[COLOR="DarkSlateGray"][B]Function toto(ParamArray r())
Application.Volatile
Dim j&, k&, tmp#, tf As Boolean
For j = 3 To UBound(r)
tf = False
For k = 1 To r(0).Count
tf = tf Or r(j) Like "*" & r(0).Cells(k, 1) & "*"
Next
If tf Then tmp = tmp + r(j).Offset(r(1), 0).Offset(0, r(2)).Value
Next
toto = tmp
End Function
Function tata(ParamArray r())
Application.Volatile
Dim j&, k&, tmp#, tf As Boolean
For j = 3 To UBound(r)
tf = False
For k = 1 To r(0).Count
tf = tf Or r(j) Like "*" & r(0).Cells(k, 1) & "*"
Next
If Not tf Then tmp = tmp + r(j).Offset(r(1), 0).Offset(0, r(2)).Value
Next
tata = tmp
End Function[/B][/COLOR]
qui s'utilisent comme suit.
En E11 :
=toto(A1:A4;2;2;A6;D6;G6;J6;M6;P6;S6;V6;Y6;AB6)
A1:A4 car les critères de recherches sont en A1:A4. 2;2 car les valeurs à sommer sont décalées de 2 lignes vers le bas et de 2 colonnes vers la droite par rapport aux cellules à comparer aux critères. A6;D6;G6;J6;M6;P6;S6;V6;Y6;AB6 car A6;D6;G6;J6;M6;P6;S6;V6;Y6;AB6 sont les cellules à comparer aux critères.
En E12 :
=tata(A1:A4;2;2;A6;D6;G6;J6;M6;P6;S6;V6;Y6;AB6)
Les spécialistes de la formule trouveront sans doute d'autres solutions...
ROGER2327 #4196
Vendredi 20 Absolu 138 (Sainte Mélusine, souillarde de cuisine, SQ) 6 Vendémiaire An CCXIX 2010-W39-1T22:51:44Z
Bonjour Roger,
merci beaucoup pour votre réponse rapide. Je sais que mon problème n'était pas des plus simples. Je test dès demain matin et je vous tiens au courant des développements.
[COLOR="DarkSlateGray"][B]Function tutu(ParamArray r())
Application.Volatile
Dim j&, k&, tmp#, tf As Boolean
For j = 4 To UBound(r)
tf = False
For k = 1 To r(1).Count
tf = tf Or r(j) Like "*" & r(1).Cells(k, 1) & "*"
Next
If IIf(r(0), tf, Not tf) Then tmp = tmp + r(j).Offset(r(2), 0).Offset(0, r(3)).Value
Next
tutu = tmp
End Function[/B][/COLOR]
C'est possible de le faire sans ligne intermédiaire mais il faudrait une formule matricielle quelque peu plus complexe et qui ne ferait qu'augmenter la difficulté de compréhension.
Pour ce qui est des cellules fusionnées, il y a facilement moyen de le faire sans, tout en respectant la mise en page, voir exemple en A6 et D6.
Bonjour Roger, Denis, hoerwind, Monique, le forum,
ces réponses me renversent. Vous êtes tous arrivés au résultat désiré mais en passant tous par des chemins différents. Quel beau spectable !
Tout d'abord, merci à tous d'avoir pris de votre temps pour répondre à mon besoin. C'est très apprécié. Plus je progresse dans mon apprentissage d'Excel, moins j'ai besoin de venir ici faire appel à vos services. Toutefois, chaque fois que le besoin s'en fait sentir et que je dois avoir recours à ce forum, il y a toujours une âme charitable pour m'aider. Ce forum est vraiment bien !!!
Ceci dit, en ce qui concerne les réponses, elles fonctionnent toutes à merveille.
@ ROGER2327 : Je n'avais pas encore eu la chance d'utiliser des fonctions personnalisées comme celle-ci. C'est très efficace. J'essaierai de réutiliser le concept dans mes projets futurs.
@ Denis : C'est tout un imbricage de formules que vous m'avez préparé. Le hic est que les noms et les emplacements changent dans le vrai fichier. Toutefois, avec l'exemple que je vous ai fourni, votre solution fonctionne impec !
@ hoerwind : Très bonne idée. Le concept fonctionne très bien. Merci !
@ Monique : Votre solution est la plus simple de toutes. Je crois que c'est celle que je vais retenir.
Pour ceux que ça intéresse, voici la version finale, une fois adaptée à mes besoins, de la formule utilisée.
Code:
=SOMME(SI(ESTNUM(TROUVE($E$1:$E$4;INDIRECT("'Synth. par plan'!"&"$O$"&D1&":"&"$BV$"&D1)))*1;INDIRECT("'Synth. par plan'!"&"$Q$"&D2&":"&"$BX$"&D2)))
En E1:E4 les 4 critères.
En D1 : une formule pour aller chercher le numéro de la ligne avec les comptes dans mon onglet de recherche :
Code:
=EQUIV("Montant Cible";'Synth. par plan'!K1:K65000;0)-5
En D2 : Une formule pour aller chercher la dernière ligne de mon onglet de recherche, soit la ligne avec les totaux. (Matricielle)
Code:
=MAX(SI(NBCAR('Synth. par plan'!K1:K65000)>0;LIGNE('Synth. par plan'!K1:K65000);0))
Merci pour votre réponse qui est, pour moi, un modèle de ce que j'aimerais voir plus souvent. Vos commentaires sont, à mon sens, très-utiles car ils permettent de comprendre comment et pourquoi nos propositions sont utilisées (ou inutilisées). Cela ne peut que, d'une part, nous encourager à persévérer, d'autre part nous améliorer dans nos contributions.
- 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