IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Discussion :

[AddIn] AutoUpdate d'une macro-complémentaire Add-In [FAQ]


Sujet :

Contribuez

  1. #1
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut [AddIn] AutoUpdate d'une macro-complémentaire Add-In
    Voici une méthode pour permettre la mise à jour automatique d'un Add-In distribué sur un réseau local d'entreprise.
    On peut imaginer le même fonctionnement avec un Add-In sur le net.

    Fonctionnement :
    - vous mettez votre add-in a distribuer à un emplacement fixe
    - vous devez gérer un fichier *.ini qui vérifie toutes les semaines la version.
    - si la version sur le réseau est plus récente le programme propose la mise à jour
    - la mise à jour consiste à archiver l'actuel add-in avant de copier la nouvelle version.

    les fonctions de lecture/écriture de fichier INI
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Private Declare Function GetPrivateProfileString Lib "kernel32" Alias _
            "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, _
            ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, _
            ByVal lpFileName As String) As Long
     
    Private Declare Function WritePrivateProfileString Lib "kernel32" Alias _
            "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, _
            ByVal lpString As Any, ByVal lpFileName As String) As Long
     
    Function EcrireINI(Entete As String, Variable As String, Valeur As String) As String
        Dim Fichier As String
        Fichier = "C:\temp\MyAddin.ini"
        WriteINI = WritePrivateProfileString(Entete, Variable, Valeur, Fichier)
    End Function
     
    Function LireINI(Entete As String, Variable As String) As String
        Dim Retour As String
        Dim Fichier As String
        Fichier = "C:\temp\MyAddin.ini"
        Retour = String(255, Chr(0))
        LireINI = Left$(Retour, GetPrivateProfileString(Entete, ByVal Variable, "", Retour, Len(Retour), Fichier))
    End Function
    sur l'événement Workbook_Open de la macro-complémentaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Workbook_Open()
     
    ' check UPDATE
    If LireINI("Main", "lastCheckUpdate") & "" = "" Then
        CheckVersion
        EcrireINI "Main", "lastCheckUpdate", Format(Now, "dd/mm/yyyy hh:nn:ss")
    Else
        If CDate(LireINI("Main", "lastCheckUpdate")) + 7 < Now Then
            CheckVersion
            EcrireINI "Main", "lastCheckUpdate", Format(Now, "dd/mm/yyyy hh:nn:ss")
        End If
    End If
     
    End Sub
    puis un module de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    Sub CheckVersion()
     
        Dim fso As FileSystemObject
        Dim ad As AddIn
     
        Set fso = New FileSystemObject
     
        For Each ad In application.AddIns
            If ad.FullName Like "*MyAddin.xla" Then
                If fso.GetFile(ad.FullName).DateLastModified < _
           fso.GetFile("\\LecteurReseau\...\Divers\MyAddin.xla").DateLastModified Then
                    rep = MsgBox("Votre version de l'Add-in n'est plus à jour." & vbCrLf & _
                                "Voulez-vous mettre à jour votre Add-in ?", vbInformation + vbYesNo, "MyAddin")
                    If rep = vbYes Then
                        ' il faut mettre à jour
                        On Error Resume Next
                        Kill Left(ad.FullName, Len(ad.FullName) - 4) & "(old).xla"
                        ThisWorkbook.SaveAs Left(ad.FullName, Len(ad.FullName) - 4) & "(old).xla"
                        FileCopy _
                                "\\LecteurReseau\...\Divers\MyAddin.xla", _
                                ad.FullName
                        MsgBox "La mise à jour de votre Add-in a été effectuée." & vbCrLf & _
                               "Redémarrez Excel pour qu'elle soit effective", vbInformation + vbOKOnly, _
                               "MyAddin"
                    Else
                        MsgBox "La prochaine vérification aura lieu dans une semaine !", _
                                vbCritical + vbOKOnly, _
                                "MyAddin"
                    End If
                End If
            End If
        Next ad
     
        Set fso = Nothing
        Set ad = Nothing
    End Sub

  2. #2
    Futur Membre du Club
    Femme Profil pro
    Consultant marketing
    Inscrit en
    Juin 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant marketing

    Informations forums :
    Inscription : Juin 2015
    Messages : 13
    Points : 9
    Points
    9
    Par défaut Suite MAJ Office
    Bonjour,

    Je me permets de remonter ce sujet.
    j'ai utilisé ce code il y a déjà quelques temps pour l'add-in que j'avais créé pour mon entreprise.
    Tout fonctionnait très bien... jusqu'à une mise à jour Office (2013).

    En fouinant, j'ai trouvé que c'était la fonction "SaveAs" dans la macro CheckVersion qui buggait : erreur 1004.
    erreur que j'ai éviter en ajoutant Mais nouvelle erreur : 70 cette fois. erreur de permission.
    Comme l'addin est actuellement installé et utilisé, je ne peux pas remplacer le fichier xlam dans mon dossier local.
    Et évidemment, si je demande à ma macro de décharger le plug in pour pouvoir le remplacer, ma macro se stoppe... puisque CheckVersion est dans l'addin que je veux mettre à jour.

    Avez-vous une solution ?

    La solution serait de mettre dans un add-in à part le CheckVersion mais c'est dommage... Comment je mets à jour CheckVersion ??

    Merci.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Novembre 2013
    Messages : 9
    Points : 34
    Points
    34
    Par défaut Re fichier batch
    Merci pour ce travail.
    Pour pallier à votre problème, je propose de confier la partie Copie du AddIn à un fichier batch qui sera ouvert juste avant la fermeture d'Excel.

  4. #4
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2017
    Messages : 58
    Points : 27
    Points
    27
    Par défaut
    Bonjour,

    Le poste remonte mais est toujours d'actualité.

    Je cherche à utiliser vos codes afin d'automatiser la mise à jour des fichiers xlam de mes utilisateurs mais rien ne fonctionne.

    Je pense que je n'enregistre pas les informations aux bons endroits.


    Pour le code ci dessous je ne sais pas si je dois l'enregistrer sous le module de ma macro complémentaire ou dans le fichier INI dont vous parlez :

    Citation Envoyé par cafeine Voir le message

    les fonctions de lecture/écriture de fichier INI
    Private Declare Function GetPrivateProfileString Lib "kernel32" Alias _
    "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, _
    ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, _
    ByVal lpFileName As String) As Long

    Private Declare Function WritePrivateProfileString Lib "kernel32" Alias _
    "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, _
    ByVal lpString As Any, ByVal lpFileName As String) As Long

    Function EcrireINI(Entete As String, Variable As String, Valeur As String) As String
    Dim Fichier As String
    Fichier = "C:\temp\MyAddin.ini"
    WriteINI = WritePrivateProfileString(Entete, Variable, Valeur, Fichier)
    End Function

    Function LireINI(Entete As String, Variable As String) As String
    Dim Retour As String
    Dim Fichier As String
    Fichier = "C:\temp\MyAddin.ini"
    Retour = String(255, Chr(0))
    LireINI = Left$(Retour, GetPrivateProfileString(Entete, ByVal Variable, "", Retour, Len(Retour), Fichier))
    End Function

    Et pour le code ci dessous dois je modifier MyAddin.xla par lenomdemamacro.xlam ?

    Citation Envoyé par cafeine Voir le message
    puis un module de code
    Sub CheckVersion()

    Dim fso As FileSystemObject
    Dim ad As AddIn

    Set fso = New FileSystemObject

    For Each ad In application.AddIns
    If ad.FullName Like "*MyAddin.xla" Then
    If fso.GetFile(ad.FullName).DateLastModified < _
    fso.GetFile("\\LecteurReseau\...\Divers\MyAddin.xla").DateLastModified Then
    rep = MsgBox("Votre version de l'Add-in n'est plus à jour." & vbCrLf & _
    "Voulez-vous mettre à jour votre Add-in ?", vbInformation + vbYesNo, "MyAddin")
    If rep = vbYes Then
    ' il faut mettre à jour
    On Error Resume Next
    Kill Left(ad.FullName, Len(ad.FullName) - 4) & "(old).xla"
    ThisWorkbook.SaveAs Left(ad.FullName, Len(ad.FullName) - 4) & "(old).xla"
    FileCopy _
    "\\LecteurReseau\...\Divers\MyAddin.xla", _
    ad.FullName
    MsgBox "La mise à jour de votre Add-in a été effectuée." & vbCrLf & _
    "Redémarrez Excel pour qu'elle soit effective", vbInformation + vbOKOnly, _
    "MyAddin"
    Else
    MsgBox "La prochaine vérification aura lieu dans une semaine !", _
    vbCritical + vbOKOnly, _
    "MyAddin"
    End If
    End If
    End If
    Next ad

    Set fso = Nothing
    Set ad = Nothing
    End Sub
    Je vous remercie pour le temps que vous m'accorderez.

    Bonne journée.

Discussions similaires

  1. [XL-2000] Problème de chargement d'une macro complémentaire à l'ouverture du fichier
    Par Gautier.B dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 21/04/2009, 14h28
  2. Utiliser une macro complémentaire via un Command Button
    Par theshark85 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 19/11/2008, 15h02
  3. Menu dans une macro complémentaire
    Par Daejung dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 06/10/2008, 22h17
  4. [VBA Excel] Pb avec une macro complémentaire
    Par Nyck0las dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/11/2007, 22h19
  5. [VBA-E]-Appeler une macro complémentaire ?
    Par Régolo dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 15/04/2007, 23h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo