Pour partager cette vidéo sur les réseaux sociaux ou sur un site, voici son url :
Sujets que vous pourriez aussi aimer :
Tâches à faire - ToDoList
Dans ce nouveau volet, nous allons découvrir comment construire un petit
gestionnaire capable de rendre compte de l'
état d'avancement global des tâches à accomplir.
Sur l'exemple illustré par la capture, lorsque l'utilisateur
double clique dans la
colonne status en regard d'une
tâche à accomplir , une
petite coche apparaît pour marquer la ligne comme accomplie. Dans le même temps, cette même ligne se pare automatiquement d'une couleur bleue de confirmation. De plus, une
petite barre de progression évolue pour rendre compte en pourcentage de l'
état d'avancement global des projets ou actions.
Classeur Excel à télécharger
Pour la mise en place de la solution, nous suggérons d'appuyer l'étude sur un
classeur Excel offrant déjà le
tableau des tâches avec des calculs de synthèse et cette
barre de progression .
Nous découvrons ainsi le tableau des tâches à réaliser. Certaines sont d'ailleurs déjà cochées, donc accomplies. Sur la droite, vous notez la présence de deux petits tableaux.
Le premier fixe les règles tandis que le second réalise les
calculs de synthèse pour rendre compte de l'
état d'avancement global , au fil des doubles clics de l'utilisateur dans la
colonne status . D'ailleurs, la
barre de progression se nourrit du résultat final pour rendre compte visuellement cette fois. Cette
barre de progression n'est autre qu'un
graphique en barres horizontales . C'est sa présentation qui a été travaillée. Le
symbole de la coche est inscrit grâce à la lettre
ü dans la
police Wingdings .
Bien sûr à ce stade, si vous double cliquez dans l'une des cases de la
colonne status , rien ne se produit encore. Vous pouvez bien sûr inscrire manuellement la coche, mais ce n'est pas très ergonomique.
Gérer l'événement du double clic
Pour débuter et nous allons le découvrir, un certain nombre de
gestionnaires d'événements sont disponibles avec une
feuille d'un classeur . Cela signifie qu'il est tout à fait possible d'intercepter en temps réel les
actions de l'utilisateur , par le
code VBA .
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 (Taches) ,
Ainsi, nous affichons la
feuille de code VBA qui lui est associée, au centre de l'écran. Naturellement, elle est vierge à ce stade.
Déployer la première liste déroulante en haut de l'éditeur,
Dans la liste, choisir l'objet Worksheet ,
Cette action a pour effet de créer la
procédure événementielle Worksheet_SelectionChange . Ce n'est pas celle qui nous intéresse. En effet, nous ne souhaitons pas engager des actions au changement de sélection.
Déployer la seconde liste déroulante sur la droite,
Dans la liste, choisir l'événement BeforeDoubleClick ,
Ainsi, nous créons la
procédure événementielle Worksheet_BeforeDoubleClick .
De fait la précédente procédure n'étant pas utile, il apparaît opportun de l'effacer. Vous l'avez compris, le code de cette nouvelle procédure s'exécutera au
double clic sur n'importe quelle cellule de la feuille nommée Taches. Mais seuls les
doubles clics dans la
colonne status nous intéressent.
Vérifier la cellule double cliquée
Une
plage nommée désigne les cellules de la
colonne status . Il s'agit du
nom status . Vous pouvez le vérifier en déployant la
zone Nom en haut à gauche de la
feuille Excel .
VBA offre une
fonction tout à fait intéressante pour savoir si une cellule désignée appartient bien à une plage de cellules. Cette
fonction se nomme
Intersect . Et la cellule double cliquée est représentée par la variable Target passée en argument de la
procédure événementielle Worksheet_BeforeDoubleClick .
Dans les bornes de la procédure , ajouter les lignes de code VBA suivantes :
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = False
If Not Intersect([Status], Target) Is Nothing Then
MsgBox Target.Address
End If
End Sub
Nous testons le croisement entre la plage de la colonne status ([Status]) et la cellule double cliquée (Target). Grâce à la double négation (Not Is Nothing), nous réalisons le test consistant à savoir si cette cellule est bien située dans les bornes de la plage. Et pour réaliser une vérification, nous affichons les coordonnées de cette cellule dans une boîte de message, grâce à la
fonction VBA MsgBox .
Enregistrer les modifications (CTRL + S) et basculer sur la feuille Excel (ALT + Tab),
Réaliser tout d'abord un double clic sur une cellule située en dehors de la colonne status,
Comme vous le constatez, il ne se produit rien. Pourtant l'événement est bien intercepté. Mais comme la cellule n'appartient pas à la plage souhaitée, l'action est ignorée.
Réaliser maintenant un double clic sur l'une des cellules de la colonne status ,
Cette fois et comme vous pouvez l'apprécier, l'action est considérée. Pour preuve, les
coordonnées de la cellule double cliquée sont restituées dans une petite boîte de dialogue.
Empêcher la saisie au double clic
Par contre et vous l'avez remarqué, la saisie s'active dans la cellule double cliquée puisque le point d'insertion clignote. Il existe un subterfuge en
VBA Excel pour abandonner le mode modification au double clic. Il consiste à exploiter la seconde variable passée en paramètre de la procédure. Elle se nomme
Cancel . Et nous l'avons d'ailleurs initialisée Ã
False .
Passer la ligne du MsgBox en commentaire en la préfixant d'une apostrophe,
A la suite du code, basculer l'état de la variable comme suit :
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = False
If Not Intersect([Status], Target) Is Nothing Then
'MsgBox Target.Address
Cancel = True
End If
End Sub
Enregistrer les modifications (CTRL + S) et basculer sur la feuille Excel (ALT + Tab),
Double cliquer de nouveau sur une cellule de la colonne status ,
Comme vous pouvez l'apprécier, cette fois le mode saisi n'est pas activé, il est abandonné (
Cancel = True ). Et dans le même temps, la cellule est bien activée.
Cocher ou décocher
Désormais au double clic, si la coche n'est pas présente, nous devons l'inscrire. Si elle existe, nous devons l'enlever. En effet, il n'est pas interdit qu'une action ou un projet jugé terminé en première instance soit révisé. Il suffit donc de tester le contenu de la cellule double cliquée pour
basculer son état . Et pour cela, une
instruction conditionnelle est nécessaire.
A la suite du code, créer la nouvelle instruction conditionnelle suivante :
Private Sub Worksheet_BeforeDoubleClick(ByValTarget As Range, Cancel As Boolean)
Cancel = False
If Not Intersect([Status], Target) Is Nothing Then
'MsgBox Target.Address
Cancel = True
If Target.Value <> [G5].Value Then
Target.Value = [G5].Value
Else
Target.Value = ""
End If
End If
End Sub
La
cellule G5 porte la coche dans le tableau des règles. Si la cellule double cliquée ne porte pas la même valeur, nous lui affectons (Target.Value = [G5].Value). En d'autres termes, nous inscrivons le
symbole de la coche . Dans le cas contraire (else), nous le supprimons (Target.Value = "").
Enregistrer les modifications (CTRL + S) et basculer sur la feuille Excel (Alt + Tab),
Double cliquer dans la colonne status sur une tâche non accomplie,
Comme vous pouvez le voir, en même temps que la coche s'inscrit dans la case, la
barre de progression évolue et la ligne de l'action terminée change de couleur.
C'est une règle de mise en forme conditionnelle préconçue qui scrute notamment la présence de la coche et qui permet d'influer sur l'apparence de la ligne ainsi modifiée au double clic.