Implémenter un système de gestion de version (Version Control System – VCS), Excel VBA

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.

Facebook
Twitter
LinkedIn
WhatsApp
Email
Print
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x