Implémenter un système de gestion de version (Version Control System – VCS), Excel VBA
Voici une explication détaillée et un exemple de code en VBA pour implémenter un système de gestion de version (Version Control System – VCS) dans Excel.
Introduction
La gestion de version permet de suivre les différentes versions d’un fichier, de garder un historique des modifications et de pouvoir revenir à des versions précédentes. Excel, bien qu’il ne dispose pas de support natif pour des systèmes comme Git, permet de créer un système de gestion de versions simple à l’aide de VBA (Visual Basic for Applications).
Concepts clés de la gestion de versions
1. Suivi des versions : Un système de gestion de version permet de sauvegarder et de suivre les changements apportés à un fichier, et offre la possibilité de revenir à une version antérieure.
2. Versioning par copie : Chaque fois qu’un changement est effectué, une copie du fichier est enregistrée avec un identifiant unique comme un numéro de version ou un horodatage.
3. Log des versions : Il est essentiel de garder une trace des versions créées, avec des informations comme la date et la description des changements effectués.
4. Sauvegarde automatique : Le système peut automatiquement créer une nouvelle version à chaque modification importante du fichier.
Mise en place du système de gestion de versions
Nous allons créer un code VBA permettant de sauvegarder des versions d’un fichier Excel, de conserver un historique dans une feuille cachée, et de revenir à une version antérieure en cas de besoin.
Étapes de mise en œuvre
1. Créer un dossier pour les versions : Créez un dossier sur votre système pour stocker les versions du fichier Excel (par exemple, C:\ExcelVersions\).
2. Ajouter une feuille cachée pour le log des versions : Ajoutez une feuille cachée dans votre classeur Excel où nous allons enregistrer les informations de chaque version (numéro de version, date et description des changements).
3. Code VBA pour gérer les versions
Voici un exemple détaillé de code VBA pour gérer les versions :
Sub SauvegarderNouvelleVersion()
Dim dossierVersion As String
Dim numeroVersion As Long
Dim descriptionVersion As String
Dim nomFichierVersion As String
Dim logVersions As Worksheet
Dim ligneVersion As Long
Dim dateVersion As String
Dim classeurActuel As Workbook
' Initialisation des variables
dossierVersion = "C:\ExcelVersions\" ' Dossier où les versions seront stockées
dateVersion = Format(Now, "yyyy-mm-dd_hhmmss")
Set classeurActuel = ThisWorkbook
descriptionVersion = InputBox("Entrez une description de cette version :", "Description de la version")
' Vérification si le dossier de versions existe
If Dir(dossierVersion, vbDirectory) = "" Then
MsgBox "Le dossier de gestion de version n'existe pas. Veuillez le créer et réessayer."
Exit Sub
End If
' Trouver le prochain numéro de version
numeroVersion = ObtenirProchainNumeroVersion(dossierVersion)
' Construire le nom du fichier de version (par exemple, "Classeur_v1_2023-03-28_120500.xlsx")
nomFichierVersion = "Classeur_v" & numeroVersion & "_" & dateVersion & ".xlsx"
' Sauvegarder le classeur actuel en tant que nouvelle version
classeurActuel.SaveCopyAs dossierVersion & nomFichierVersion
' Enregistrer la nouvelle version dans le log des versions
On Error Resume Next
Set logVersions = classeurActuel.Sheets("LogVersions")
If logVersions Is Nothing Then
Set logVersions = classeurActuel.Sheets.Add
logVersions.Name = "LogVersions"
logVersions.Visible = xlSheetVeryHidden
logVersions.Cells(1, 1).Value = "Numéro de Version"
logVersions.Cells(1, 2).Value = "Date"
logVersions.Cells(1, 3).Value = "Description"
End If
On Error GoTo 0
' Trouver la prochaine ligne vide dans le log des versions
ligneVersion = logVersions.Cells(logVersions.Rows.Count, 1).End(xlUp).Row + 1
' Enregistrer les informations de la version dans le log
logVersions.Cells(ligneVersion, 1).Value = numeroVersion
logVersions.Cells(ligneVersion, 2).Value = dateVersion
logVersions.Cells(ligneVersion, 3).Value = descriptionVersion
MsgBox "Version " & numeroVersion & " sauvegardée avec succès !"
End Sub
Function ObtenirProchainNumeroVersion(dossierVersion As String) As Long
Dim fichier As String
Dim compteurVersion As Long
Dim numeroVersion As Long
Dim prefixeVersion As String
Dim suffixeVersion As String
compteurVersion = 0
prefixeVersion = "Classeur_v"
' Boucler à travers les fichiers du dossier de version
fichier = Dir(dossierVersion & "*.xlsx")
Do While fichier <> ""
' Extraire le numéro de version du nom du fichier (par exemple, "Classeur_v1_2023-03-28_120500.xlsx")
If InStr(fichier, prefixeVersion) > 0 Then
numeroVersion = ExtraireNumeroVersionDuNomFichier(fichier, prefixeVersion)
If numeroVersion > compteurVersion Then
compteurVersion = numeroVersion
End If
End If
fichier = Dir
Loop
' Retourner le prochain numéro de version
ObtenirProchainNumeroVersion = compteurVersion + 1
End Function
Function ExtraireNumeroVersionDuNomFichier(fichier As String, prefixe As String) As Long
Dim versionStr As String
Dim numeroVersion As Long
versionStr = Mid(fichier, Len(prefixe) + 1, InStr(Len(prefixe) + 1, fichier, "_") - Len(prefixe) - 1)
numeroVersion = CLng(versionStr)
ExtraireNumeroVersionDuNomFichier = numeroVersion
End Function
Sub RestaurerVersion()
Dim dossierVersion As String
Dim logVersions As Worksheet
Dim ligneVersion As Long
Dim versionARetablir As Long
Dim nomFichierVersion As String
Dim classeurActuel As Workbook
Dim nouveauClasseur As Workbook
' Initialisation des variables
dossierVersion = "C:\ExcelVersions\" ' Dossier où les versions sont stockées
Set classeurActuel = ThisWorkbook
Set logVersions = classeurActuel.Sheets("LogVersions")
' Demander à l'utilisateur la version à restaurer
versionARetablir = InputBox("Entrez le numéro de version à restaurer :", "Restaurer la version")
' Trouver la version dans le log
ligneVersion = 0
For i = 2 To logVersions.Cells(logVersions.Rows.Count, 1).End(xlUp).Row
If logVersions.Cells(i, 1).Value = versionARetablir Then
ligneVersion = i
Exit For
End If
Next i
If ligneVersion = 0 Then
MsgBox "Version non trouvée dans le log."
Exit Sub
End If
' Obtenir le nom du fichier pour la version à restaurer
nomFichierVersion = logVersions.Cells(ligneVersion, 2).Value & "_" & versionARetablir & ".xlsx"
' Ouvrir la version sélectionnée
Set nouveauClasseur = Workbooks.Open(dossierVersion & nomFichierVersion)
nouveauClasseur.Activate
MsgBox "Vous avez restauré la version " & versionARetablir & " avec succès !"
End Sub
Explication du code
1. SauvegarderNouvelleVersion :
- Cette procédure permet de sauvegarder le classeur actuel sous une nouvelle version dans le dossier spécifié.
- Elle génère un nom de fichier unique basé sur un numéro de version et une date/heure.
- Ensuite, elle enregistre les informations de la version dans une feuille cachée appelée « LogVersions« .
2. ObtenirProchainNumeroVersion :
- Cette fonction examine les fichiers dans le dossier de version et renvoie le prochain numéro de version basé sur les versions existantes.
3. ExtraireNumeroVersionDuNomFichier :
- Cette fonction extrait le numéro de version à partir du nom du fichier (par exemple, « Classeur_v1_2023-03-28_120500.xlsx »).
4. RestaurerVersion :
- Cette procédure permet à l’utilisateur de revenir à une version antérieure en ouvrant le fichier de version correspondant depuis le dossier.
Conclusion
Ce système de gestion de versions basique en VBA permet de gérer et de suivre les différentes versions d’un fichier Excel. Vous pouvez sauvegarder des versions automatiquement, ajouter des descriptions, et revenir facilement à une version précédente. Bien que simple, ce système peut être étendu avec des fonctionnalités comme des sauvegardes automatiques, une meilleure gestion des erreurs ou même une interface utilisateur plus avancée.