Macro pour récupérer le SOUSTOTAL(104,x) d'une colonne de tableau
J'espère que tout va bien pour vous !
Je travaille en ce moment sur un projet , et j'ai besoin de vous , peut-être que certain d'entre vous pourront m'aider ?
J'ai un tableau dans une feuille 1 , je souhaite créer une Macro qui ira filtrer 1 à 1 les éléments d'une colonne du tableau et pour chaque filtre effectué , faire le SOUSTOTAL(104)(Donc le maximum) d'une colonne M du tableau , et le noter dans une Feuille 2 en collant à chaque fois en collage spécial valeur , pour ne pas perdre la valeur du maximal filtré à chaque itération !
Je sais pas si je suis clair !
Mais si vous pouvez m'aider je suis preneur !!
Merci beaucoup et passez une excellente journée !
Très sincèrement
Shadow ^^
Bonjour ShadowSneaks,
Un exemple de macro que vous pourrez tester :
Sub FiltrerEtMax()
Dim sht1 As Worksheet
Dim sht2 As Worksheet
Dim tbl As ListObject
Dim rng As Range
Dim cell As Range
Dim lastRow As Long
Dim i As Long
Set sht1 = ThisWorkbook.Worksheets("Feuille1") ' Modifiez "Feuille1" par le nom de votre feuille
Set sht2 = ThisWorkbook.Worksheets("Feuille2") ' Modifiez "Feuille2" par le nom de votre feuille
Set tbl = sht1.ListObjects("Tableau1") ' Modifiez "Tableau1" par le nom de votre tableau
Set rng = tbl.ListColumns("Colonne1").DataBodyRange ' Modifiez "Colonne1" par le nom de la colonne à filtrer
' Désactive les mises à jour d'écran pour une exécution plus rapide
Application.ScreenUpdating = False
i = 1 ' Initialiser le compteur pour la feuille 2
For Each cell In rng
' Filtre le tableau
tbl.Range.AutoFilter Field:=1, Criteria1:=cell.Value
' Calcule le maximum de la colonne M
maxVal = Application.WorksheetFunction.Subtotal(104, tbl.ListColumns("M").DataBodyRange)
' Ecrire le maximum dans la Feuille 2
sht2.Cells(i, 1).Value = maxVal
i = i + 1
Next cell
' Réactive les mises à jour d'écran
Application.ScreenUpdating = True
End SubNotez que ce code écrira les valeurs maximum dans la première colonne de la Feuille 2, en commençant à la première ligne. Si vous voulez qu'il écrive ailleurs, vous pouvez modifier la ligne sht2.Cells(i, 1).Value = maxVal.
Afin que vous puissiez comprendre mon problème , vous pourrez trouver ci joint un exemple qui ressemble à mon fichier dans sa mise en forme , si vous pouviez essayez d'appliquer la formule ici , je n'y arrive pas ^^
La colonne à filtrer 1 à 1 est la colonne "Key" de la feuille "Diamant Brut" , et le SousTotal est à récupérer dans la colonne Prix à chaque fois
La valeur obtenue doit être collée spécialement en valeur pour éviter d'être effacée dans la Feuille 2 : "KPI" dans la cellule correspondante à la Key filtrée
Merci beaucoup !
Bonjour ShadowSneaks, Abder,
Sinon en utilisant un TS (Tableau Structuré) et une fonction plus basique MAX()
=SOMMEPROD(MAX((Tableau1[Key]=B4)*(Tableau1[Prix])))Aucunement besoin de filtre
A+