VBA Tri d'une plage de cellules

Bonjour,

Je maitrise Excel plutôt pas mal... sauf les macros ! Manque de bol, pour finaliser mon document (ci-joint), je pense que je n'ai pas d'autres solutions que de passer par une macro, l'outil Tri ne fonctionnant pas comme je le souhaite.

Sur chaque feuille du classeur, et indépendamment les unes des autres, je voudrais pouvoir trier (du plus grand au plus petit) les colonnes C à M dans le tableau en C4:M17 et les colonnes C à K dans le tableau en C23:K36, sans toucher au reste de la feuille.

Idéalement, l'idée serait que quand je clique sur la cellule C3, les deux tableaux se trient, chacun indépendamment, de la plus grande à la plus petite valeur de leur colonnes C, et que si je reclique, ça se trie de la plus petite à la plus grande valeur. Pareil pour les autres colonnes en cliquant sur les en-têtes de la ligne 3.

J'espère avoir été assez clair, et je suis pas contre des explications sur le rôle de chaque ligne de code VBA, parce que j'aimerai bien apprendre à l'utiliser un jour ou l'autre^^^

Merci d'avance à ceux qui donneront un peu de leur temps pour moi.

Up ^^

Salut gpolin,

Un Gremlin traîne dans le code que j'avais posté!! Je retire tout pour l'instant!

A+

Ah merde, suis arrivé trop tard pour regarder à quoi ça ressemblait^^

Merci déjà du temps passé dessus, en espérant que tu viennes à bout du vilain Gremlin

Salut gpolin,

ton fichier serait-il verrouillé de toutes parts?

Mon code, dans n'importe quel autre fichier, fonctionne sans problème!

Je ne te laisse pas le fichier MAIS, ici, pour fonctionner, il faut :

  • supprimer les cellules fusionnées de ton titre, histoire de garder libre la ligne 2 ;
  • cette ligne doit (peut aussi, mais c'est moins beau!) être réglée ainsi : FONT.COLOR = Blanc ;
  • j'utilise en effet la ligne 2 pour "cacher" les valeurs 1 ou 2 de chaque colonne correspondant au type de tri opéré sur cette colonne (tri ascendant ou descendant), valeur qui change à chaque clic.

A coller dans le module de la feuille 'Clsst Général'.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'
If Not Intersect(Target, Range("C3:M3")) Is Nothing Then
    Target.Offset(-1, 0) = IIf(Target.Offset(-1, 0) = 1, 2, 1)
    iTri = IIf(Target.Offset(-1, 0) = 1, xlAscending, xlDescending)
    sCol = Split(Columns(Target.Column).Address(ColumnAbsolute:=False), ":")(1)
    Range("C4:M17").Sort key1:=Range(sCol & 4), order1:=iTri, Orientation:=xlTopToBottom
    If Target.Column < 12 Then Range("C23:K36").Sort key1:=Range(sCol & 23), order1:=iTri, Orientation:=xlTopToBottom
End If
'
End Sub

A tester sur un fichier "normal"... Inch' Allah!

A+

Mon fichier n'était pas protégé, mais ça ne fonctionnait pas. J'en ai refait un (cf fichier joint), en modifiant un tout petit peu le code, pour que la colonne A, avec les noms des équipes, suivent le mouvement du tri. Par contre, impossible de trier les deux dernières colonnes. Je vois pas pourquoi.

Ensuite, quand je passe sur la feuille "Week1" qui n'a pas la même structure sur les résultats bruts, la macro fout tout en l'air. Une solution.

Rechercher des sujets similaires à "vba tri plage"