formateur informatique

Trier un tableau au clic sur un titre de colonne

Accueil  >  Bureautique  >  Excel  >  Excel VBA  >  Trier un tableau au clic sur un titre de colonne
Livres à télécharger


Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :


Inscription Newsletter    Abonner à Youtube    Vidéos astuces Instagram
Sujets que vous pourriez aussi aimer :


Trier au clic

Avec cette nouvelle astuce VBA Excel, nous allons apprendre à ordonner la réorganisation automatique et totale d'un tableau, au simple clic sur l'un de ses entêtes.

Trier un tableau Excel au clic sur un titre de colonne

Sur l'exemple illustré par la capture, l'utilisateur travaille à partir d'une base de données des activités de sorties. Dès qu'il double clique sur un titre de colonne, tout le tableau est complètement réorganisé en exploitant cet entête comme clé de tri. De plus, vous remarquez qu'une flèche descendante vient se greffer dans l'entête utilisé pour le tri. L'utilisateur garde ainsi la trace des actions. Et nous allons le voir, ce sont quelques triviales lignes de code VBA qui permettent de donner vie à ce mécanisme.

Classeur Excel à télécharger
Nous proposons d'appuyer les travaux sur un classeur Excel hébergeant cette base de données à réorganiser à souhait. Nous découvrons effectivement la base de données des idées de sorties entre les colonnes B et E. Les entêtes de colonnes sont inscrits en ligne 3. Si vous déployez la zone Nom en haut à gauche de la feuille, vous remarquez que cette base de données et reconnue sous le nom de plage laBase. Nous exploiterons ce nom dans le code VBA pour simplifier la mise en oeuvre du tri automatique. Si vous faites défiler la feuille vers la droite jusqu'à atteindre la colonne O, vous remarquez la présence du symbole de la flèche descendante en O1. C'est ce symbole que nous utiliserons pour rappeler la colonne utilisée pour le tri.

Code VBA au double clic
Nous devons commencer par créer la procédure capable de déclencher un code VBA au double clic sur l'un des entêtes de colonnes du tableau.
  • Réaliser le raccourci clavier ALT + F11 pour basculer dans l'éditeur VBA Excel,
  • Dans l'explorateur de projet sur la gauche, double cliquer sur l'élément Feuil1 (bdd),
C'est ainsi que nous affichons la feuille de code VBA associée à la feuille Excel hébergeant la base de données des activités de sorties. Certes, elle est encore vierge pour l'instant.
  • En haut de cette feuille de code, déployer la liste déroulante de gauche,
  • Dans les propositions, cliquer sur l'objet Worksheet,
Il désigne la feuille et cette action a pour effet de créer la procédure événementielle Worksheet_SelectionChange. Ce n'est pas le changement de sélection qui nous intéresse mais le double clic dans l'une des cellules de la feuille.
  • Déployer la liste déroulante de droite, puis choisir l'événement BeforeDoubleClick,
Déclencher un code VBA Excel au double clic sur une cellule de la feuille

Cette fois, nous créons la procédure événementielle Worksheet_BeforeDoubleClick. C'est bien elle qui nous intéresse. De fait, la précédente peut être effacée.
  • Entre les bornes de cette nouvelle procédure, ajouter la déclaration suivante :
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim col As Byte

End Sub


Nous déclarons la variable col comme un entier court (Byte). Nous l'exploiterons pour parcourir les entêtes du tableau pour les réinitialiser (Sans la flèche) lors d'un double clic sur une nouvelle colonne de tri.

Vérifier la cellule cliquée
La suite du traitement ne doit être entreprise que lorsque la cellule double cliquée est bien celle d'un entête. Il s'agit d'une case nécessairement placée sur la ligne 3 entre les colonnes B et E, soit entre les indices 2 et 5. Un paramètre très important est transmis à la procédure au moment du double clic. Il se nomme Target. Il désigne la cellule double cliquée. Nous allons l'exploiter pour vérifier ses coordonnées.
  • A la suite du code VBA, créer l'instruction conditionnelle suivante :
...
If Target.Row = 3 And Target.Column >= 2 And Target.Column <= 5 Then

End If
...


C'est un très logique triple critère que nous organisons sur les coordonnées de la cellule cliquée (Target). Nous vérifions qu'elle est bien placée en ligne 3 (Row = 3). Dans le même temps (And), nous nous assurons qu'elle est bien située entre les colonnes B et E (Column >= 2 And Target.Column <= 5).

Trier sur la colonne cliquée
Nous le savons déjà, c'est la méthode Sort appliquée sur une plage de cellules (Range) qui permet de trier les données en fonction d'une clé de tri, soit la colonne cliquée. Ce renseignement nous est encore fourni par l'objet Target. Mais il doit être transformé en plage ou plutôt en cellule. En effet et jusque-là, il représente l'objet de la cellule cliquée.
  • Dans l'instruction conditionnelle, ajouter la ligne VBA suivante :
...
Range("laBase").Sort Range(Target.Address), Header:=xlYes
...


En premier argument de la méthode Sort, appliquée sur la base de données (laBase), nous fournissons la cellule pour la clé de tri. Nous transformons les coordonnées de l'entête cliqué (Target.Address) en cellule (Range). Puis, nous informons que les entêtes ne doivent pas être considérés dans cette réorganisation (Header:=xlYes). Ils doivent rester en haut du tableau. Nous accédons directement à ce paramètre dont ce n'est pas la place naturelle dans l'énumération, en l'appelant par sa valeur d'attribut (Header).

Réinitialiser les entêtes
A chaque clic sur un nouvel entête pour organiser un nouveau tri, le marqueur de la flèche du précédent tri doit être effacé. Le plus simple consiste à parcourir tous les entêtes pour éliminer la potentielle présence de la flèche.
  • A la suite du code de l'instruction conditionnelle, créer la boucle suivante :
...
For col = 2 To 5
Cells(3, col).Value = Replace(Cells(3, col), " " & [O1].Value, "")
Next col
...


Nous parcourons les colonnes de la B à la E (col = 2 To 5). Pour chaque entête sur cette ligne 3 (Cells(3,col).Value), nous exploitons la fonction Replace sur cette même cellule pour remplacer la flèche précédée d'un espace (" " & [O1].Value) par une chaîne vide. Bref, si elle existe, nous la supprimons.

Marquer la colonne du tri
Une fois tous les entêtes réinitialisés, nous devons marquer la colonne utilisée pour le tri.
  • A la fin de l'instruction conditionnelle, ajouter les deux lignes VBA suivantes :
...
Target.Value = Target.Value & " " & [O1].Value
[A1].Select
...


Sur la cellule double cliquée (Target), après un espace " ", nous ajoutons (&) le symbole de la flèche que nous allons prélever en cellule O1. Il est temps de tester le code de tri automatique.
  • Enregistrer les modifications (CTRL + S) et basculer sur la feuille Excel (ALT + Tab),
  • Double cliquer sur l'un des entêtes de la base de données,
Trier un tableau au clic sur un entête en VBA Excel

Désormais et comme vous pouvez l'apprécier, à chaque double clic sur l'un des entêtes du tableau, les données sont réorganisées en priorité sur la rangée cliquée. Toutes les données attachées suivent naturellement, pour un code VBA très allégé :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim col As Byte

If Target.Row = 3 And Target.Column >= 2 And Target.Column <= 5 Then
Range("laBase").Sort Range(Target.Address), Header:=xlYes
For col = 2 To 5
Cells(3, col).Value = Replace(Cells(3, col), " " & [O1].Value, "")
Next col

Target.Value = Target.Value & " " & [O1].Value
[A1].Select
End If

End Sub


 
Sur Facebook
Sur Youtube
Les livres
Contact
Mentions légales



Abonnement à la chaîne Youtube
Partager la formation
Partager sur Facebook
Partager sur Twitter
Partager sur LinkedIn