Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
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 .
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 ,
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,
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