Macro Somme de cellules selon le nom des feuilles

Bonjour,

J'aurai cette fois besoin de votre aide pour une partie de ma macro.

Je voudrai affecter à une cellule d'une feuille, la somme d'autre cellules situées sur d'autre feuille. La somme étant faite selon le nom des autres feuilles. Pour faire plus simple je vous met un exemple, le résultat voulu se trouve sur la feuille bilan des cellules en jaune.

Merci à vous pour votre aide !

78exemple1.xlsx (15.75 Ko)

Re-bonjour,

Je me permets de relancer le post. Personne ne voit comment faire ?

Merci !

Bonjour,

Tu parles de compléter une macro... Pas de macro dans ton classeur !

Donc je l'ai pris en exercice formule.

Compte tenu de la configuration, création d'un nom de champ listant les noms de feuille : NFeuil

=STXT(LIRE.CLASSEUR(1);TROUVE("]";LIRE.CLASSEUR(1))+1;99)&INDIRECT("IV65000")

Cf. Boisgontier

Formule que j'ai mis en F (pour pas perturber).

=SOMMEPROD(SOMME(INDIRECT("'"&NFeuil&"'!"&SI(DROITE(NFeuil;2)=$B5;"E"&ENT(LIGNE()/4)*2+7;"IV1"))))

Formule matricielle (Ctrl+Maj+Entrée)

L'objectif de l'exercice consistait (une fois la liste des feuilles établie et nommée) à obtenir le résultat en une seule formule, recopiable sans modification.

Si l'on se réfère à l'exemple de Boisgontier, il prélève les feuilles voulues en utilisant INDEX et PETITE.VALEUR et en les listant en ligne... Et utilisation de cette première extraction pour obtenir un total. Pour faire l'économie de cette phase, la condition permettant de pointer sur les feuilles voulues ne pouvait pas éliminer les autres (sous peine d'erreur #REF!, référence dansla liste manquante) mais fournir à la place une cible renvoyant 0 : un peu dangereux de pointer une autre feuille (à moins qu'on ait dans le lot une feuille dont il est sûr que la zone visée ne contient pas de valeurs) mais pointer une cellule éloignée s'avère être le choix le plus pratique.

Pour garder la bonne ligne lors de la recopie, c'est un "calcul d'apothicaire" mais on reste dans des manoeuvres assez habituelles.

J'ai tenu à ajouter ces explications pour que l'exercice puisse être réutilisé en connaissance de cause, et en y trouvant éventuellement d'autres variantes...

Sinon, comme je crois avoir déjà eu l'occasion de le dire, je n'ai pas d'occasion de ce genre d'exercices sur mes fichiers . Je ne suis certainement pas le seul car il suffit d'organiser un tant soit peu les données au départ en fonction de ce qu'on pense vouloir en tirer par la suite pour ne pas avoir ce type de situations...

Salut à tous ceux qui s'égareront par ici !

Cordialement.

Bonjour MFerrand,

Merci de ton retour.

C'était plus en tant qu'exercice macro (et non formule) que je coincé un peu, désolé je me suis mal exprimé.

Néanmoins ta formule donne exactement le résultat voulu bien que je ne comprenne pas tout le contenu.

Je bloque sur donner à ma somme la condition du nom de la feuille

J'aimerai obtenir une formule du style (la formule suivante n'est qu'une illustration, je n'arrive pas du tout à trouver la bonne syntaxe):

ActiveCell.FormulaR1C1 = "=SUMIF('" & wksheet.Name & "'! ,""-p1"", '" ...)"

ActiveCell.FormulaR1C1 = "=SUMIF('" & wksheet.Name & "'! ,""-p2"", '" ...)"

ActiveCell.FormulaR1C1 = "=SUMIF('" & wksheet.Name & "'! ,""-p3"", '" ...)"

wksheet définit comme un objet Worksheet

(Je ne peux pas poster ma macro car elle s'applique sur le cas réelle, l'exemple est pour mieux comprendre mon problème)

Si tu sais comment construire une macro sur l'exemple précédent, ou au moins la formule adéquate je suis preneuse.

Merci à toi pour ton aide

Utiliser VBA présente le cas échéant l'intérêt de ne pas mettre de formule ! S'en servir pour mettre une formule, sauf cas vraiment très particuliers, n'apporte rien et ne présente pas d'intérêt.

Au demeurant, une formule insérée par VBA ne fonctionnera que si la même insérée manuellement fonctionne !

Tu ne devrais avoir aucun mal à te convaincre que ta formule ne peut pas fonctionner ! Tu ne respectes pas la syntaxe de la fonction, mais de toute évidence tu ne peux la respecter puisque tu ne peux pas mettre de condition (ou de critère) sur le nom de feuille.

Toute modulation de ce type oblige à passer par INDIRECT...

De plus, c'est ce qu'on appelle une formule 3D que tu tentes de mettre en place (au cas où tu n'en aurais pas eu conscience).

Or Excel accepte la formulation 3D dans les cas simples, dès que le cas se complique, pour que ça marche il faut lui faire croire qu'il calcule en 2D... ce qui requiert comme toujours l'usage d'INDIRECT.

La formule que j'ai indiquée s'appuie sur une liste des noms de feuille constituée en plage nommée. La méthode utilise une macro Excel4 (ce qui nous ramène plus de 25 ans en arrière mais ça fonctionne toujours !), ce qui permet de constituer la liste sans avoir à l'écrire. [C'est ce qui oblige à enregistrer le classeur en .xlsm car la présence d'une macro Excel (non VBA) entraîne la reconnaissance du classeur comme contenant des macros.] Tu dois pouvoir obtenir le même résultat en l'écrivant et nommant la plage contenant ladite liste...

Tu as donc le choix, entre une des variantes de cette méthode de formulation,

ou une macro qui ne met pas de formule, mais fait le calcul,

ou une macro mais sous forme de fonction personnalisée que tu utiliseras pour formuler de façon simple,

ou bien tu modifies entièrement l'organisation de tes données !

Cordialement.

Rechercher des sujets similaires à "macro somme nom feuilles"