formateur informatique

Couleurs automatiques des lignes pour compter les absences

Accueil  >  Bureautique  >  Excel  >  Excel VBA  >  Couleurs automatiques des lignes pour compter les absences
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    Vidos astuces Instagram
Sujets que vous pourriez aussi aimer :


Densité de couleur et absences

Dans les pas du développement précédent, nous souhaitons mettre le VBA Excel à contribution pour gérer un planning rendant instantanément compte de l'assiduité des salariés et des collaborateurs.

Planning des absences avec densités de couleurs en VBA Excel

Sur l'exemple illustré par la capture, les absences des salariés à des stages sont marquées par des croix (x). Au lieu de stages, il pourrait bien sûr s'agir des jours d'un mois de travail. En fonction de la répétition des absences pour un même salarié, la densité de couleur appliquée n'est pas la même. Elle dépend d'un barème, placé sur la droite, dans une colonne intitulée Notation. A chaque nouvelle inscription d'une croix, c'est un code VBA Excel qui se déclenche automatiquement, pour compter les absences et récupérer la couleur correspondante dans le barème, par recherche approchante. Plus la couleur de la ligne tire vers le rouge, plus le verdict visuel est parlant. L'opérateur sait a priori à qui il a à faire.

Comme pour le cas précédent, cette solution VBA est beaucoup plus avantageuse que des règles de mise en forme conditionnelle. Elle permet de considérer facilement de nombreux autres paliers. De plus, sans le VBA, il faudrait bâtir autant de règles de mise en forme conditionnelle qu'il y a de tranches d'absences à considérer.

Classeur Excel à télécharger
Pour développer cette nouvelle solution, nous suggérons d'appuyer l'étude sur un classeur offrant cette grille et ce barème. Nous retrouvons bien la grille des absences au centre de l'écran. Les couleurs sont déjà appliquées. Nous les ferons varier lorsque le code VBA sera en place pour considérer le tarif coloré à appliquer en fonction du nombre de croix inscrites correspondant aux indications fournies en colonne O.

Si vous déployez la zone Nom en haut à gauche de la feuille Excel, vous constatez que les cellules de la grille des absences sont reconnues sous l'intitulé absences. La plage des barèmes colorés est quant à elle reconnue sous l'intitulé notations.

La procédure et les variables
Nous devons commencer par déclarer les variables qui nous permettront de piloter les plages de cellules et de les questionner.
  • Réaliser le raccourci clavier ALT + F11 pour basculer dans l'éditeur VBA Excel,
  • Dans l'explorateur sur la gauche, double cliquer sur l'élément Feuil1(couleursAbsences),
  • En haut de la feuille de code, déployer la liste déroulante de gauche,
  • Dans les propositions, choisir l'objet Worksheet,
  • Déployer alors la liste déroulante de droite,
  • Dans les propositions, choisir l'événement Change,
C'est ainsi que nous créons la procédure événementielle Worksheet_Change. Son code est destiné à se déclencher dès qu'une modification est opérée dans la feuille Excel.
  • Dans les bornes de cette procédure, ajouter les déclarations suivantes :
...
Dim i As Byte: Dim nb As Byte: Dim pos As Byte
Dim tabCoul As Range: Dim listNotes As Range
...


Nous typons les trois premières variables comme des entiers courts (Byte). Nous les utiliserons respectivement pour parcourir les lignes du tableau, compter les croix et trouver le barème correspondant dans la plage intitulée notations. Nous typons les deux variables suivantes comme des plages de cellules (Range). Nous les utiliserons pour représenter celles de la feuille Excel.

Coordonnées de la cellule modifiée
La suite du traitement ne doit être entreprise que si nous avons la certitude que la cellule modifiée appartient bien à la plage des absences. Pour cela, une astuce efficace existe et nous l'avons présentée à l'occasion des volets précédents. Elle concerne la méthode Intersect de l'objet Application.
  • A la suite du code, créer l'instruction conditionnelle suivante :
...
If Not Application.Intersect([absences], Target) Is Nothing Then
Set tabCoul = [absences]: Set listNotes = [notations]

End If
...


Nous testons le croisement de la plage des absences ([absences]) avec la ou les cellules modifiées sur la feuille. C'est l'objet Target, passé en paramètre de la procédure qui la, ou les représente. Ensuite, nous initialisons les deux objets Range sur les deux plages nommées de la feuille.

Parcourir les lignes du tableau
Maintenant, ce sont toutes les lignes du tableau que nous devons parcourir, pour réactualiser les couleurs en fonction de la ou des modifications effectuées. En effet, rien n'empêche l'utilisateur d'influer dans une colonne, sur plusieurs lignes à la fois pour inscrire des croix. Nous devons donc engager une boucle partant de la première ligne pour rejoindre la dernière.
  • A la suite du code de l'instruction conditionnelle, créer la boucle For Next suivante :
...
For i = 1 To tabCoul.Rows.Count

Next i
...


tabCoul est l'objet qui représente la plage des absences. La propriété Rows est la collection de ses lignes qui permet d'atteindre la propriété enfant Count. Vous l'avez compris, cette dernière renvoie le nombre de lignes de cette plage que nous parcourons grâce à cette boucle.

Compter et repérer les absences
Pour chacune de ces lignes, nous devons maintenant compter le nombre de croix et repérer le palier concordant dans la plage nommée notations. Nous devons dégainer les fonctions Nb.Si et Equiv. Mais en anglais, donc en VBA, elles ne portent pas ces noms. Elles se nomment CountIf et Match. C'est ainsi que nous devons les appeler par le code.
  • Dans la boucle, ajouter les deux lignes VBA suivantes :
...
nb = Application.CountIf(Application.Index(tabCoul, i, 0), "x")
pos = Application.Match(nb, listNotes, 1)
...


Nous enclenchons donc la fonction Nb.Si (CountIf), sur la ligne en cours d'analyse (i) renvoyée par la fonction Index, appliquée sur le tableau des absences (tabCoul). Le critère de dénombrement est celui de la croix (x). Le décompte est retourné, pour chaque ligne analysée, dans la variable nb. Sur ce décompte, nous enclenchons la fonction Equiv (Match) pour trouver la valeur la plus proche, directement inférieure (1), dans la plage notations (listNotes). Cette position est enregistrée dans la variable pos.

Répercuter les densités de couleurs
Si la fonction Equiv (Match) ne répond pas par une erreur, nous savons qu'une concordance a été trouvée avec un palier dans la grille intitulée notations. Nous devons alors pointer sur cette position pour récupérer les couleurs et les répliquer sur la ligne en cours d'analyse dans la plage intitulée absences.
  • Toujours à la suite du code de la boucle, créer l'instruction conditionnelle suivante :
...
If Not IsError(pos) Then
With Application.Index(tabCoul, i, 0)
.Interior.Color = listNotes(pos).Interior.Color
.Font.Color = listNotes(pos).Font.Color
End With
End If
...


Si une position a bien été trouvée (If Not IsError(pos) Then), pour la ligne en cours dans la plage des absences (With Application.Index(tabCoul, i, 0)), nous prélevons les attributs de couleur de la grille de notation pour les répliquer sur cette ligne du tableau des absences. Pour cela et nous avions découvert cette astuce à l'occasion du volet précédent, nous pointons sur la ligne de la plage en la mentionnant entre parenthèses.

Désormais, après avoir enregistré, au gré des croix que vous ajoutez ou supprimez dans le tableau des absences, vous constatez que les couleurs varient en fonction des paliers atteints. C'est ainsi que l'administrateur peut accéder à une synthèse visuelle instantanée.

Synthèse des absences avec densités de couleurs en VBA Excel

Si vous souhaitez influer sur plusieurs cases à la fois, il suffit de les sélectionner ensemble, de saisir une croix et de la valider par le raccourci CTRL + Entrée pour répandre cette dernière sur toutes les cellules sélectionnées. C'est alors le code VBA qui prend le relai pour analyser chaque ligne du planning des absences pour réajuster les densités de couleur en fonction des absences constatées, en corrélation avec la grille de notation.

 
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