Recupération de critères puis SOMMEPROD

Bonjour,

Je suis novice en codage, ai une logique algorithmique mais ne parviens pas à coder en basic de quoi remplir les cellules d’un tableau récapitulatif de quantités d’objets par étage dans des bâtiments (j’ai simplifié le problème: 2 bâtiments et 4 étages max), en récupérant le nom de deux critère dans la feuille récapitulative, afin de les utiliser dans une formule SOMMEPROD. Je ne fais pas de tableau croisé parceque mes les seules données se rajoutant doivent être directement mises dans un tableau récapitulatif

Si on applique le cas par exemple à la cellule B3:

1ERE ETAPE: Récupération de deux critères (par intersection et recherche verticale)

Ensuite, en partant de cette même colonne (DESIGNATION, ou A1:A50), une recherche verticale ascendante en recherchant le texte commençant par " TYPE_OBJET « nous permettra de récupérer de relever la valeur (ici « TYPE_OBJET_1 » qui nous servira comme 2ème critère pour une formule SOMMEPROD dans la prochaine étape) et la stocker sous le nom ‘type’

2EME ETAPE: Formule sur la cellule en utilisant les deux critères

Il faudrait effectuer une boucle pour remplir toute la colonne du récapitulatif selon cet algorithme.

J’ai tenté des bouts de code (faux je pense, et applicables sur une cellule spécifique), mais mes compétences limitées en codage me font vraiment galérer, je dois surement mal utiliser les fonctions et les notations...serait il possible de vous demander un coup de main pour l’écriture de ce code? Merci énormement

Sub RemplissageRecapitulatif()

Dim wb as object ‘le classeur
Dim ws as object ‘les feuilles
Dim ws1 as object ‘pour travailler sur une feuille en question
Dim c as object ‘pour travailler sur une cellule en question
Dim i as integer ‘me servira a compter mon nombre de feuilles
Dim type as String ‘pour premier critère
Dim niveau as String ‘pour deuxième critère

wb=Thiscomponent
ws.wb.Sheets
ws1=ws.getByName(« Recapitulatif »)
c=ws1.getRangeByName(« B3 ») ‘mais je dois travailler sur toutes les cellules de la colonne, comment le traduire, avec boucle?

‘_____1ERE ETAPE
niveau = A1:50 (« B3.row ») ‘recuperer l’intersection, dois-je mettre niveau.value=… ?
type = niveau.INDEX_Colonne LIKE (« TYPE_OBJET ») ‘nul, il me faut une recherche vers le haut pour récupérer l’objet correspondant,

‘_____2EME ETAPE
Ws_Count = Ws.count 'pour avoir une variable nous indiquant le nombre de feuilles
MsgBox Ws_Count 'affiche le nombre de feuilles, qui peut varier
For i=1 to Ws_Count 'boucle pour effectuer ça sur toutes les feuilles, même si on en rajoute?
   Range("c").formula = "SUMPRODUCT((A1:A50 = type)*(B1:B50 = niveau)*(C1:C50)) » ‘je ne sais pas comment noter les variables ici
Next

End Sub

Bonsoir,

Très lyrique ta description, mais je doute un peu que tu arrives à un résultat cohérent avec le chemin que tu empruntes...

Tu peux faire ton calcul avec des formules, et effectivement l'utilisation de SOMMEPROD convient dans ce cas, mais il faudrait ne pas vouloir la faire travailler à l'envers.

=SOMMEPROD((Batiment1!$A$2:$A$9=$A$2)*(Batiment1!$B$2:$B$9=A3)*Batiment1!$C$2:$C$9)

Dans ton modèle, la formule ci-dessus te donnera le résultat en B3, partiel car elle ne considère que Batiment1, il faudra ajouter la même pour Batiment2. Ceci juste pour l'exemple : les matrices sont dans les feuilles Batiment, dans Récap les valeurs à y chercher pour renvoyer un résultat.

(Je n'ai pas utilisé tes noms de plage car cela m'a paru confus et j'ai évité d'en ajouter, on peut en mettre pour désigner les matrices, ce qui ne raccourcira que très légèrement la formule.)

Tu peux donc tout à fait obtenir tous tees résultats avec formules : ce que l'on s'efforce de faire dans ce cas c'est de n'avoir à bâtir qu'une seule formule, recopiable sur toute la plage de résultats souhaités. La configuration de ton tableau Récap oblige à en faire 2. Il serait facile de le reconfigurer pour faciliter la formulation.

Maintenant, il est évident que si tu as quantité de Batiment, cela risque d'allonger fortement les formules, et aussi la quantité de formules, sauf à bâtir une seule base de données au lieu d'une multiplicité de feuilles.

On peut aussi imaginer de rendre tes feuilles Batiment intégralement compatibles entre elles pour permettre une formulation "3D"...

Si la situation formule devient trop lourde, il peut aussi s'avérer judicieux de faire le calcul entièrement en VBA.

Dans ce cas, il faut respecter la syntaxe autant que possible pour éviter que ça plante à chaque ligne ! et si c'est pour construire une formule à la fin (il y en a qui le font certes !!!) ,je considère que c'est d'une totale absurdité...

Dans ton cas particulier, cela se fait au moyen de 3 boucles imbriquées et quelques variables : la première défile la plage résultats, on récupère les paramètres de recherche, la seconde défile les feuilles Batiment, la 3e défile la plage de recherche, on récupère la valeur cherchée qu'on cumulera avec les autres valeurs correspondant aux mêmes critères, et en fin de parcours des 2e et 3e on affecte le résultat, avant de poursuivre pour la recherche suivante.

Là plus de formules, on lance VBA, qui inscrit les résultats.

Comme pour la solution formules, un petit arrangement de tes tableaux pourrait faciliter la chose.

Cordialement.

Rechercher des sujets similaires à "recuperation criteres puis sommeprod"