formateur informatique

Gestionnaire de tâches en VBA Excel

Accueil  >  Bureautique  >  Excel  >  Excel VBA  >  Gestionnaire de tâches 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 :


Gestionnaire de tâches en VBA Excel

Une fois n'est pas coutume, nous avançons une solution pas totalement aboutie dans ce nouveau chapitre. Mais comme il s'agit d'une astuce, elle ouvre la voie à des développements plus émérites. A l'occasion du volet précédent, nous avons découvert le gestionnaire OnTime de l'objet VBA Application. Il permet d'exécuter des actions bien définies à une heure précise, à la seconde près.

Alerte avec formulaire sur des tâches à exécuter à une heure précise en VBA Excel

Sur l'exemple illustré par la capture, alors que l'utilisateur travaille sur l'une des feuilles du classeur, une alerte apparaît en bas à droite de la fenêtre, comme si elle surgissait telles des sentinelles de Windows. Elle indique que l'échéance d'une tâche programmée est atteinte. C'est un petit formulaire VBA Excel qui se charge de livrer la notification.

Classeur Excel à télécharger
Pour démontrer cette nouvelle astuce, nous suggérons d'appuyer l'étude sur un classeur hébergeant notamment une feuille dans laquelle sont archivés des tâches et des rendez-vous. Mais ce n'est pas tout, il offre aussi quelques parcelles de code VBA. Nous débouchons sur la première feuille du classeur. Elle est quasiment vierge. Elle ne propose aucun tableau.
  • En bas de la fenêtre Excel, cliquer sur l'onglet Taches pour activer sa feuille,
Elle présente un tableau dans lequel sont archivées des tâches à accomplir et des rendez-vous à honorer. Les dates des actions à accomplir sont inscrites en colonne D. Les heures sont archivées en colonne E tandis que la colonne F accueille les délais pour que les rappels se déclenchent en amont. Et dans ces deux dernières colonnes, toutes les données sont naturellement présentées au format Heure.

Tableau Excel des tâches et rendez-vous

L'utilisateur peut ajouter autant d'actions qu'il le souhaite à la suite du tableau. Le code VBA que nous devons construire doit être en mesure de les scruter toutes, quel que soit leur nombre.

Le formulaire de notification
Nous proposons maintenant de découvrir tous les travaux qui sont avancés. Par exemple, le formulaire existe déjà.
  • Réaliser le raccourci clavier ALT + F11 pour basculer dans l'éditeur VBA Excel,
  • Dans l'explorateur de projet sur la gauche, déployer le dossier Feuilles,
  • Dès lors, double cliquer sur l'élément notif,
Formulaire VBA Excel de notification en mode conception

De cette manière, nous affichons le UserForm en mode conception. Il se nomme donc notif. Il est notamment doté de deux étiquettes (contrôles Label). Elles sont respectivement nommées titre et descript. Elles sont destinées à afficher le détail des informations de la tâche ou du rendez-vous dont l'échéance est atteinte.
  • Double cliquer sur un emplacement vide du formulaire,
De cette manière, nous basculons dans la feuille de code VBA qui lui est associée. Et nous découvrons deux procédures de code :

Private Sub ok_Click()
notif.Hide
End Sub

Private Sub UserForm_Activate()
Me.Top = Application.Height - Me.Height
Me.Left = Application.Width - Me.Width
End Sub


La première est attachée à l'unique bouton. Grâce à la méthode Hide, elle se contente de fermer le formulaire sur ordre de l'utilisateur. La seconde se déclenche au chargement du formulaire. Elle exploite les propriétés Top et Left du formulaire pour le positionner discrètement en bas à droite de la fenêtre.

Le code à l'ouverture du classeur
Pour que ces alertes puissent se lancer quotidiennement en respectant les dates et les heures qui sont inscrites dans la seconde feuille, un code VBA doit automatiquement se déclencher à l'ouverture du classeur. Et c'est déjà le cas.
  • Dans l'explorateur de projet sur la gauche, double cliquer sur l'élément ThisWorkbook,
Nous découvrons la présence d'une procédure événementielle attachée à l'ouverture du classeur :

Private Sub Workbook_Open()
Call recolter
End Sub


Elle se contente d'appeler la procédure recolter. Elle existe déjà mais elle est vierge de code. Nous la découvrirons en consultant le module associé à ce classeur.

Analyser les tâches au changement
Ce n'est pas tout. Après l'ouverture du classeur, rien n'empêche l'utilisateur de modifier des rendez-vous ou d'en créer de nouveaux. En conséquence, les gestionnaires d'événements doivent être reconstruits pour s'actualiser. C'est la raison pour laquelle, un code VBA se déclenche déjà dès lors que la moindre modification est observée dans la seconde feuille de ce classeur.
  • Dans l'explorateur de projet, double cliquer sur l'élément Feuil2 (Taches),
Nous découvrons ainsi la procédure événementielle qui lance à son tour l'appel de la fameuse procédure recolter à implémenter :

Private Sub Worksheet_Change(ByVal Target As Range)
recolter
End Sub


Son rôle va consister à parcourir tous les éléments de la seconde feuille et à analyser chaque date. Dès lors qu'une date coïncide avec la date du jour, elle devra programmer les gestionnaires d'événements capables de déclencher les alertes contextuelles aux échéances attendues.

Le module VBA
Il est donc maintenant temps de découvrir ce que renferme le module de ce projet.
  • Dans l'explorateur de projet, déployer l'affichage du dossier Modules,
  • Puis, double cliquer sur l'élément Module1,
Nous affichons ainsi la feuille de code qui lui est associée, au centre de l'écran. Elle est composée de deux procédures.

Sub recolter()
On Error Resume Next

End Sub

Sub alerter(titre As String, msg As String, lheure As Date)
On Error Resume Next
notif.titre = titre
notif.descript = "A " & lheure & " : " & msg

notif.Show

End Sub


La première nous le savons, nous devons la construire complètement. C'est elle qui doit analyser toutes les tâches et construire les gestionnaires d'événements. La seconde (alerter) doit être appelée par la première. Elle se contente d'afficher le formulaire en l'enrichissant des informations des rendez-vous à afficher à échéances précises.

La déclaration des variables
Pour débuter le code, des variables sont premièrement nécessaires. Elles doivent notamment servir à parcourir les cellules du tableau des tâches et à prélever les informations des événements à programmer.
  • Dans les bornes de la procédure recolter, ajouter les déclarations de variables suivantes :
Sub recolter()
On Error Resume Next
Dim feuille As Worksheet
Dim ligne As Byte: Dim laDate As Date
Dim lheure As Date


End Sub


Nous déclarons un objet de type feuille (Worksheet) pour pouvoir pointer sur la seconde feuille à analyser. Nous typons la variable ligne comme un entier court. Sa vocation est de passer en revue toutes les lignes remplies, grâce à une boucle que nous construirons. Enfin, nous typons les variables laDate et lheure comme des variables de type Date. Nous pourrons ainsi récolter et travailler les informations sur les échéances à observer.

L'affectation des variables
Dans l'enchaînement, certaines de ces variables doivent être initialisées avant de débuter l'analyse.
  • Après la déclaration des variables, ajouter les trois affectations suivantes :
...
laDate = Date
Set feuille = Worksheets("Taches")
ligne = 4
...


Nous prélevons la date du jour grâce à la fonction VBA Date. Nous la stockons dans la variable laDate. Nous initialisons (Set) l'objet de feuille que nous faisons pointer sur la deuxième feuille de ce classeur grâce à l'objet Worksheets auquel nous passons en argument le nom de l'onglet à atteindre. Enfin, nous initialisons la variable ligne sur la valeur 4. Il s'agit de la première ligne des rendez-vous dans le tableau.

Parcourir les lignes du tableau
Il est maintenant question de scruter chacun des rendez-vous. Pour cela, en partant de la ligne 4, nous devons engager une boucle de lecture, capable de poursuivre son analyse tant qu'aucune ligne vide n'est détectée.
  • A la suite du code VBA, créer la boucle suivante :
...
While feuille.Cells(ligne, 2).Value <> ""

ligne = ligne + 1
Wend
...


Une boucle While permet en effet d'engager une condition à vérifier pour évaluer si elle doit poursuivre son traitement. Avec ce critère (feuille.Cells(ligne, 2).Value <> ""), nous poursuivons l'étude tant que la cellule en cours d'analyse dans la deuxième colonne (B) n'est pas vide. Bien sûr, à chaque passage, nous n'oublions pas d'incrémenter la variable ligne (ligne = ligne + 1), pour déplacer l'étude sur la ligne suivante au prochain passage dans la boucle.

Comparer les dates
Désormais, à chaque passage dans la boucle, il est question de comparer la date de la tâche en cours d'analyse avec la date du jour (laDate). Si elles coïncident, nous saurons qu'un événement dédié doit être créé pour déclencher une alerte à échéance.
  • Dans la boucle, avant l'incrémentation, créer l'instruction conditionnelle suivante :
...
While feuille.Cells(ligne, 2).Value <> ""
If (feuille.Cells(ligne, 4).Value = laDate) Then

End If

ligne = ligne + 1
Wend
...


Le critère est trivial. Si les dates correspondent, il considère qu'un traitement doit être entrepris. Tous les autres rendez-vous, non-correspondants, sont ainsi ignorés.

Programmer les alertes
C'est ici que l'étape cruciale du développement intervient en faisant appel au gestionnaire OnTime de l'objet VBA Application. Il doit programmer le déclenchement des alertes aux échéances précises. Et pour cela, il est question tout d'abord de calculer l'heure en tenant compte du rappel fourni en dernière colonne du tableau des tâches.
  • Dans l'instruction conditionnelle, ajouter les deux lignes VBA suivantes :
...
lheure = feuille.Cells(ligne, 5).Value - feuille.Cells(ligne, 6).Value
Application.OnTime lheure, "'alerter """ & feuille.Cells(ligne, 2).Value & """, """ & feuille.Cells(ligne, 3).Value & """,""" & feuille.Cells(ligne, 5).Value & "'"
...


Tout d'abord nous calculons la différence entre l'heure du rendez-vous et le délai fourni sur le rappel. Cette échéance, pour le jour en cours, est désormais stockée dans la variable lheure. Ensuite, nous créons l'événement, comme nous le disions, grâce au gestionnaire OnTime de l'objet Application. L'heure lui est passée en premier paramètre. L'appel de la fonction alerter pour déclencher le formulaire, est réalisé en deuxième paramètre. Attention, la syntaxe est très particulière. Tout d'abord cet appel doit être effectué entre doubles côtes. La fonction elle-même doit être encadrée de simples côtes. Mais comme cette fonction requiert des paramètres à concaténer et que les simples et doubles côtes sont déjà de sortie, nous inscrivons en double côtes entre doubles côtes pour pouvoir encadrer les informations textuelles.
  • Enregistrer les modifications (CTRL + S) et basculer sur la deuxième feuille du classeur,
  • Ajuster l'heure et la date d'un événement à programmer dans les minutes qui suivent,
Grâce à l'événement OnChange de cette feuille, la procédure recolter a de nouveau été appelée automatiquement. De fait, les gestionnaires ont été recréés.

Déclencher un rappel sur une tâche ou un rendez-vous à venir en VBA Excel

Et après un peu de patience, vous voyez effectivement apparaître l'alerte désirée.

 
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