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.