Appeler une macro avec option

Bonjour,

Bonne et heureuse année à vous tous et vos proches.

Je viens de faire un tableau avec 4 colonnes

ABCD
2211604/09/2020119
4313518/09/2020112
3612616/10/202087
1114118/10/202084
2316120/11/202070

Dans une macro j'ai fais un select case

Case 1 pour trier la colonne A du plus grand au plus petit en tenant compte des autres colonnes

Case 2 pour trier la colonne B du plus grand au plus petit en tenant compte des autres colonnes

Etc...

Je fais dans les deux sens (du plus grand au plus petit et du plus petit au plus grand)

Donc 4 colonnes X 2 est égal à 8 possibilités

    Sub TrierFCalcul()
    Select Case Choix

    Case 1:
    ActiveWorkbook.Worksheets("TriCalcul").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("TriCalcul").Sort.SortFields.Add Key:=Range("D2:D52") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal

    Case 2:
    ActiveWorkbook.Worksheets("TriCalcul").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("TriCalcul").Sort.SortFields.Add Key:=Range("D2:D52") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    End Select

'ETC......    

    With ActiveWorkbook.Worksheets("TriCalcul").Sort
        .SetRange Range("A3:D52")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .Apply
    End With

Sur ma feuille j'ai créé des boutons qui appelle la macro "TrierFCalcul"

Il y a t-il un moyen de mettre l'option "Choix = 1 ou Choix = ou 2 ou 3 etc.. " que j'ai choisi ?

Plutôt que de faire une macro pour chaque bouton ?

Merci pour vos réponses

Eric

Salut Jefekoi,

Call TrierFCalcul(2)
Sub TrierFCalcul(Byval iChoix%)

Un fichier, peut-être, pour d'autres solutions... ?


A+

Merci pour ta réponse mais

C'est à partir de cette fenêtre que j'appelle la macro, je laisse un exemple en fichier joint

capture 2021 01 01 a 17 14 08
9exempletri.xlsm (18.73 Ko)

Bonjour,

Tu peux utiliser cette macro :

   Sub TrierFCalcul()
   Dim Choix%
   Choix = CInt(Mid(Application.Caller, 11))
    Select Case Choix

    Case 1:
    ActiveWorkbook.Worksheets("TriCalcul").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("TriCalcul").Sort.SortFields.Add Key:=Range("D2:D52") _
        , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal

    Case 2:
    ActiveWorkbook.Worksheets("TriCalcul").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("TriCalcul").Sort.SortFields.Add Key:=Range("D2:D52") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    End Select

'ETC......

    With ActiveWorkbook.Worksheets("TriCalcul").Sort
        .SetRange Range("A3:D52")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .Apply
    End With

End Sub

NB : choix est identifié par le N° du rectangle.

A l'avenir, joint ton fichier tout de suite ça gagnera du temps...

A+

Super, merci Galopin01 , je vais tester ça :)

Après on peut encore surement améliorer si tu remplaces le 'ETC... par tout le code.

ça permettra de remplacer toutes les variables par des paramètres...

A+

Salut Jefekoi,
Salut Galopin,

de simples clics (xlAscending) ou clics droits (xlDescending) en ligne 1 de la colonne désirée..

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'
If Not Intersect(Target, Rows(1)) Is Nothing Then _
    If Target <> "" Then _
        Range("A1").CurrentRegion.Sort key1:=Range(fctCol(Target.Column) & 2), order1:=xlAscending, Orientation:=xlTopToBottom, Header:=xlYes
'
End Sub
7jefekoi.xlsm (20.74 Ko)


A+

Bonjour Curulis,

Sinon s'il y a d'autres rectangles un aperçu du truc version concentré :

Sub TrierFCalcul()
Dim Choix%, prm
Choix = CInt(Mid(Application.Caller, 11))
   Select Case Choix
   Case 1: prm = xlDescending
   Case 2: prm = xlAscending
   End Select
With ActiveWorkbook.Worksheets("TriCalcul").Sort
    .SortFields.Clear
    .SortFields.Add Key:=Range("D2:D52"), SortOn:=xlSortOnValues, Order:=prm, DataOption:=xlSortNormal
        .SetRange Range("A3:D52")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .Apply
End With
End Sub

Bon je te cause pas du MAC hein...

Il y a vraiment du choix finalement :)

Merci à vous

L'imagination au pouvoir...

Tant que le résultat, simple et efficace, suive, c'est gagné !

A+

Bonjour le fil, bonjour le forum,

J'aimerais bien quand même que Sébastien fasse de temps en temps des contrôles anti-dopage !... . Oui je sais, c'est moi qui suis un peu lent...

En pièce jointe une proposition avec une UserForm. Double-cliquer n'importe où dans le tableau pour la lancer...

10jefekoi-ep-v01.xlsm (18.20 Ko)


Merci j'ai finalement j'ai pris celui ci :)

Dites moi ce que vous en pensez

11exempletri.xlsm (20.22 Ko)

Bonsoir …

adepte du l’utilisation du Tableau (anciennement nommé Table), je la conseille vivement afin profiter de propriétés permettant de faciliter grandement les procédures.

Ici, la macro est invariable quand le tableau (nommé TB dans l’exemple) est déplacé ici ou là.

Private Sub Worksheet_BeforeRightClick(ByVal R As Range, Cancel As Boolean)
    If Intersect(R, [TB].Rows(0)) Is Nothing Then Exit Sub
    Dim c As Byte, n As Byte
    c = R.Column - [TB].Column + 1              'colonne de laTable
    n = IIf(n = 2, 1, 2)                        'croissant 1 sinon 2
    [TB].Sort [TB].Columns(c), n, Header:=1
    Cancel = 1: [TB].Item(0, c + 1).Select      'sortie liste et effet bascule
End Sub

Attention : ici seule la colonne choisie est triée, les autres non. Pour des tris successifs indépendants, c’est une autre histoire !

Oups, la profusion de boutons me donne de l'urticaire ...

Re,

Oups, la profusion de boutons me donne de l'urticaire ...

Mort de rire... Idem...

Bonjour à tous, finalement et après des essais j'ai utilisé Application.Caller

If Right(Application.Caller, 1) = "3" Then choix = 1
If Right(Application.Caller, 1) = "4" Then choix = 2
If Right(Application.Caller, 1) = "5" Then choix = 3

  Select Case choix
    Case 1: msgbox "blabla"
    Case 2: msgbox "blibli"
    Case 3: msgbox "bloblo"
  End Select

Je laisse un petit fichier pour les personnes à qui cela pourrait intéressé

Merci à vous qui m'avait permis d'apprendre des choses qui me serviront certainement pour mes prochains projets

Eric

9bouton.xlsm (16.63 Ko)

B'jour,

If Right(Application.Caller, 1) = "3" Then choix = 1
If Right(Application.Caller, 1) = "4" Then choix = 2
If Right(Application.Caller, 1) = "5" Then choix = 3

  Select Case choix
    Case 1: msgbox "blabla"
    Case 2: msgbox "blibli"
    Case 3: msgbox "bloblo"
  End Select

peux s'écrire :

choix = CLng(Right(Application.Caller, 1)) - 2

  Select Case choix
    Case 1: msgbox "blabla"
    Case 2: msgbox "blibli"
    Case 3: msgbox "bloblo"
  End Select

Bonjour le fil, bonjour le forum,

Quel rapport avec ta première requête ?!...

Merci Pijaku pour ton idée d'amélioration.

Comment ça quel rapport ThauThème ?

J'ai eu plusieurs proposition (encore merci aux participants) et à la final j'ai préféré une autre façon de faire.

C'est gênant de ne pas avoir pris l'une des proposition ?

Re,

Calme !... Ce n'est absolument pas gênant, bien sûr que non. Tu es libre de faire le choix qui te va le mieux. Mais franchement, je ne vois pas le rapport entre ta première demande et ce dernier code qui vient comme un sseveu ssur la ssssoupe, hors contexte...

Je voulais trouver une astuce pour éviter de faire une macro pour chaque boutons.

et la solution est :

choix = CLng(Right(Application.Caller, 1)) - 2

Voilà donc entre le premier message et le dernier il y a un rapport.

Rechercher des sujets similaires à "appeler macro option"