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

Macros et VBA Excel Discussion :

mise à jour automatique d'un fichier XLAM sur plusieurs ordinateurs


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2014
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2014
    Messages : 72
    Par défaut mise à jour automatique d'un fichier XLAM sur plusieurs ordinateurs
    Bonjour,
    Il y a sur le réseau d'entreprise un fichier XLAM utilisé par plusieurs personnes. Lorsque je souhaite modifier et mettre à jour ce fichier, s'il est ouvert par au moins un utilisateur, je ne peux plus enregistrer le fichier et je dois donc attendre le soir que tous les utilisateurs aient fermé excel.
    Je souhaiterais donc mettre en place une sorte de mise à jour automatique (comme tout logiciel en fait...) qui fait que lorsque le fichier xlam s'ouvre, il aille vérifier si c'est la dernière version, sinon, il se met à jour, mais je n'ai pas la moindre idée de comment faire (et si c'est possible en xlam)
    Merci à celles et ceux qui pourront m'éclairer sur ce point.

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre confirmé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2014
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2014
    Messages : 72
    Par défaut
    Bonjour monsieur Tulliez,
    Merci de votre réponse, je vais regarder cela avec attention.

  4. #4
    Membre confirmé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2014
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2014
    Messages : 72
    Par défaut mise à jour automatique d'un fichier XLAM sur plusieurs ordinateurs
    Bonjour,
    Toutes mes excuses de revenir si tard sur ce sujet.

    Je n'ai hélas strictement rien compris au tutoriel indiqué.

    1) Qu'est ce qu'on écrit dans le fichier ini ?

    2) Sur mon VBE, les lignes suivantes sont écrites intégralement en bleu.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    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
    3) si je suis seul à avoir le fichier ini contenant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [ADMIN]
    EnablePublishing=True
    Il ne peut donc pas être sur le réseau, car si j'ai bien compris (...) , un fichier ini est juste un fichier texte, donc ouvert à tous. Il ne peut bien sûr pas être sur mon ordinateur perso.... donc qu'est ce que j'ai loupé ?

    4) Ensuite, dans le dernier code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Public Const FullPathAddin As String = _
        "\\serveur\MyAddin.xla"
    Public Const FullPathGetVer As String = _
        "\\serveur\AddinVersion.txt"
     
    Sub PublishAddin()
    etc
    5) Que contient AddinVersion.txt ? et quelle différence avec le fichier ini ?

    Bref, si quelqu'un(e) veut bien m'éclairer avec un soleil, je lui en serais reconnaissant.

  5. #5
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    Si j'ai bien compris le contenu du code du tuto, la logique est la suivante.

    1. Le xla est installé sur le serveur.
    2. le fichier excel xlsm que tu distribues aux gens est sur leur poste de travail. Lorsqu'ils l'exécute, le fichier recherche le fichier Ini dans c:\temp\ (donc sur le poste en local, "poste client").
      1. Si le fichier Ini n'existe pas, il copie le fichier xla du server sur le poste client, puis il crée le fichier Ini en indiquant la date de la dernière vérif comme étant la date du jour.
      2. Si le fichier Ini existe, il regarde quand a eu lieu la dernière vérification de version. Si cette dernière date de plus de 7 jours, le code va rechercher le fichier addin présent sur le serveur et compare sa dernière date de modification avec celle du fichier xla présent sur le poste client... Si le xla du serveur est plus récent, il met à jour celui du poste client.



    Pour l'histoire du PublishAddin, c'est le code qui permet de mettre à jour la version qui se trouve sur le serveur.
    Pour ce qui est de la partie Ini [ADMIN], c'est une piste qui est donné je pense. Si le Ini qui se trouve sur ton poste contient une section [admin] avec la valeur EnablePublishing à True, tu seras autorisé à utiliser cette fonction. Mais ça ne semble pas implémenté dans le code présenté dans l'article

    Pour répondre à tes questions:
    1/ Tu n'y écris rien... (mis à part [Admin] EnablePublishing = true, si tu décidais d'utiliser la méthode expliqué au dessus pour mettre à jour la version serveur).
    Pour le reste, c'est le code du fichier xlsm (le fichier que tu distribues) qui s'en occupe, le Ini étant sur le poste client.

    2/ La couleur de la syntaxe est juste différente entre VBE et la coloration mise en place dans les messages du forum

    3/ Tu avais juste manqué qu'il existe autant de fichiers Ini, que de postes client. Chaque client à son propre Ini, qui lui indique quand a eu lieu la dernière vérification de version. Dans l'exemple, ça permet de ne pas faire la vérif à chaque lancement du fichier mais uniquement 1 fois par semaine. C'est toi qui décide de ça dans le code du fichier xlsm que tu distribues.

    4/ Lorsqu'en tant qu'Admin, tu lances le code PublishAddIn, pour mettre à jour la version qui se trouve sur le serveur, il crée un fichier sur le serveur indiquant quand à eu lieu cette mise à jour... C'est un peu bancal, parque ce txt n'est jamais utilisé dans le reste du code ^^, puisque le code va directement chercher la date de dernière modification du fichier addin serveur... Donc ne te tracasse pas trop avec cette partie du code

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  6. #6
    Membre confirmé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Mars 2014
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2014
    Messages : 72
    Par défaut
    Bonjour Qwazerty,

    Merci pour votre réponse. Je confirme, j'étais totalement à côté de la plaque.
    J'ai donc la macroV02 à jour sur le réseau et la macroV01 à mettre à jour sur mon poste, disons "C:\Users\PLH81\AppData\Roaming\Microsoft\AddIns"

    Après correction des deux problèmes suivants :

    Pour le code tout en bleu :
    Nom : MAJ Macro.png
Affichages : 110
Taille : 43,4 Ko

    il faut en fait mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Declare PtrSafe Function GetPrivateProfileString ....
     
    Private Declare PtrSafe Function WritePrivateProfileString ....
    et pour le message suivant
    Nom : MAJ Macro2.png
Affichages : 114
Taille : 13,9 Ko
    il faut corriger en allant, sur VBE, dans l'onglet Outils -> Références" et cocher dans la liste Microsoft Scripting Runtime

    J'ai fait tourner macroV01 (test_MAJ.xlam) et là je calle, car il ne copie rien sur mon disque
    Je vous mets donc la partie qui coince

    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
     
    Sub CheckVersion()
     
        Dim fso As FileSystemObject
        Dim ad As AddIn
        Dim rep As Variant
     
        Set fso = New FileSystemObject
     
        For Each ad In Application.AddIns
            If ad.FullName Like "*Test_MAJ.xlam" Then
                If fso.GetFile(ad.FullName).DateLastModified < fso.GetFile("R:\Transport\ZZ - dossiers Macros\Macro Test\Test_MAJ.xlam").DateLastModified Then
     
                    rep = MsgBox("Votre version de l'Add-in n'est plus à jour." & vbCrLf & "Voulez-vous mettre à jour votre Add-in ?", vbInformation + vbYesNo, "Test_MAJ")
                    If rep = vbYes Then
                        ' il faut mettre à jour
                        On Error Resume Next
                        Kill Left(ad.FullName, Len(ad.FullName) - 4) & "(old).xlam"
                        ThisWorkbook.SaveAs Left(ad.FullName, Len(ad.FullName) - 4) & "(old).xlam"
                        ' c'est la ligne FileCopy  "R:\Transport\ZZ - qui plante
                        FileCopy "R:\Transport\ZZ - dossiers Macros\Macro Test\Test_MAJ.xlam", 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, "Test_MAJ"
                    Else
                        MsgBox "La prochaine vérification aura lieu dans une semaine !", vbCritical + vbOKOnly, "Test_MAJ"
                    End If
                End If
            End If
        Next ad
     
        Set fso = Nothing
        Set ad = Nothing
    End Sub
    Si vous avez une idée, je suis preneur.
    Bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. mise a jour automatique de 2 fichier excel
    Par rodol36 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/12/2019, 14h23
  2. [XL-2010] Faire une mise à jour automatique d'un fichier excel par VBA
    Par Romzo dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 22/06/2018, 11h05
  3. [XL-2013] Mise à jour automatique d'un fichier excel
    Par martin41 dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 29/07/2016, 09h10
  4. Réponses: 2
    Dernier message: 26/07/2014, 01h40
  5. Mise à jour automatique d'un fichier Excel
    Par Mythrandil dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 03/08/2007, 16h26

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