[VIDEO] Créer une check-list dynamique (todo, courses, fournitures scolaires, vacances, mariage...)
La todo-list (ou liste des choses à faire) est l’outil indispensable à toute personne qui souhaite organiser de manière factuelle les tâches à effectuer. Elle permet de présenter visuellement ce qui doit être effectué, et ce qui l’est déjà. Dans cet article, nous allons voir comment créer très simplement un tel outil. En plus de sa fonction première de todo-list, l’outil que nous allons mettre en place va également permettre de gérer une liste de courses, une liste des affaires à préparer avant de partir en vacances, une liste des invités pour un mariage etc… Tout ceci directement dans Excel !
Pour suivre ce tuto dans les meilleurs conditions, je vous invite à télécharger le fichier dans le lien disponible en fin d’article (cliquez ici pour y accéder).
1. Préparatifs
Avant de créer notre check-list, nous allons voir trois points importants.
1.1. Le format *.xlsm
Tout d'abord lorsque nous enregistrons notre fichier, nous devons nous assurer que celui-ci est bien enregistré en tant que fichier *.xlsm. Ce format permet d’enregistrer également les macro-commandes que nous allons développer au sein de notre application.
1.2. Affichage de l’onglet développeur
Il faut également vérifier que l'onglet développeurs est bien présent dans le ruban, afin de pouvoir lancer Visual Basic (l’outil de développement des macro-commandes).
Si ce n'est pas le cas, la procédure pour l’afficher est la suivante :
- Rendez-vous dans le menu « Fichier »,
- Puis « Options »,
- Dans la rubrique « Personnaliser le ruban », cochez la case « Développeur », si ce n'est pas déjà fait.
- Puis validez en cliquant sur le bouton « OK »
1.3. Les caractères spéciaux
Pour la création de notre check-list, nous allons utiliser des caractères spéciaux représentant les deux états de la case : vide et cochée.
Pour identifier ces caractères spéciaux, rendez-vous dans l'onglet « Insertion » du ruban, puis « Symbole », afin d'afficher la fenêtre des caractères spéciaux.
Dans le menu « Police », nous allons sélectionner la police « Wingdings 2 ». C’est dans ce jeu de caractères que nous allons sélectionner dans un premier temps la case cochée. En double-cliquant dessus, elle s'insère automatiquement dans la barre des formules. Puis nous allons sélectionner la deuxième, qui est la case vide.
Une fois ces deux caractères insérés dans la barre des formules, nous pouvons fermer la fenêtre en cliquant sur le bouton « Fermer ».
Ensuite, lorsque nous validons la formule avec la touche [Entrée] du clavier, nous pouvons constater que les cases ont disparues et qu'à la place Excel nous affiche est un symbole Livre (« £ »), et une lettre « R » majuscule.
Pas de panique !
Pour retrouver nos cases, il suffit de modifier la police de la cellule en « Wingdings 2 » (qui se trouve tout en bas de la liste).
Maintenant que nous savons comment insérer les caractères spéciaux représentant nos listes (en utilisant la police « Wingdings 2 » et les caractères « £ », ainsi que « R »), nous pouvons supprimer la cellule.
2. Création de la check-list
2.1. Création du tableau de données
Nous pouvons à présent commencer à proprement parler la mise en place de notre check-list. Pour cela nous allons sélectionner deux cellules (une cellule de la colonne « A » et sa voisine de la colonne « B »), puis dans l'onglet « Insertion », nous allons cliquons sur « Tableau » pour transformer ces deux cellules en un tableau de données.
Ce tableau nous permettra d’ajouter simplement de nouvelles lignes sur notre check-list, uniquement en saisissant un nouvel élément sur la ligne juste en dessous.
Les en-têtes de colonnes ne sont pas vraiment explicites (Colonne 1 et Colonne 2), nous allons leur donner des titres plus parlants :
- Dans la première colonne nous allons insérer les cases à cocher, nous allons donc l'appeler « Fait »,
- Tandis que dans la seconde colonne, nous allons venir saisir nos tâches, nous allons donc l’appeler… « Tâches » !
Pour pouvoir appeler rapidement le tableau que nous venons de créer, ainsi que ces colonnes, nous allons lui donner un nom. Dans l'onglet « Création » du ruban qui ne s'affiche que lorsque nous sélectionnons une des cellules du tableau, nous allons venir saisir le nom à lui affecter dans la zone « Nom du tableau ».
Appelons par exemple notre tableau « liste » (n’oublions pas de valider en appuyant sur la touche [Entrée]).
2.2. Saisie de la première tâche… à la main !
Pour l'exemple nous allons insérer une première tâche à la main.
Pour cela :
- Sur la première ligne de notre tableau, nous allons saisir le nom de la tâche dans la colonne « Tâches » (par exemple « Faire les courses »,
- Dans la colonne « Fait », nous allons insérer la première case :
- Saisissons simplement le symbole « £ » (qui est le symbole qui permet d’insérer la case vide),
- Puis nous modifions la police de la colonne du tableau pour « Wingdings 2 »
- Et enfin, nous pouvons centrer la case dans la cellule
Voilà, notre première tâche est maintenant insérée !
3. Automatisation du fonctionnement de la check-list
Il est temps d’automatiser le fonctionnement de notre check-list. Pour cela, nous allons procéder en deux temps :
- Dans un premier temps nous allons vouloir faire en sorte que lorsque l'utilisateur clique sur la cellule qui contient une case, celle-ci se coche, puis se décoche automatiquement,
- Puis dans un second temps, lorsque nous viendrons insérer un nouvel élément dans notre tableau, nous ferons en sorte qu’une nouvelle case (vide par défaut) s’ajoute automatiquement.
Pour cela nous allons nous rendre dans l'outil développement de Microsoft Excel, en cliquant sur le bouton « Visual Basic » de l’onglet « Développeur » du ruban.
L’outil de développement d’Excel s’affiche alors, et nous allons pouvoir saisir nos macro-commandes, directement dans la feuille de calcul. Dans la partie gauche « Projet – VBAProjet », nous double-cliquons sur la feuille de calcul afin de pouvoir y insérer du code.
3.1. Cocher et décocher automatiquement
Pour rappel la première opération que nous allons mettre en place consiste à modifier de manière automatisée la case lorsque nous cliquons sur la cellule dans laquelle celle-ci est insérée. Pour cela nous allons utiliser l'événement SelectionChange de Worksheet :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
End Sub
Un évènement est une instruction qui va être exécutée à chaque fois qu’une action particulière a lieu sur une feuille de calcul (ici l’évènement va être appelé à chaque fois que l’utilisateur clique sur une cellule).
La cellule sélectionnée (ou les cellules s’il y en a plusieurs) va être retournée à l’utilisateur dans la variable « target » (de type range) afin d’être utilisée dans la procédure.
En premier lieu, nous allons vouloir nous assurer que la variable récupérée (« target ») n’est constituée que d'une seule cellule. Et si tel n’est pas le cas, alors nous allons quitter la procédure. Cela va nous éviter tout risque d’erreur si l’utilisateur sélectionne plusieurs cellules à la fois.
Pour cela nous allons effectuer un test avec l'instruction Count appliquée sur notre la variable « target ». Et si le résultat de cette instruction Count est supérieur à 1 alors nous effectuerons un « Exit sub » qui permet de quitter l’instruction, sans rien faire de plus :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
End Sub
Ensuite, nous allons vouloir contrôler que la cellule sélectionnée appartient bien à la colonne « Fait » de notre tableau « _liste ». Pour cela nous allons utiliser l'instruction intersect() de la manière suivante :
If Not Intersect(Target, [liste[Fait]]) Is Nothing Then
End If
Cette instruction nous permet de récupérer une plage constituée par les cellules situées à l’intersection des deux plages comparées :
- « target » dans un premier temps, qui comme nous le savons correspond à la cellule sur laquelle l’utilisateur a cliqué,
- Puis « [_liste[Fait]] » qui correspond à la plage des cellules de la colonne « Fait » de notre liste.
En l’absence de cellule commune à ces deux plages, intersect() renverra pour valeur « nothing ». Nous cherchons donc à savoir si ce résultat est différent (« not…is ») de nothing.
Ensuite, nous allons analyser la valeur de la cellule « target ». Si cette cellule vaut « £ », cela signifie que c’est une case vide, et donc nous allons vouloir la cocher, en lui donnant pour valeur : « R » :
If Not Intersect(Target, [liste[Fait]]) Is Nothing Then
If Target = "£" Then
Target = "R"
Else
Target = "£"
End If
End If
Après avoir modifié la procédure comme nous venons de le voir, nous pouvons tester notre check-list pour constater qu’effectivement lorsque nous cliquons sur une cellule contenue dans la première colonne de notre liste, l’état de la case change pour ajouter ou retirer la coche de la case.
Par contre, nous constatons également au passage l’impossibilité de cliquer deux fois de suite sur une même cellule.
En effet, lorsque nous cliquons plusieurs fois de suite dans la même cellule, la sélection ne change pas et reste toujours sur la même cellule. Nous sommes alors obligés de cliquer sur une autre cellule entre deux clics.
Pour résoudre ce petit inconvénient, une fois que nous aurons coché (ou décoché) la case, nous allons automatiquement modifier la sélection pour la décaler d'une cellule vers la droite. Pour cela modifions notre procédure de la manière suivante :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, [liste[Fait]]) Is Nothing Then
If Target = "£" Then
Target = "R"
Else
Target = "£"
End If
Target.Offset(0, 1).Select
End If
End Sub
Cela reviens à demander à Excel de sélectionner la case obtenue en effectuant un décalage de zéro cellule sur l’axe verticale (la même ligne), et d’une cellule vers la droite sur l’axe horizontale.
Ainsi, la sélection se décale vers la droite automatiquement lorsque nous cliquons sur une des cellules de la colonne « Fait », ce qui fait que nous pouvons cliquer plusieurs fois de suite sur une même coche.
3.2. Ajouter une case vide lors de l’insertion d’une nouvelle ligne
Pour notre exemple, nous avons inséré une première ligne de test « à la main », en saisissant le symbole « £ » pour insérer une case non cochée. Nous allons maintenant vouloir que lorsque nous ajouterons une nouvelle tâche en bas de notre tableau, automatiquement une case non cochée s'ajoute dans la première colonne.
Pour cela nous allons utiliser un autre évènement d’Excel : l'événements Worksheet_Change (), qui est appelé à chaque fois qu'une cellule voit sa valeur modifiée.
Rendons-nous à nouveau dans « Visual Basic », puis dans la liste déroulante en haut à droite, nous choisissons « change ». Automatiquement Excel ajoute une nouvelle procédure :
Private Sub Worksheet_Change(ByVal Target As Range)
End Sub
Comme vous pouvez le constater, ici aussi Excel nous renvoie une variable de type range, qui porte le nom de « target ». Comme précédemment, nous allons commencer par vérifier qu'une seule cellule a été modifiée, en copiant, puis collant la ligne suivante :
If Target.Count > 1 Then Exit Sub
Puis nous allons vérifier que la cellule modifiée appartient effectivement à notre tableau « _liste ». Cette fois-ci nous n’avons pas à nous soucier de la colonne :
If Not Intersect(Target, [liste]) Is Nothing Then
End If
A présent, nous allons nous intéresser à la cellule située aux coordonnées suivantes :
- Sur la même ligne que « target »,
- Sur la première colonne de notre liste (dans notre cas, il s’agit de la première colonne de la feuille de calcul)
Nous allons regarder si cette cellule est vide (donc qu’aucune valeur n’a été saisie), ce qui sera le cas à chaque fois qu’un nouvel enregistrement va être ajouté sur notre liste, et si c’est le cas, alors nous allons lui affecter pour valeur le symbole « £ » (case non cochée) :
If Cells(Target.Row, 1) = "" Then
Cells(Target.Row, 1) = "£"
End If
L’instruction Worksheet_Change au complet doit désormais ressembler à ceci :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, [liste]) Is Nothing Then
If Cells(Target.Row, 1) = "" Then
Cells(Target.Row, 1) = "£"
End If
End If
End Sub
Nous pouvons tester et constater que notre check-list est bien fonctionnelle, nous pouvons en effet :
- Ajouter un nouvel enregistrement en bas de notre liste pour l’alimenter,
- Une case vide s’ajoute alors automatiquement,
- Un clic sur cette case permet de la cocher ou de la décocher
4. Télécharger le fichier d'exemple
Vous pouvez télécharger le fichier d'exemple de cet article en cliquant sur le lien suivant :