Comment affectez-vous différentes macros à chaque button de command en haut de chaque colonne afin qu'elles fonctionnent indépendamment des autres macros?

J'ai atsortingbué la macro suivante à la première colonne de ma feuille de calcul pour sortinger les informations par ordre croissant et descendant. Cette macro est affectée au button de command et fonctionne.

If CommandButton1.Caption = "Click to Sort Ascending" Then 'Sort ascending... ActiveWorkbook.Worksheets("daily data drop").Sort.SortFields.Clear ActiveWorkbook.Worksheets("daily data drop").Sort.SortFields.Add Key:=Range("A2:A308"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("daily data drop").Sort .SetRange Range("A2:Z308") .Header = xlGuess .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With CommandButton1.Caption = "Click to Sort Decending" Else 'sort decending ActiveWorkbook.Worksheets("daily data drop").Sort.SortFields.Clear ActiveWorkbook.Worksheets("daily data drop").Sort.SortFields.Add Key:=Range("A2:A308") _ , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("daily data drop").Sort .SetRange Range("A1:Z308") .Header = xlGuess .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With CommandButton1.Caption = "Click to Sort Ascending" End Sub 

Je voudrais que tous les en-têtes supérieurs de chaque colonne aient un button qui sorting croissant et descendant comme la macro ci-dessus, en gardant datatables de la ligne correspondantes. Est-ce que quelqu'un peut m'aider ou avoir un model qui peut être utile.

Il n'est pas judicieux de placer un button sur chaque colonne. Je vais suggérer une méthode qui n'a pas besoin de buttons du tout. De plus, vous devriez toujours éviter de dupliquer de grandes parties de votre code, où seulement une ou deux déclarations diffèrent selon certains parameters. Vous devriez toujours essayer de "factoriser" votre code et de le raccourcir autant que possible, ce qui le rend plus lisible et plus durable.

Un moyen possible d'atteindre votre objective serait que l'user "double-clique" sur la cellule d'en-tête et que datatables soient sortingées par la colonne cliquée. Et après chaque type, l'ordre de sorting est inversé.

Vous pouvez le faire en ajoutant le gestionnaire suivant au code-module de votre feuille de calcul "daily data drop" :

 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Static descending As Boolean If Target.Row <> 1 Then Exit Sub Cancel = True Me.UsedRange.Sort Target, IIf(descending, xlDescending, xlAscending), Header:=xlYes descending = Not descending End Sub