Macro de tri pour plusieurs plages

Goose

XLDnaute Occasionnel
Bonjour à tous,

Voilà, j'ai une macro (ci-joint) que j'aimerai modifier pour quelle puisse me permettre de trier n'importe quel tableau sur une feuille active.
Pour cela, j'ai pris la position du bouton de commande pour selectionner les plages concernées
mais sachant que les lignes des ces tableaux sont variables en fonction des pays médaillés, comment insérer, dans le code, une variable qui me selectionne la plage respective (entre le nombre 1 et la position du bouton) ??
voir fichier exemple:
Bye
Code:
Sub Insertion()
Dim derlig As Long
derligne = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row
Application.ScreenUpdating = False
Range("K" & derligne - 1 & ":O" & derligne - 5).Select
    Selection.Sort Key1:=Range("L1"), Order1:=xlDescending, Key2:=Range("M1") _
        , Order2:=xlDescending, Key3:=Range("N1"), Order3:=xlDescending, Header _
        :=xlNo, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Application.ScreenUpdating = True
End Sub
 

Pièces jointes

  • TriTableau.xls
    31 KB · Affichages: 46

Papou-net

XLDnaute Barbatruc
Re : Macro de tri pour plusieurs plages

Bonjour Goose,

Voici une solution avec une procédure unique et des paramètres de lignes définis dans les boutons de commande.

Nota : j'ai remplacé tes boutons issus de la barre d'outils Formulaires par des boutons ActiveX (barre d'outils Contrôles), beaucoup plus maniables en VBA.

Espérant avoir répondu.

Cordialement.
 

Pièces jointes

  • Copie de TriTableau.xls
    39 KB · Affichages: 53
Dernière édition:

Gorfael

XLDnaute Barbatruc
Re : Macro de tri pour plusieurs plages

Salut Goose et le forum
Je sais que c'est nul, mais si tu t'obligeais à déclarer toutes variables, ça n'arriverait pas !
Code:
Sub Insertion()
Dim [COLOR=red]derlig[/COLOR] As Long
[COLOR=red]derligne[/COLOR] = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row
Macro
Code:
Sub Insertion()
Dim DerLig As Long, PremLig As Long
DerLig = ActiveSheet.Shapes(Application.Caller).TopLeftCell.Row - 1
'PremLig = DerLig - Range("J" & DerLig )
For PremLig = DerLig To 1 Step -1
    If Range("j" & PremLig) = 1 Then Exit For
Next PremLig

Range("K" & PremLig & ":O" & DerLig).Sort Key1:=Range("L" & PremLig), Order1:=xlDescending, _
                                               Key2:=Range("M" & PremLig), Order2:=xlDescending, _
                                               Key3:=Range("N" & PremLig), Order3:=xlDescending, _
        Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:= _
        xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, _
        DataOption3:=xlSortNormal
End Sub
Ce que j'ai laissé en commentaire me semblait évident jusqu'à ,ce que je teste "CHAMPIONNAT DU MONDE DE BASKETBALL 2010", qui à 6 à la ligne au-dessus du bouton, et 5 lignes de remplies !

Pour éviter les erreurs de frappe :
- je mets une majuscule en début du nom de la variable => quand je valide la ligne de code entrée en minuscule, si la majuscule n'apparaît pas, c'est pas bon !
- J'ai mis déclaration des variables obligatoires, et je les déclare dans le type voulu.

Le nombre d'heures économisé en recherche de bug est impressionnant. Mais il est vrai que je suis mauvais...
A+
 

Discussions similaires

Statistiques des forums

Discussions
312 326
Messages
2 087 313
Membres
103 513
dernier inscrit
adel.01.01.80.19