Case à cliquer qui déclenche des filtres dans la BDD
Bonjour j'ai un fichier assez complexe avec pas mal de colonnes (20 en tout) :
Afin d'avoir des choses dynamique, ma formule pour l'overdue customer >60days ressemble à :
=(SOMME.SI.ENS(INDEX('BDD_CLI - N EUR'!$A:$J; 0; EQUIV("OVERDUE 61-90"; 'BDD_CLI - N EUR'!$A$1:$J$1; 0)); INDEX('BDD_CLI - N EUR'!$A:$J; 0; EQUIV("WEEKS"; 'BDD_CLI - N EUR'!$A$1:$J$1; 0)); $C64; INDEX('BDD_CLI - N EUR'!$A:$J; 0; EQUIV("Supplier"; 'BDD_CLI - N EUR'!$A$1:$J$1; 0)); $Q64)+SOMME.SI.ENS(INDEX('BDD_CLI - N EUR'!$A:$J; 0; EQUIV("OVERDUE +90"; 'BDD_CLI - N EUR'!$A$1:$J$1; 0)); INDEX('BDD_CLI - N EUR'!$A:$J; 0; EQUIV("WEEKS"; 'BDD_CLI - N EUR'!$A$1:$J$1; 0)); $C64; INDEX('BDD_CLI - N EUR'!$A:$J; 0; EQUIV("Supplier"; 'BDD_CLI - N EUR'!$A$1:$J$1; 0)); $Q64))/1000
Pour faciliter la compréhension des formules, je voudrait que quand je clique sur Overdue Customer >60days, k€ cela filtre ma BDD (comme le ferai la formule) ce qui permettrai aux utilisateurs de comprendre ce que va chercher la formule et je me demandais si c'était possible à faire avec des macros ou non
Les entêtes de ma BDD sont :
Merci d'avance si vous avez une approche :)
Elle est compliqué à comprendre mais j'ai utiliser cette macro dans la feuille et ça marche (je l'ai fait pour 2 colonne BU et BM
' Auteur : https://www.linkedin.com/in/spilerstheo/
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim lastRowBU As Long
Dim lastRowBM As Long
' Déterminer la dernière ligne non vide pour les colonnes BU et BM
lastRowBU = Me.Cells(Me.Rows.Count, "BU").End(xlUp).Row
lastRowBM = Me.Cells(Me.Rows.Count, "BM").End(xlUp).Row
' Vérifier si la cellule sélectionnée est dans la plage BU8:BU[lastRowBU]
If Not Intersect(Target, Me.Range("BU8:BU" & lastRowBU)) Is Nothing Then
Call UpdateFilterOverdueCustomers(Target.Row, "BU")
End If
' Vérifier si la cellule sélectionnée est dans la plage BM8:BM[lastRowBM]
If Not Intersect(Target, Me.Range("BM8:BM" & lastRowBM)) Is Nothing Then
Call UpdateFilterOverdueCustomers(Target.Row, "BM")
End If
End Sub
Sub UpdateFilterOverdueCustomers(rowNumber As Long, column As String)
Dim ws As Worksheet
Dim lo As ListObject
Dim weeksCol As ListColumn
Dim supplierCol As ListColumn
Dim overdue61Col As ListColumn
Dim overdue90Col As ListColumn
Dim supplierName As String
Dim weekValue As String
' Définir la feuille contenant la BDD
Set ws = ThisWorkbook.Sheets("BDD_CLI - N EUR")
' Définir le tableau
Set lo = ws.ListObjects("BDD_CLI_NEUR")
' Effacer les filtres précédents
If lo.AutoFilter.FilterMode Then
lo.AutoFilter.ShowAllData
End If
' Trouver les colonnes des critères
On Error Resume Next
Set weeksCol = lo.ListColumns("WEEKS")
Set supplierCol = lo.ListColumns("Supplier")
Set overdue61Col = lo.ListColumns("OVERDUE 61-90")
Set overdue90Col = lo.ListColumns("OVERDUE +90")
On Error GoTo 0
If weeksCol Is Nothing Or supplierCol Is Nothing Or overdue61Col Is Nothing Or overdue90Col Is Nothing Then
MsgBox "Les colonnes 'WEEKS', 'Supplier', 'OVERDUE 61-90' ou 'OVERDUE +90' n'existent pas dans le tableau.", vbCritical
Exit Sub
End If
' Obtenir les valeurs des colonnes C et Q pour la ligne sélectionnée
supplierName = ThisWorkbook.Sheets("DATA_SEAFRIGO BELGIUM").Cells(rowNumber, "Q").Value
weekValue = ThisWorkbook.Sheets("DATA_SEAFRIGO BELGIUM").Cells(rowNumber, "C").Value
' Appliquer le filtre basé sur la colonne cliquée (BU ou BM)
With lo
.Range.AutoFilter Field:=weeksCol.Index, Criteria1:=weekValue
.Range.AutoFilter Field:=supplierCol.Index, Criteria1:=supplierName
If column = "BU" Then
.Range.AutoFilter Field:=overdue61Col.Index, Criteria1:=">0", Operator:=xlOr, Criteria2:="<>" & ""
.Range.AutoFilter Field:=overdue90Col.Index, Criteria1:=">0", Operator:=xlOr, Criteria2:="<>" & ""
End If
End With
End SubBonne journée