Sommeprod / VBA sur plusieurs onglets

Bonjour à tous ,

J'ai pas mal parcourus le forum sans trouver de réponse. Je vous sollicite donc pour m'aider dans ma recherche de solutions.

J'aimerais pouvoir compiler des informations sur plusierus onglets dans un tableau.

Mon Ficher comporte une 30 ene d'onglet ( de S11 à S35 ) avec la même structure.

Suivant la date de plantation et la parcelle, j'aimerais que la formule me rapatrie un "1" dans le tableau parcelles.

si dans mon tableau, j'ai la date de la collone A et la parcelle de la ligne 1 alors je mets un "1". J'aimerais que la formule test sur tout les onglets .:

  • La date en B4
  • La parcelle sur la plage B2:I2

J'ai trouver une solution mais que ne me permet pas de faire le travail en totalité et qui est tres lourd. C'ets la somme de sommeprod.

Auriez vous une idée pour simplifier cette somme de sommeprod ? :

=(SOMMEPROD(($A16='S21'!$B$4)*(Parcelles!E$1='S21'!$B$2:$I$2)*"1"))+(SOMMEPROD(($A16='S22'!$B$4)*(Parcelles!E$1='S22'!$B$2:$I$2)*"1"))+(SOMMEPROD(($A16='S23'!$B$4)*(Parcelles!E$1='S23'!$B$2:$I$2)*"1"))+(SOMMEPROD(($A16='S24'!$B$4)*(Parcelles!E$1='S24'!$B$2:$I$2)*"1"))+(SOMMEPROD(($A16='S25'!$B$4)*(Parcelles!E$1='S25'!$B$2:$I$2)*"1"))+(SOMMEPROD(($A16='S26'!$B$4)*(Parcelles!E$1='S26'!$B$2:$I$2)*"1"))+(SOMMEPROD(($A16='S27'!$B$4)*(Parcelles!E$1='S27'!$B$2:$I$2)*"1"))+(SOMMEPROD(($A16='S28'!$B$4)*(Parcelles!E$1='S28'!$B$2:$I$2)*"1"))+(SOMMEPROD(($A16='S29'!$B$4)*(Parcelles!E$1='S29'!$B$2:$I$2)*"1"))+(SOMMEPROD(($A16='S30'!$B$4)*(Parcelles!E$1='S30'!$B$2:$I$2)*"1"))+(SOMMEPROD(($A16='S31'!$B$4)*(Parcelles!E$1='S31'!$B$2:$I$2)*"1"))+(SOMMEPROD(($A16='S32'!$B$4)*(Parcelles!E$1='S32'!$B$2:$I$2)*"1"))+(SOMMEPROD(($A16='S33'!$B$4)*(Parcelles!E$1='S33'!$B$2:$I$2)*"1"))+(SOMMEPROD(($A16='S35'!$B$4)*(Parcelles!E$1='S35'!$B$2:$I$2)*"1"))+(SOMMEPROD(($A16='S34'!$B$4)*(Parcelles!E$1='S34'!$B$2:$I$2)*"1"))

Merci par avance de votre aide .

Pas la peine de joindre un fichier avec les 30 onglets...

Et tu préciseras la(les) condition(s) d'attribution(s) du "1"...Et aussi l'objectif, bien sûr

Ce sont les conditions nécessaires pour avoir une aide du forum et une réponse adaptée.

Cdlt.

Merci ,

J'ai édité mon message initial .

Bonjour

Ta formule va de l'onglet S21 à l'onglet S34

Ton fichier comprend les onglets S11 à S16

De plus, elle où cette formule?

Cordialement

Bonjour,

J'ai supprimer la formule pour le moment car elle est trop lourde pour que je puisse envoyer l'exemple. Il en est de meme pour les onglets S17 A S35.

Le principe de la formule est donc un sommeprod sur un onglet, répété autant de fois qu'il y a d'onglet. Cela focntionne mais c'ets trop lourd et limité ( erreur formule trop grande, d'ou ma formule de S21 a 34 et non de S11 a 35 )

le somme prod répété est le suivant :

=(SOMMEPROD(($A16='S11'!$B$4)*(Parcelles!E$1='S11'!$B$2:$I$2)*"1"))

si A16 de l'onglet "Parcelles" correspond à B4 de l'onglet "S11"

ET

si E1 de l'onglet "Parcelles"correspond à une des cellules de la plage "B2:I2" de l'onglet "S11"

ALORS je met un 1 dans la cellule.

Merci d'avance

fichier mis a jour ci joint

Bonjour

Tu t'es trompé de colonne dans ta formule.

En B2 incrémenté sur tout le tableau

=SOMMEPROD(NB.SI(INDIRECT("'S"&LIGNE(INDIRECT("11:16"))&"'!$B$4");$A2)*(NB.SI(INDIRECT("'S"&LIGNE(INDIRECT("11:16"))&"'!$B$2:$I$2");Parcelles!B$1)))

ici, il n'y a que les onglets S11 à S16 d'où le INDIRECT("11:16"), tu rectifieras sur ton fichier

Cordialement

Super, un grand merci pour ta reactivité.

Ce la fonctionne à merveille et le fichier n'ets pas trop lourd.

Pour aller plus loin, j'ai deux autres questions :

  • Peut on déchancher les calcul de la feuille parcelle seulement à la demande ?
  • Si mes onglets sont intulés : S1 I , S1 II, S1 III, S2 I , S2II ... etc quelle serait alors la formule ? Ne faut il pas créer uen liste avec mes noms d'onglet et utiliser cette liste dans la formule ( si cela est possible ) ?

Merci encore

Bonjour

Suite à ta question, la nouvelle formule en B2 est

=SOMMEPROD(NB.SI(INDIRECT("'"&noms_onglets&"'!$B$4");$A2)*(NB.SI(INDIRECT("'"&noms_onglets&"'!$B$2:$I$2");Parcelles!B$1)))

(Voir fichier joint)

Si tu veux décider du calcul

Dans le menu "Outils" "Options" onglet "Calcul"

tu coches "sur ordre"

Les calculs ne s'effectueront ensuite qu'après appel avec la touche F9

Cordialement

Vraiment top, ca simplifie la chasoe avec une liste d'onglet. J'ai d'ailleurs trouvé comment la creér automatiquement. Je te remercie.

Autre question, si la feuille " parcelle" je la sort et je la mets danbs un autre classeur, et que mes réference sont dans : "'[TRACA radis 2014.xls] alors quel serait la formule? celle ci :

=SOMMEPROD(NB.SI(INDIRECT("[TRACA radis 2014.xls]'"&noms_onglets&"'!$B$4");$B2)*(NB.SI(INDIRECT("[TRACA radis 2014.xls]'"&noms_onglets&"'!$B$2:$I$2");'Parcelles vradis'!C$1)))

Merci par avance.

Sinon je regarde également pour trouver un code VBA pour retirer le calcul auto et mettre un bouton sur une seule feuille afin de n e pas ralentir le fichier .

Merci encore.

Bonjour

Presque cela.

La formule en B2 de la feuille "Parcelles vradis" serait

=SOMMEPROD(NB.SI(INDIRECT("'[TRACA radis 2014.xls]"&noms_onglets&"'!$B$4");$A2)*(NB.SI(INDIRECT("'[TRACA radis 2014.xls]"&noms_onglets&"'!$B$2:$I$2");'Parcelles vradis'!B$1)))

Mais elle ne fonctionne que le classeur TRACA radis 2014.xls ouvert.

Cordialement

22alexfly.zip (32.55 Ko)
Rechercher des sujets similaires à "sommeprod vba onglets"