Développer un outil de gestion de projet personnalisé, Excel VBA (Visual Basic for Applications)
Le code fourni comprend plusieurs éléments clés que vous pourriez avoir besoin, tels que la gestion des tâches, le suivi des délais, et la génération de rapports.
Objectif :
Nous allons créer un outil de gestion de projet avec les fonctionnalités suivantes :
1. Gestion des tâches – Suivre les tâches, leur statut, leurs délais, et les personnes assignées.
2. Chronologie et diagramme de Gantt – Afficher visuellement le planning du projet et l’avancement des tâches.
3. Génération de rapports – Créer des rapports comme le statut d’avancement des tâches, les tâches en retard, etc.
4. Automatisation – Utiliser VBA pour mettre à jour l’outil automatiquement en fonction des entrées de l’utilisateur.
Fonctionnalités :
- Une liste de tâches (pour stocker les noms des tâches, les dates de début et de fin, les assignés, les statuts, etc.)
- Un diagramme de Gantt (pour visualiser les tâches sur un planning)
- Génération de rapports (pour résumer l’avancement des tâches, les tâches en retard, etc.)
- Automatisation (par exemple, calcul automatique du pourcentage de progression des tâches)
1. Créer une liste de tâches dans Excel
Commencez par créer la structure de base pour stocker les informations des tâches.
Dans la première feuille (nommez-la « TaskList »), créez les colonnes suivantes :
- A1 : ID de tâche
- B1 : Nom de la tâche
- C1 : Assigné (Personne responsable)
- D1 : Date de début
- E1 : Date de fin
- F1 : Statut (Non commencé, En cours, Terminé)
- G1 : Pourcentage d’avancement
- H1 : Remarques
Dans la deuxième feuille (nommez-la « GanttChart »), nous allons créer le diagramme de Gantt pour afficher visuellement le planning.
2. Code VBA pour la gestion des tâches
Voici le code VBA pour ajouter une nouvelle tâche dans la liste.
Code pour ajouter une nouvelle tâche :
Sub AddNewTask()
Dim taskId As Integer
Dim taskName As String
Dim assignee As String
Dim startDate As Date
Dim endDate As Date
Dim status As String
Dim completion As Integer
Dim remarks As String
' Demander à l'utilisateur les informations sur la tâche
taskId = InputBox("Entrez l'ID de la tâche", "Nouvelle tâche")
taskName = InputBox("Entrez le nom de la tâche", "Nouvelle tâche")
assignee = InputBox("Entrez le nom de la personne assignée", "Nouvelle tâche")
startDate = CDate(InputBox("Entrez la date de début (JJ/MM/AAAA)", "Nouvelle tâche"))
endDate = CDate(InputBox("Entrez la date de fin (JJ/MM/AAAA)", "Nouvelle tâche"))
status = InputBox("Entrez le statut (Non commencé, En cours, Terminé)", "Nouvelle tâche")
completion = InputBox("Entrez le pourcentage d'avancement (0-100)", "Nouvelle tâche")
remarks = InputBox("Entrez des remarques", "Nouvelle tâche")
' Trouver la prochaine ligne vide dans la feuille TaskList
Dim lastRow As Long
lastRow = Sheets("TaskList").Cells(Sheets("TaskList").Rows.Count, 1).End(xlUp).Row + 1
' Insérer les données dans la feuille TaskList
Sheets("TaskList").Cells(lastRow, 1).Value = taskId
Sheets("TaskList").Cells(lastRow, 2).Value = taskName
Sheets("TaskList").Cells(lastRow, 3).Value = assignee
Sheets("TaskList").Cells(lastRow, 4).Value = startDate
Sheets("TaskList").Cells(lastRow, 5).Value = endDate
Sheets("TaskList").Cells(lastRow, 6).Value = status
Sheets("TaskList").Cells(lastRow, 7).Value = completion
Sheets("TaskList").Cells(lastRow, 8).Value = remarks
End Sub
Explication :
- La procédure AddNewTask utilise la fonction InputBox pour demander à l’utilisateur de fournir les informations nécessaires à la création d’une tâche : ID de la tâche, nom, assignee, dates de début et de fin, statut, pourcentage d’avancement et remarques.
- Ensuite, elle trouve la prochaine ligne vide dans la feuille « TaskList » et insère les données dans les colonnes appropriées.
3. Code VBA pour la mise à jour du statut d’une tâche
Nous allons maintenant créer une macro permettant de mettre à jour le statut et le pourcentage d’avancement d’une tâche.
Code pour mettre à jour le statut d’une tâche :
Sub UpdateTaskStatus()
Dim taskId As Integer
Dim status As String
Dim completion As Integer
Dim row As Long
' Demander à l'utilisateur l'ID de la tâche à mettre à jour
taskId = InputBox("Entrez l'ID de la tâche à mettre à jour", "Mettre à jour le statut")
' Trouver la tâche dans la feuille TaskList
row = Application.Match(taskId, Sheets("TaskList").Range("A:A"), 0)
If Not IsError(row) Then
' Demander à l'utilisateur le nouveau statut et le pourcentage d'avancement
status = InputBox("Entrez le nouveau statut (Non commencé, En cours, Terminé)", "Mettre à jour le statut")
completion = InputBox("Entrez le nouveau pourcentage d'avancement (0-100)", "Mettre à jour le statut")
' Mettre à jour les informations de la tâche dans la feuille TaskList
Sheets("TaskList").Cells(row, 6).Value = status
Sheets("TaskList").Cells(row, 7).Value = completion
Else
MsgBox "ID de tâche non trouvé !"
End If
End Sub
Explication :
- La procédure UpdateTaskStatus demande à l’utilisateur l’ID d’une tâche, puis recherche cette tâche dans la feuille « TaskList ».
- Si la tâche est trouvée, l’utilisateur peut mettre à jour le statut et le pourcentage d’avancement de la tâche.
4. Générer un Diagramme de Gantt
Le diagramme de Gantt permettra d’afficher visuellement l’avancement des tâches en fonction de leur date de début et de fin.
Code pour générer le diagramme de Gantt :
Sub GenerateGanttChart()
Dim startDate As Date
Dim endDate As Date
Dim taskName As String
Dim row As Long
Dim col As Long
Dim currentDate As Date
' Définir les dates de début et de fin du projet
Dim projectStartDate As Date
Dim projectEndDate As Date
projectStartDate = Application.Min(Sheets("TaskList").Range("D:D"))
projectEndDate = Application.Max(Sheets("TaskList").Range("E:E"))
' Créer les entêtes du diagramme de Gantt
Sheets("GanttChart").Cells(1, 1).Value = "Nom de la tâche"
For col = 2 To (projectEndDate - projectStartDate + 2)
Sheets("GanttChart").Cells(1, col).Value = projectStartDate + col - 2
Next col
' Remplir le diagramme de Gantt avec les données des tâches
For row = 2 To Sheets("TaskList").Cells(Sheets("TaskList").Rows.Count, 1).End(xlUp).Row
taskName = Sheets("TaskList").Cells(row, 2).Value
startDate = Sheets("TaskList").Cells(row, 4).Value
endDate = Sheets("TaskList").Cells(row, 5).Value
Sheets("GanttChart").Cells(row, 1).Value = taskName
' Colorier les cellules du diagramme de Gantt
For col = 2 To (projectEndDate - projectStartDate + 2)
currentDate = projectStartDate + col - 2
If currentDate >= startDate And currentDate <= endDate Then
Sheets("GanttChart").Cells(row, col).Interior.Color = RGB(0, 102, 204)
End If
Next col
Next row
End Sub
Explication :
- La procédure GenerateGanttChart génère un diagramme de Gantt dans la feuille « GanttChart ».
- Elle détermine les dates de début et de fin du projet, puis elle remplit les colonnes avec les dates correspondantes.
- Les cellules sont coloriées en bleu pour chaque tâche en fonction de sa période d’activité.
5. Générer un Rapport de Projet
Enfin, nous allons créer un rapport simple pour afficher les tâches en retard et leur avancement.
Code pour générer un rapport :
Sub GenerateProjectReport()
Dim lastRow As Long
Dim reportRow As Long
Dim status As String
Dim taskName As String
Dim completion As Integer
Dim endDate As Date
lastRow = Sheets("TaskList").Cells(Sheets("TaskList").Rows.Count, 1).End(xlUp).Row
reportRow = 2
' Créer les entêtes du rapport
Sheets("Report").Cells(1, 1).Value = "Nom de la tâche"
Sheets("Report").Cells(1, 2).Value = "Statut"
Sheets("Report").Cells(1, 3).Value = "Avancement (%)"
Sheets("Report").Cells(1, 4).Value = "En retard ?"
' Parcourir les tâches et générer le rapport
For row = 2 To lastRow
taskName = Sheets("TaskList").Cells(row, 2).Value
status = Sheets("TaskList").Cells(row, 6).Value
completion = Sheets("TaskList").Cells(row, 7).Value
endDate = Sheets("TaskList").Cells(row, 5).Value
Sheets("Report").Cells(reportRow, 1).Value = taskName
Sheets("Report").Cells(reportRow, 2).Value = status
Sheets("Report").Cells(reportRow, 3).Value = completion
If endDate < Date And status <> "Terminé" Then
Sheets("Report").Cells(reportRow, 4).Value = "Oui"
Else
Sheets("Report").Cells(reportRow, 4).Value = "Non"
End If
reportRow = reportRow + 1
Next row
End Sub
Explication :
- La procédure GenerateProjectReport génère un rapport affichant le nom des tâches, leur statut, leur pourcentage d’avancement, et si elles sont en retard par rapport à leur date de fin.
Conclusion :
Cet outil de gestion de projet personnalisé en Excel VBA permet de :
- Gérer les tâches (ajouter et mettre à jour).
- Visualiser un diagramme de Gantt.
- Générer des rapports sur l’avancement des tâches.