formateur informatique

Colorier une ligne sur deux dans un tableau en VBA Excel

Accueil  >  Bureautique  >  Excel  >  Excel VBA  >  Colorier une ligne sur deux dans un tableau en VBA Excel
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 :


Colorier une ligne sur deux

Dans les pas de l'astuce VBA Excel précédente, nous souhaitons ajouter une autre fonctionnalité intéressante au tableur, si toutefois vous choisissez d'enregistrer son code dans le modèle (Le Personal.xlsb). Un clic sur un bouton doit automatiquement colorier une ligne sur deux dans un tableau présélectionné. L'objectif est de simplifier la lecture et l'interprétation des tableaux longs.

Classeur Excel à télécharger
Pour développer ce nouvel outil, nous suggérons d'appuyer l'étude sur un classeur offrant un tableau long, donc dédié. Nous découvrons un tableau recensant des activités de sorties. Il est fait de cinq colonnes et de plusieurs centaines de lignes. Sur la droite de ce tableau, vous notez la présence d'un bouton ActiveX intitulé Colorier.

Long tableau Excel à colorier une ligne sur deux en VBA

Ce bouton est déjà associé à une procédure de code mais elle est encore vide pour l'instant ou presque, et nous allons vite nous en rendre compte.

La procédure attachée au bouton
Pour terminer la présentation, nous proposons d'atteindre cette procédure attachée à ce bouton.
  • Réaliser le raccourci clavier ALT + F11 pour basculer dans l'éditeur VBA Excel,
Nous affichons ainsi la feuille de code VBA associée à la feuille de ce classeur. Nous y découvrons la présence de la procédure colorier_Click. Effectivement, elle n'est pas tout à fait vide.

Private Sub colorier_Click()


'.Interior.ThemeColor = xlThemeColorAccent6
'.Interior.TintAndShade = 0.799981688894314
'.Font.ThemeColor = xlThemeColorAccent6
'.Font.TintAndShade = -0.249977111117893
End Sub


Quelques lignes sont en commentaires puisqu'elles sont préfixées d'une apostrophe. Elles sont issues d'une macro automatique pour attribuer une couleur de fond et une couleur de police personnalisées aux cellules, ici en l'occurrence aux cellules des lignes intercalées. Comme les suites de chiffres sont complexes à reproduire, nous jugeons pertinent de livrer un code lui-même offert par Excel.

Les variables VBA
Il est temps de mettre les mains dans le code VBA. Et comme il est de coutume, nous devons commencer par déclarer les variables utiles au développement. Elles sont au nombre de deux. La première doit piloter le tableau sélectionné par l'utilisateur avant son clic sur le bouton. La seconde doit permettre de parcourir ses lignes.
  • Dans la procédure, avant les commentaires, ajouter les déclarations et l'affectation suivante :
...
Dim tableau As Range: Dim ligne As Range

Set tableau = Selection
...


Nous créons deux objets de type Range (tableau et ligne) pour représenter des plages ou à défaut une seule ligne ou encore une seule cellule. Grâce à l'objet VBA Selection, nous initialisons (Set) le premier objet sur la sélection, donc sur le tableau sur lequel il est question de formater une ligne sur deux.

Parcourir chaque ligne du tableau
Maintenant que le tableau est matérialisé, nous pouvons engager une boucle For Each pour parcourir chacune de ses lignes. Nous le verrons, l'idée sera de déceler les lignes paires et les lignes impaires pour savoir quelles sont celles à faire ressortir une fois sur deux. A ce titre, le VBA propose l'opérateur Mod qui s'exploite un peu comme la fonction du même nom dans Excel. Il réalise la division entre deux nombres (Ici, l'indice de ligne par le chiffre 2). Il indique s'il existe un reste à cette division. Si tel est le cas, nous saurons qu'il s'agit d'une ligne impaire.
  • A la suite du code, ajouter les lignes VBA suivantes :
...
If tableau.Rows.Count > 5 Then

For Each ligne In tableau.Rows

Next ligne

Else
MsgBox "Vous devez sélectionner toutes les cellules (CTRL + A) du tableau à formater.", vbInformation
End If
...


Nous engageons tout d'abord un test sur le nombre de lignes que compte le tableau sélectionné. Arbitrairement mais judicieusement, s'il n'offre pas plus de cinq lignes (tableau.Rows.Count > 5), nous jugeons que le traitement n'en vaut pas la peine. Nous l'avortons (else) et nous en informons l'utilisateur par le biais d'une boîte de dialogue grâce à la fonction VBA MsgBox.

Lorsque le critère est honoré en revanche, nous engageons une boucle parcourant chaque ligne (For Each ligne) du tableau (In tableau.Rows).

Détecter les lignes impaires
Grâce à cette boucle, nous allons maintenant pouvoir analyser l'indice de chaque ligne parcourue. S'il s'agit d'une ligne impaire et qu'il ne s'agit pas de la ligne d'entête, celle des titres de colonnes, nous devons la formater. Dans le cas contraire, nous ne devons pas la transformer. Et comme nous l'annoncions précédemment, nous devons engager l'opérateur VBA Mod pour réaliser la division par 2 sur l'indice de la ligne en cours. Si un reste est retourné, nous saurons qu'il s'agit d'une ligne impaire et nous pourrons agir en conséquence.
  • Dans la boucle For Each, ajouter le code VBA suivant :
...
If ligne.Row Mod 2 = 1 And ligne.Row <> tableau.Cells(1, 1).Row Then
With ligne

End With
End If
...


Nous engageons donc un double test dans une instruction conditionnelle. Nous vérifions tout d'abord qu'il existe un reste à la division du numéro de la ligne en cours d'analyse par le chiffre 2, signifiant qu'il s'agit d'une ligne impaire. Dans le même temps, nous nous assurons que cette ligne n'est pas la ligne d'entête du tableau. Elle doit garder sa mise en forme. Pour cela, nous exploitons une astuce découverte lors du volet précédent en appliquant l'objet Cells sur la plage de cellules représentant le tableau. De cette manière, nous pointons relativement sur ses cellules. Dans ce contexte, l'objet Cells(1, 1), ne désigne pas la cellule de la première ligne et de la première colonne de la feuille. Il pointe sur la première cellule du tableau. Nous exploitons alors la propriété Row sur cette cellule pour la comparer à la ligne en cours d'analyse par la boucle.

Enfin et lorsque ces conditions sont honorées ensemble (And), nous engageons la construction d'un bloc With sur l'objet représentant la ligne en cours. De cette manière et comme vous le savez, sans répéter le nom de l'objet, nous allons pouvoir lister ses attributs à régler.

Mise en forme des lignes impaires
Maintenant que les lignes impaires sont décelées, il ne nous reste plus qu'à coller les réglages actuellement en commentaires dans le bloc With. Nous changerons ainsi l'aspect de ces lignes pour les différencier des lignes paires avec des teintes de vert.
  • Sélectionner le bloc des instructions en commentaires,
  • Dans la barre d'outils en haut de l'éditeur, cliquer sur le bouton Ne pas commenter ce bloc,
Vous pouvez aussi retirer les apostrophes en préfixes manuellement.
  • Couper ces lignes (CTRL + X) puis les coller (CTRL + V) dans le bloc With,
Il est maintenant temps de tester le fonctionnement de ce code.
  • Enregistrer les modifications (CTRL + S) et basculer sur la feuille (ALT + Tab),
  • Cliquer dans l'une des cellules du tableau, par exemple D8,
  • Puis, réaliser le raccourci clavier CTRL + A pour le sélectionner complètement,
  • Dès lors, cliquer sur le bouton Colorier,
Instantanément et comme vous pouvez l'apprécier, toutes les lignes impaires à l'exception de la ligne d'entête, se parent d'une couleur verte pour produire une alternance simplifiant considérablement le repérage dans ce tableau dense.

Alterner les couleurs des lignes dans un tableau long en VBA Excel

Une fois encore, si vous collez ce code dans un module du modèle (Personal.xlsb) et que vous l'associez à un bouton dans un ruban personnalisé, cet outil sera disponible pour produire ces alternances sur n'importe quel tableau de n'importe quel classeur Excel.

Et le code VBA que nous avons bâti pour un résultat utile et efficace reste relativement simple :

Private Sub colorier_Click()
Dim tableau As Range: Dim ligne As Range

Set tableau = Selection

If tableau.Rows.Count > 5 Then

For Each ligne In tableau.Rows
If ligne.Row Mod 2 = 1 And ligne.Row <> tableau.Cells(1, 1).Row Then
With ligne
.Interior.ThemeColor = xlThemeColorAccent6
.Interior.TintAndShade = 0.799981688894314
.Font.ThemeColor = xlThemeColorAccent6
.Font.TintAndShade = -0.249977111117893
End With
End If
Next ligne

Else
MsgBox "Vous devez sélectionner toutes les cellules (CTRL + A) du tableau à formater.", vbInformation
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