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 Addin dans un projet VBA


Sujet :

Macros et VBA Excel

  1. #21
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    Bonjour Marcel

    de toute les facons la chose est simple
    comme je te l'ai dis si l'addin est coché dans les parametres exel tu ne pourra pas faire ce que tu veux
    il te faut alors ouvrir ton fichier base sans addin
    et peut etre loader le xlam comme un workbook et travailler avec vbproject et insertline pour modif j'ai pas eu le temps de testé en rentrant ce soir je ferais des tests

    cela dit je le redis avoir un xlam et devoir en modifier le code ca me perturbe un peu
    pourquoi n'y aurait il pas des fonctions avec arguments

  2. #22
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Salut Patrick,

    (Pour ton information, cette mise à jour d'un .xlam n'est pas de mon fait mais relève d'un processus général au sein de ma société)

    Je vais reprendre vos propositions, celle d'Eic et la tienne, certes.

    En attendant, je souhaiterais comprendre.
    Je suis d'accord avec toi. Une référence ne peut être désinstallée si, au préalable, elle n'est pas décochée.
    (Ce que tu appelles "les parametres exel" signifie pour moi les Références)
    Et c'est bien ce que je prends en compte dans le processus que j'ai retourné le 1 Octobre à 13 h 51.

    D'où le processus que j'ai adopté
    - Désactiver le Référence = décocher cette référence
    - Désinstaller cette Référence = disparition du VBE et de la librairie des références proposées
    - Mise à jour du répertoire des addins de l'utilisateur par méthode FSO (procédure Marcel ci-dessous)
    - Installer la Référence
    - Activer le Référence
    C'est ce que j'ai développé dans le code ci-dessous.
    Dans ces conditions, ma - première - question est
    Après l'étape 2, donc une fois la référence désactivée et la désinstallation effectuée,
    Pourquoi celle-ci figure toujours dans mon éditeur VBE ce qui entraîne, logiquement, un bug dans la procédure de mise à jour
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    Option Explicit
     
    Const nom_court_xlam As String = "MATIK"
    Const nom_long_xlam As String = nom_court_xlam & ".xlam"
    Dim nom_full_xlam As String
    Const Rép_Source As String = "le_répertoire_de_référence"
     
    Public Sub gest_addin()
     
    'https://www.developpez.net/forums/d235993/logiciels/microsoft-office/general-vba/verifier-l-activation-d-reference/
    'https://www.developpez.net/forums/newreply.php?p=10506357&noquote=1
     
    nom_full_xlam = Application.UserLibraryPath & nom_long_xlam
     
    'Debug.Print nom_court_xlam
    'Debug.Print nom_long_xlam
    'Debug.Print nom_full_xlam
     
    '----------------------------------------------------------------------------------------------------------------------
    '1 - Désactive (décoche) la référence à l'addin objet de mise à jour
    '----------------------------------------------------------------------------------------------------------------------
     
    'ThisWorkbook.VBProject.References.AddFromFile (Application.UserLibraryPath & "cetautomatix.xlam")
    Dim liste_réf As Object, I As Byte
    Set liste_réf = ActiveWorkbook.VBProject.References
    With liste_réf
          For I = 1 To .Count
                If liste_réf(I).Name = nom_court_xlam Then .Remove liste_réf.Item(liste_réf(I).Name)
          Next I
    End With
    Set liste_réf = Nothing
     
    '-----------------------------------------------------------------------------------------------------------
    '2 - Désinstallation  de l'addin (suppression de l'éditeur VBE)
    '-----------------------------------------------------------------------------------------------------------
     
    Dim addin As Object
     
    For Each addin In Application.AddIns
          With addin
                If .Name = nom_long_xlam Then
                      .Installed = False
                      Exit For
                End If
          End With
    Next
     
    '-------------------------------------------------------------------------------------------------------------------------------------------------------
    '3 - Mise à jour de l'addin dernière version dans le répertoire addins du collaborateur
    '-------------------------------------------------------------------------------------------------------------------------------------------------------
     
    Call maj_addins
     
    '--------------------------------------------------------------------------------------------------------------------------------------
    '4 - Installe la macro complémentaire dans l'environnement utilisateur VBE
    '--------------------------------------------------------------------------------------------------------------------------------------
     
    Application.AddIns.Add(nom_full_xlam).Installed = True
     
    '--------------------------------------------------------------------------------------------------------------------------------------
    '5 - Active la macro complémentaire
    '--------------------------------------------------------------------------------------------------------------------------------------
     
    ThisWorkbook.VBProject.References.AddFromFile (nom_full_xlam)
     
    End Sub
     
    Sub maj_addins()
     
    Application.ScreenUpdating = False
     
    '---------------------------------------------------------------------------------------------------------
    'ACTIVER LA REFERENCE MICROSOFT SCRIPTING RUNTIME
    '---------------------------------------------------------------------------------------------------------
     
    Dim fichier As String
    Dim fso As Scripting.FileSystemObject
    Dim fileitem As Scripting.file
    Dim SourceFolder As Scripting.Folder
    Dim Tableau()
    Dim m As Integer, I As Integer, z As Byte
    Dim Valeur As Byte
    Dim Cible As Variant
     
    '----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    'SUPPRESSION .XLAM DANS LES ADDINS DU COLLABORATEUR  = APPLICATION.USERLIBRARYPATH
    '----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set SourceFolder = fso.GetFolder(Application.UserLibraryPath)
     
    For Each fileitem In SourceFolder.Files
     
            With fileitem
                   'Debug.Print .Name
                    If .Name = nom_long_xlam Then Kill .Path
            End With
     
    Next fileitem
     
    '-------------------------------------------------------------------------------------------------------------------------------------------------------------
    'DETERMINE LE CETAUTO.XLAM LE  PLUS RECENT DANS LE REPERTOIRE DE REFERENCE
    '-------------------------------------------------------------------------------------------------------------------------------------------------------------
     
     fichier = dir(Rép_Source & "\REF*.xlam")
     'Boucle sur les fichiers
     Do
     
         m = m + 1
         ReDim Preserve Tableau(1 To 2, 1 To m)
         Tableau(1, m) = fichier
         Set fso = CreateObject("Scripting.FileSystemObject")
         'On Error Resume Next
         If fso.FileExists(Rép_Source & "\" & fichier) = True Then
             Set fileitem = fso.GetFile(Rép_Source & "\" & fichier)
             Tableau(2, m) = fileitem.DateLastModified
             fichier = dir
             'Debug.Print Tableau(1, m) & " \ " & Tableau(2, m)
         End If
     
     Loop Until fichier = ""
     
     '---Trie les fichiers par ordre décroissant de création ---
     Do
         Valeur = 0
         For I = 1 To m - 1
             If CDate(Tableau(2, I)) < CDate(Tableau(2, I + 1)) Then
                 For z = 1 To 2
                     Cible = Tableau(z, I)
                     Tableau(z, I) = Tableau(z, I + 1)
                     Tableau(z, I + 1) = Cible
                 Next z
                 Valeur = 1
             End If
         Next I
     Loop While Valeur = 1
     
    Dim classeur_1 As String
    classeur_1 = Rép_Source & "\" & Tableau(LBound(Tableau()), 1)
     
    '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    'COPIE LE CETAUTO.XLAM LE  PLUS RECENT DANS DANS LES ADDINS DU COLLABORATEUR  = APPLICATION.USERLIBRARYPATH
    '-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     
    Dim classeur_2 As String
     
    classeur_2 = Application.UserLibraryPath & "\" & Tableau(LBound(Tableau()), 1)
    classeur_2 = Replace(classeur_2, "REF", "")
     
    FileCopy classeur_1, classeur_2
     
    End Sub

  3. #23
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    re
    voila 2 fichiers
    Marcel1.xlsm
    marcel2.xlam

    met les deux sur ton bureau
    lance le xlsm et lance la sub ouverture
    a tu le msgbox ??
    lance la sub fermeture
    a tu toujours le xlam dans VBE ?
    Fichiers attachés Fichiers attachés

  4. #24
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Bonjour Forum,

    Salut Patrick,

    Mes excuses pour cette réponse tardive.
    Oui aux 2 questions.

    Quelques points.
    1 - Sur mon poste, le bureau a une autre adresse

    ?Environ("userprofile")
    C:\Users....
    ?ThisWorkbook.FullName
    C:\documents\...\Desktop\marcel1.xlsm
    Aucun problème.

    2 - Avant de la désinstaller, il est prudent de désactiver la référence si celle-ci est active (Méthode .Remove dans mon code ci-dessus)

    Un grand merci (comme toujours)

    Je vais tester encore 10 fois.
    Ensuite, je me pencherai sur les posts d'Eric avant de mettre cette discussion en mode "Résolue"

  5. #25
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    re
    bonjour marcel
    Mes excuses pour cette réponse tardive.
    Oui aux 2 questions.
    autrement dit tu a le msgbox et le xlam reste dans VBE apres sub fermeture c'est ca ?

  6. #26
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Bonjour au Forum,

    Salut Patrick,

    J'ai commis une erreur. Le "oui" signifiait que le résultat attendu s'est révélé.

    Hier, j'avais bien le message (1ère procédure) ET la procédure complémentaire disparaissait de mon VBE (2ème procédure).

    Aujourd'hui, la 1ère procédure échoue. Excel ne trouve pas la procédure complémentaire.
    Message d'erreur.
    J'ai balayé tous les fichiers "Desktop". Il est bien reconnu.
    J'ai déplacé "Marcel.xlam" dans mes addins.
    Idem: procédure non reconnue
    Nota : le message d'erreur retourne le répertoire "Désolé, nous ne trouvons pas ...." et "Documents de Marcel" ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub A_L_ouverture()
     
        Set oAddin = Application.AddIns.Add(Application.UserLibraryPath & "Marcel2.xlam", True)
        oAddin.Installed = True
    DoEvents
    Application.Run "Marcel2.xlam!testaddins"
     
    End Sub


    Par contre, les 2 procédures aboutissent bien au bon résultat avec une autre procédure complémentaire .xlam

  7. #27
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    le probleme vient certainement du fait que ce dossier Appdata est caché a la base
    "C:\Users\polux\AppData\Roaming\Microsoft\AddIns\
    peut etre devra tu modifier ce point dans ton principe avec W10 sur W 7 et office 2007 j'y arrive
    donc tu me dis que ca match pas avec ca
    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
     Sub A_L_ouverture()
        Set oAddin = Application.AddIns.Add(Environ("userprofile") & "\AppData\Roaming\Microsoft\AddIns\Marcel2.xlam", True)
        'OU
       ' Set oAddin = Application.AddIns.Add(Application.UserLibraryPath & "Marcel2.xlam", True)
     
    oAddin.Installed = True
    DoEvents
    Application.Run "Marcel2.xlam!testaddins"
    End Sub
    '
    Sub A_la_fermeture()
        For Each AddIn In Application.AddIns
            If AddIn.Name = "Marcel2.xlam" Then AddIn.Installed = False
        Next
    End Sub

  8. #28
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Bonjour Le Forum,

    Salut Patrick,

    Au préalable, une précision.
    Selon moi, pour obtenir le chemin complet des addins
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.UserLibraryPath
    suffit.
    Fais-je Erreur?

    Pour rappel,
    Code pour décocher l'addin et le supprimer de la liste des références proposées:

    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
    37
    38
    39
    Option Explicit
     
    Const nom_court_xlam As String = "Marcel2"
    Const nom_long_xlam As String = nom_court_xlam & ".xlam"
    Dim nom_full_xlam As String
     
    Sub ferme_addin()
     
    'Désactive la macro complémentaire
     
    Dim liste_réf As Object, I As Byte
     
    Set liste_réf = ActiveWorkbook.VBProject.References
     
    With liste_réf
          For I = 1 To .Count
                If liste_réf(I).Name = nom_court_xlam Then
                      .Remove liste_réf.Item(liste_réf(I).Name)
                      Exit For
                End If
          Next I
    End With
     
    Set liste_réf = Nothing
     
    'Désinstalle la macro complémentaire
     
    Dim addin As Object
    For Each addin In Application.AddIns
        'Debug.Print addin.Name
        With addin
            If .Name = nom_long_xlam Then
                   .Installed = False
                   Exit For
            End If
        End With
    Next addin
     
    End Sub
    Pour installer et activer (cocher) l'addin

    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
    37
    38
    Sub ouvre_addin()
     
    'Installe la macro complémentaire
     
    nom_full_xlam = Application.UserLibraryPath & nom_long_xlam
    Dim laddin As Object
    Set laddin = Application.AddIns.Add(Filename:=Application.UserLibraryPath & nom_long_xlam, CopyFile:=True)
    laddin.Installed = True
    DoEvents
    Application.Run "Marcel2.xlam!testaddins"
    Set laddin = Nothing
     
    'Active la macro complémentaire
     
    Dim liste_réf As Object, I As Byte
    Dim activaddin As Boolean
     
    activaddin = False
     
    Set liste_réf = ActiveWorkbook.VBProject.References
     
    With liste_réf
          For I = 1 To .Count
                If liste_réf(I).Name = nom_court_xlam Then
                      activaddin = True
                      Exit For
                End If
          Next I
    End With
     
    Set liste_réf = Nothing
     
    If activaddin = False Then _
          ThisWorkbook.VBProject.References.AddFromFile (nom_full_xlam)
     
    DoEvents
     
    End Sub
    Ce matin, aucun problème avec une macro complémentaire autre.
    Avec celle que tu proposes, Patrick,
    Celle-ci apparaît bien dans le VBE au-dessus du projet principal.
    La MsgBox apparaît "Coucou Marcel"
    Mais si j'arrête la procédure après l'installation, celle-ci n'apparaît pas dans la liste des références proposées, encore moins celles activées (cochées)
    ????
    Si, après le point d'arrêt, je laisse poursuivre la procédure alors un message d'erreur apparaît :
    Nom de module, de projet ou de bibliothèque d'objets déjà utilisé
    sur la méthode Ce qui est sans doute logique, cette partie du code étant ajoutée par moi.
    Mais je ne vois pas pourquoi.

  9. #29
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    re
    oui si tu veux le chemin c'est bien le bon chez moi avec userlibrarypath mais ce dossier est dans un sous sous dossier de APPData qui lui est caché
    peut etre que ca créé un probleme je sais pas

    j'ai testé sur 2016 ce week end et les deux sub que je t'ai donné fonctionnent

    je vois pas ce que je peux te dire de plus

    peut etre a tu des problemes d'autorisation de dossier dans Windows je sais pas j'en ai aucune idée

    je vais essayer de faire une operation complete aujourd'hui a savoir ouvrir le xlam, run macro, fermer ,modifier ,réouvrir

  10. #30
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    OK, pas de problème;
    C'est déjà fort aimable à toi.

    Que penses tu des procédures que j'ai soumises ce matin?

    Dans mon développement, elles sont séparées par une copie du dernier fichier .xlam déposée sur une ressource partagée vers le répertoire des addins de mon poste de travail (Application.UserLibraryPath)

    Merci encore

  11. #31
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    re
    je sais pas j'en suis pas encore la, le deplacement ou copie du xlam est secondaire a vrai dire

    toujours est il que je n'ai rien trouvé sur la modif dynamique de code dans un xlam
    par contre et la j'ai testé, on peut le modifier en l'ouvrant comme un classeur normal
    ce qui veut dire qu'il ne doit pas etre activé en tant que xlam pendant la modif de son code

  12. #32
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Patrick,

    Je ne cherche pas à modifier le code du .xlam.
    Etant protégé par mot de passe, je n'y ai pas accès.
    Il s'agit d'un objet mis à jour sur autre serveur que je souhaite intégrer à mon projet.
    D'où les codes que j'ai retournés et le processus que j'ai décrit.

    Sauf erreur, je n'ai pas reporté cette action, ou bien me suis-je peut-être mal exprimé;

  13. #33
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    bon je modifie bien le xlam mais apres il n'est plus utilisable
    je pige pas en fait j'ait tout controler tout est bon mais quand on le r'appelle il ne le trouve pas alors qu'il y est bien dans le dossier des addins
    je crois que tu t'es ambarqué dans un truc de fou

  14. #34
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par MarcelG Voir le message
    Patrick,

    Je ne cherche pas à modifier le code du .xlam.
    Etant protégé par mot de passe, je n'y ai pas accès.
    Il s'agit d'un objet mis à jour sur autre serveur que je souhaite intégrer à mon projet.
    D'où les codes que j'ai retournés et le processus que j'ai décrit.

    Sauf erreur, je n'ai pas reporté cette action, ou bien me suis-je peut-être mal exprimé;
    alors j'ai rien pigé de ce que tu veux vraiment
    quel est le rapport entre un dossier partagé et ton xlam alors ???????????
    apres ce que tu a decris je peux pas tester n'etant pas sur ton reseau

  15. #35
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    1- Les mises à jour de la procédure complémentaire .xlam en question sont déposées sur un serveur partagé par un autre collaborateur.
    2 - Mon développement fait appel à celle-ci Je dois donc procéder à une mise à jour de mes addins et de mon projet VBE
    D'où les 5 étapes:
    . désactivation
    . désinstallation
    . mise à jour (FSO)
    . installation
    . activation.

    Tu peux lire mes procédures.
    C'est bien ce que j'ai écrit, non?

    Désolé si quiproquo.

  16. #36
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Bonsoir au Forum,

    Je reviens sur le sujet

    Environnement:

    Je suis développeur d'applicatifs pour 200 collaborateurs
    En fonction de leur profil, les fonctionnalités sont différentes (ouverture en lecture seule, boutons de commande visibles/invisibles, etc...)

    Afin de centraliser la mise à jour de ces fonctionnalités, j'ai d'abord créé un classeur LAM.xlsm
    Une fonction typée a été développée depuis un tableau structuré se trouvant en son sein, donc dans le fichier LAM.xlsm

    (classique)

    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
    Option Explicit
     
    Public Type don_collab
            profil As String
            équipe As String
            Is_Logiciel As Boolean
    End Type
     
    Public Function lecollab() As don_collab
     
    Dim us As String
    us = Application.UserName
     
    Dim eq As Integer
    eq = Evaluate("=IFERROR(MATCH(""" & us & """,T_Collaborateurs[Id],0),0)")
     
    Dim letablo As ListObject
    Set letablo = ThisWorkbook.Worksheets("Collaborateurs").ListObjects("T_Collaborateurs")
     
    With lecollab
            If eq > 0 Then
                    .profil = letablo.ListColumns("Profil").DataBodyRange.Cells(eq, 1).Value
                    .équipe = letablo.ListColumns("Equipe").DataBodyRange.Cells(eq, 1).Value
                    .Is_Logiciel = letablo.ListColumns("Profil").DataBodyRange.Cells(eq, 1).Value = "Manager" _
                                            And InStr(letablo.ListColumns("Equipe").DataBodyRange.Cells(eq, 1).Value, "Gestion_Actifs") > 0
            End If
    End With
     
    Set letablo = Nothing
     
    End Function
    Afin de créer une macro complémentaire
    J'ai transformé cet utilitaire .xlsm en .xlam.

    La démarche consiste donc en ce que chaque collaborateur mette à jour ses addins depuis ce fichier.
    Pour ce faire:
    1 - Copie depuis les addins de Marcel vers une ressource partagée en lecture seule pour mes collègues (propriétaire Marcel)
    2 - A l'ouverture de l'applicatif logiciel_mg.xlsm par chaque collaborateur, mise à jour de ses adddins

    Dans l'évènement Open

    avec

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    Option Explicit
     
    Const nom_court_xlam As String = "Collaborateurs-ACTIFS_V2"
    Const nom_long_xlam As String = nom_court_xlam & ".xlam"
    Dim nom_full_xlam As String
    Const Rép_Source As String = "\\le_répertoire_destinataire_de_la_copie du .xlam de Marcel\Utilitaires\Macros Complémentaires"
     
    Public Sub gest_addin()
     
    nom_full_xlam = Application.UserLibraryPath & nom_long_xlam
     
    'Debug.Print nom_court_xlam
    'Debug.Print nom_long_xlam
    'Debug.Print nom_full_xlam
     
    'https://www.developpez.net/forums/d235993/logiciels/microsoft-office/general-vba/verifier-l-activation-d-reference/
    'https://www.developpez.net/forums/newreply.php?p=10506357&noquote=1
    'https://www.mrexcel.com/board/threads/list-all-references-in-workbook-vbproject.606440/
     
    'Désactive la référence à l'addin objet de mise à jour
     
    With ThisWorkbook.VBProject
       '.References.Remove .References(nom_court_xlam)
    End With
     
     'désinstallation (suppression) de l'addin cettautomatix.xlam dans l'environnement utilisateur VBE
     
    Dim addin As Variant
     
    For Each addin In Application.AddIns
          With addin
                If .Name = nom_long_xlam Then
                      .Installed = False
                      Exit For
                End If
          End With
    Next
     
    'Mise à jour de l'addin dernière version dans le répertoire addins du collaborateur
    'Développement Marcel
    Call maj_addins
     
    'Installe la macro complémentaire dans l'environnement utilisateur VBE
    Application.AddIns.Add(nom_full_xlam).Installed = True
     
    'Inutile
    'Active la macro complémentaire
    'ThisWorkbook.VBProject.References.AddFromFile (nom_full_xlam)
     
    End Sub
    et

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    Sub maj_addins()
     
    Application.ScreenUpdating = False
     
    '---------------------------------------------------------------------------------------------------------
    'LATEBINDING
    'INUTILE D'ACTIVER LA REFERENCE MICROSOFT SCRIPTING RUNTIME
    '---------------------------------------------------------------------------------------------------------
     
    Dim fichier As String
    Dim fso As Scripting.FileSystemObject
    Dim fileitem As Scripting.file
    Dim SourceFolder As Scripting.Folder
    Dim Tableau()
    Dim m As Integer, i As Integer, z As Byte
    Dim Valeur As Byte
    Dim Cible As Variant
     
    '----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    'SUPPRESSION DES CETAUTO.XLAM DANS LES ADDINS DU COLLABORATEUR  = APPLICATION.USERLIBRARYPATH
    '----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set SourceFolder = fso.GetFolder(Application.UserLibraryPath)
     
    For Each fileitem In SourceFolder.Files
     
            With fileitem
                   Debug.Print .Name
                    If .Name = nom_long_xlam Then Kill .Path
            End With
     
    Next fileitem
     
    '-------------------------------------------------------------------------------------------------------------------------------------------------------------
    'DETERMINE LE .XLAM LE  PLUS RECENT DANS LE REPERTOIRE DE REFERENCE
    '-------------------------------------------------------------------------------------------------------------------------------------------------------------
     
    'fichier = dir(Rép_Source & "\REF*.xlam")
     fichier = dir(Rép_Source & "\Collab*.xlam")
     
     'Boucle sur les fichiers
     Do
     
         m = m + 1
         ReDim Preserve Tableau(1 To 2, 1 To m)
         Tableau(1, m) = fichier
         Set fso = CreateObject("Scripting.FileSystemObject")
         'On Error Resume Next
         If fso.FileExists(Rép_Source & "\" & fichier) = True Then
             Set fileitem = fso.GetFile(Rép_Source & "\" & fichier)
             Tableau(2, m) = fileitem.DateLastModified
             fichier = dir
             'Debug.Print Tableau(1, m) & " \ " & Tableau(2, m)
         End If
     
     Loop Until fichier = ""
     
     '---Trie les fichiers par ordre décroissant de création ---
     Do
         Valeur = 0
         For i = 1 To m - 1
             If CDate(Tableau(2, i)) < CDate(Tableau(2, i + 1)) Then
                 For z = 1 To 2
                     Cible = Tableau(z, i)
                     Tableau(z, i) = Tableau(z, i + 1)
                     Tableau(z, i + 1) = Cible
                 Next z
                 Valeur = 1
             End If
         Next i
     Loop While Valeur = 1
     
    Dim classeur_1 As String
    classeur_1 = Rép_Source & "\" & Tableau(LBound(Tableau()), 1)
     
    '------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    'COPIE LE .XLAM LE  PLUS RECENT DANS DANS LES ADDINS DU COLLABORATEUR  = APPLICATION.USERLIBRARYPATH
    '-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
     
    Dim classeur_2 As String
     
    classeur_2 = Application.UserLibraryPath & Tableau(LBound(Tableau()), 1)
     
    FileCopy classeur_1, classeur_2
     
    End Sub
    (Pardon pour le Exit For, Pierre. Je rectifierai ultérieurement par une boucle Do)
    Lors de l'exécution, de ces 2 dernières procédures, le précédent fichier .xlam est supprimé puis réapparaît dans sa mise à jour.

    Pourtant, l'appel de la fonction issue du fichier .xlam
    reste sans retour.

    Quelque chose doit m'échapper.

    Par avance, merci pour vos brillantes lumières.

    Question subsidiaire,

    Dans un projet dont je ne suis pas développeur, j'ai aperçu un objet "Références" parallèle aux Modules de classe

    Nom : Références_20210507.JPG
Affichages : 197
Taille : 11,1 Ko

    Et si je développe

    "Référence à + nom de la macro complémentaire".

    Peut-être un rapport avec ce qui précède. Mais lequel?
    C'est quoi?

Discussions similaires

  1. Mise à jour dll dans le GAC
    Par gnafron dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 17/07/2007, 15h15
  2. Mise à jour liste dans formulaire.
    Par Julieta dans le forum IHM
    Réponses: 2
    Dernier message: 25/04/2007, 08h47
  3. [VBA-E] Mise à jour signet dans word
    Par dev81 dans le forum Macros et VBA Excel
    Réponses: 23
    Dernier message: 18/04/2007, 14h30
  4. [C# 1.1] Mise à jour cellules dans un datagrid
    Par celos dans le forum Windows Forms
    Réponses: 10
    Dernier message: 14/06/2006, 09h26
  5. [c#][VS2003]Mise à jour propriété dans le designer
    Par cedkat dans le forum Windows Forms
    Réponses: 3
    Dernier message: 14/11/2005, 15h10

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