Formule someprod avec argument = sur de nombreuse valeurs

Bonjour,

Ayant déjà été impressionné et très satisfait de vos conseils précédemment, je retente l'expérience.

Je bloque donc sur une formule de somme prod. Précisions : J'ai simplifié dans le fichier ci joint :

- Initialement, la feuille "Base de donnée" et sur un fichier à part.

- Les feuilles "Choix Employés" et "Fiche tri" sont rassemblés sur le fichier qui me pose problème

- La Feuille "Choix Employés" est normalement cachée et alimenter par une macro via un formulaire

La formule qui me pose problème se trouve en F8 sur la feuille "Fiche tri". Le but est d'aller chercher le nombre d'heure prestée, cumulée pour la sélection d'ouvriers repris sur la feuille "Choix ouvrier", pour le créneau choisi entre les deux mois & Année repris au dessus.

En réalité, ma formule fonctionne, mais elle n'est pas optimale. Je n'ai rien trouvé de mieux que ceci *((Tableau2[ID Ouvrier]='Choix Ouvrier'!A2)+(Tableau2[ID Ouvrier]='Choix Ouvrier'!A3)+(Tableau2[ID Ouvrier]='Choix Ouvrier'!A4)++(Tableau2[ID Ouvrier]='Choix Ouvrier'!A5)+ Pour intégrer les arguments lié aux id à prendre en compte. Mais cela rend la formule très très longue (Dans le vrai fichier, je peux avoir jusque 100 ouvriers sélectionnés. Encore plus long quand le classeur base de donné source est fermé et que les chemins d'accés sont repris dans la formule. Ca devient donc impossible puisque supérieur au nombre limite de caractères.

Je soupçonne bien que la solution soit toute simple mais je bloque. J'ai bien essayé de formuler l'argument et faisant référence à la plage 'Choix Ouvrier'!A2:A100 mais rien de ce que j'ai tenté ne fonctionne. Avez-vous une idée pour simplifier et raccourcir ?

D'avance merci pour vos précieuses lumières,

bien à vous tous,

Vincent

Bonjour,

Votre formule pourrait se réduire à celle-ci en créant deux colonnes "Sélection" dans vos deux onglets.

=SOMMEPROD((Tableau2[Date début]>=$D$6)*(Tableau2[Date fin]<=$F$6)*(Tableau2[Sélection]="X")*Tableau2[Heures prestées4])

Bonjour Eric et merci,

Effectivement cela fonctionne, mais j'aimerais ne pas intervenir sur le fichier base de donnée lorsque je manipule ma macro pour établir la sélection (Ce fichier est initialement séparé, un bouton macro "Recherche" permet simplement de l'ouvrir, d'actualisé le fichier tri et de refermer la base de donnée). Or, dans ta solution, a chaque changement de sélection, je devrais en VBA ouvrir le fichier, et demander qu'il efface les croix de la colonne sélection et qu'il les remplacent dans les bons numéro avant d'actualiser.

Par sécurité, j'aime autant minimiser les manipulation dans la base de donnée source.

N'y a t'il pas un autre moyen ?

Merci quand même,

Vincent

Pour sélectionner des informations dans un tableau, j'utilise très souvent un "Liste à Liste" dont le fonctionnement est décrit chez Jacques BOISGONTIER : JB

Regarder la partie Formulaire (Transfert Listbox).

Merci pour le lien que je retiens Eric,

J'utilise déjà la méthode de transfert entre ListBox pour cette macro justement

(Elle n'est pas reprise ici car elle ne pose pas de problème :-) )

Bonne fin de journée à vous.

Vincent

Bonsoir,

combien devrions nous trouver dans avec le fichier fourni ? Moi je trouve 37 688,62...

@ bientôt

LouReeD

Bonsoir,

pour résoudre ce problème il suffit de "transformer" les id ouvrier en 1 ou 0 en fonction qu'ils sont présent ou pas sur la feuille "choix ouvrier". J'ai "transformé" le tableau de la feuille choix ouvrier en tableau structuré, son nom est Tableau1.

J'ai utilisé la fonction SI avec un test avec la fonction NB.SI, donc : SI(NB.SI(colonne ID ouvrier;Colonne id choix ouvrier);1;0), ce qui donne en formule finale :
=SOMMEPROD((Tableau2[Date début]>=$D$6)*(Tableau2[Date fin]<=$F$6)*(SI(NB.SI(Tableau1[ID];Tableau2[ID Ouvrier]);1;0))*(Tableau2[Heures prestées4]))

@ bientôt

LouReeD

Bonsoir à tous,

@loureed

J'étais un peu réticent sur cette solution car comme j'expliquais, les deux fichiers sont séparés dans ma version originale. Et je n'aimais pas l'idée de rajouter des formules dans une base de données que je voulais la plus brute possible. J'ai finalement quand même procéder comme cela en adaptant un petit peu les macro qui relient les deux fichiers. La formules sommeprod devient donc simplement :

=(SOMMEPROD((Tableau2[Date début]>=$D$6)*(Tableau2[Date fin]<=$F$6)*(Tableau2[Résultat tri]="1")*(Tableau2[Heures prestées4])))

Cela fonctionne sans problème visible jusqu'ici. Merci donc pour votre solution.

Je classe donc le sujet comme solutionné.

Merci à tous pour votre collaboration !

Vincent

Bonsoir,

merci pour ce retour ! Et bonne continuation dans votre projet !

@ bientôt

LouReeD

Rechercher des sujets similaires à "formule someprod argument nombreuse valeurs"