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 :

Enregistrer un fichier .xlsm en macro complémentaire .xlam par VBA [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club Avatar de PierreE_67207
    Homme Profil pro
    Bureau d'étude (bâtiment)
    Inscrit en
    Janvier 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Bureau d'étude (bâtiment)
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2015
    Messages : 35
    Points : 29
    Points
    29
    Par défaut Enregistrer un fichier .xlsm en macro complémentaire .xlam par VBA
    Bonjour,

    Tout est dit dans le texte, je recherche désespéramment à enregistrer un fichier .XLSM en .XLAM par VBA, depuis ce même fichier .XLSM.

    Les codes suivants ne fonctionnent visiblement pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.SaveAs Filename:="MACRO COMPLEMENTAIRES", FileFormat:="xlam
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.SaveCopyAs Filename:="C:\Users\" & Environ("USERNAME") & "\AppData\Roaming\Microsoft\AddIns\MACRO COMPLEMENTAIRES.xlam"
    Je ne trouve rien sur la toile, avez-vous une idée ?

    Merci par avance,

    PE

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Les codes suivants ne fonctionnent visiblement pas :
    Quels sont les symptômes de ce dysfonctionnement ?

    Essaye ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\MACRO COMPLEMENTAIRES", FileFormat:=xlOpenXMLAddIn
    Je ne trouve rien sur la toile, avez-vous une idée ?
    Le premier endroit où chercher une solution, c'est l'aide VBA.
    Lire ça : https://docs.microsoft.com/fr-FR/off...ook.savecopyas
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Nouveau membre du Club Avatar de PierreE_67207
    Homme Profil pro
    Bureau d'étude (bâtiment)
    Inscrit en
    Janvier 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Bureau d'étude (bâtiment)
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2015
    Messages : 35
    Points : 29
    Points
    29
    Par défaut
    Bonjour Menhir,

    C'est parfait merci !

    Je n'avais pas trouvé l'information nécessaire pour définir un format .XLAM

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FileFormat:=xlOpenXMLAddIn
    J'ai donc ajusté comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim CheminComplet As String: CheminComplet = "C:\Users\" & Environ("USERNAME") & "\AppData\Roaming\Microsoft\AddIns\MACRO COMPLEMENTAIRES PGI"
     
    '--> Si l'extension n'est pas XLAM, alors :
        If Mid(ThisWorkbook.FullNameURLEncoded, InStrRev(ThisWorkbook.FullNameURLEncoded, ".") + 1) <> "xlam" Then
     
            ThisWorkbook.SaveAs Filename:=CheminComplet, FileFormat:=xlOpenXMLAddIn
     
        End If

    Maintenant il ne me reste plus qu'à trouver comment ajouter la macro complémentaire créée dans les compléments, la commande suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.AddIns.Add(CheminComplet, True).Installed = True
    m'apportant le message d'erreur suivant :

    "Impossible de lire la propriété Add de la classe AddIns"

  4. #4
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 947
    Points : 4 058
    Points
    4 058
    Par défaut
    Pour importer un xlam, tu trouveras la réponse dans l'annexe 4 du tome 4, voir ma signature, (voir la 3eme façon).
    Cordialement.

  5. #5
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par PierreE_67207 Voir le message
    Maintenant il ne me reste plus qu'à trouver comment ajouter la macro complémentaire créée dans les compléments
    Le plus simple est de placer le fichier dans le dossier XLOuvrir (ou XLStart suivant les versions) ou dans le répertoire définit dans Options > Options avancées > Général > "Au démarrage, ouvrir les fichiers du dossier". Le XLAM s'ouvrira automatiquement avec Excel.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  6. #6
    Nouveau membre du Club Avatar de PierreE_67207
    Homme Profil pro
    Bureau d'étude (bâtiment)
    Inscrit en
    Janvier 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Bureau d'étude (bâtiment)
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2015
    Messages : 35
    Points : 29
    Points
    29
    Par défaut
    Bonjour Menhir, laurent_ott,

    Merci pour vos messages.

    @Menhir, je vais distribuer un Add-In dans mon entreprise, et je souhaiterais ne pas avoir à transmettre une méthodologie pour son installation et ses mises-à-jour à venir, donc mon objectif est d'automatiser sa mise en place à l'ouverture d'un fichier d'installation.

    @laurent_ott, impressionnant le travail effectué dans tes ouvrages ! j'ai parcouru l'annexe 4 du tome 4, et j'ai testé la méthode décrite. Si je comprends bien celle-ci consiste à installer une référence de VBProject. L'inconvénient, toujours si j'ai bien compris, c'est que dans ce cas ma référence est associé à un fichier donné et non pas à Excel, comme c'est le cas pour les compléments (ruban Développeur / Compléments)

    Voici par conséquent mon code qui fonctionne à présent, et qui répond à mon besoin.
    La procédure est appelée dans "Private Sub Workbook_Open" du classeur du futur Complément, enregistré en format .xlsm :
    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
    Sub AjoutComplémentExcel()
     
    '*****************************************'
    'Ajout du complément macro complémentaire :
    '*****************************************'
     
        Dim CheminFichier As String: CheminFichier = Application.UserLibraryPath
            '=> équivalent à : "C:\Users\" & Environ("USERNAME") & "\AppData\Roaming\Microsoft\AddIns\"
        'Nota : NomFichier est une constante public String qui définit le nom de fichier pour la copie
        Dim NomCompletFichier As String: NomCompletFichier = CheminFichier & NomFichier & ".xlam"
        Dim Complément As AddIn
     
     
        If Mid(ThisWorkbook.FullNameURLEncoded, InStrRev(ThisWorkbook.FullNameURLEncoded, ".") + 1) <> "xlam" Then
     
        'Si le complément existe déjà, on le supprime pour pouvoir le regénérer (permet les mises-à-jour)
            If Len(Dir(NomCompletFichier)) > 0 Then
                Application.AddIns.Add(NomCompletFichier).Installed = False
                Kill NomCompletFichier
            End If
     
        'Enregistrement du fichier en cours en format .xlam dans le dossier des compléments Excel :
            ThisWorkbook.SaveAs Filename:=CheminFichier & NomFichier, FileFormat:=xlOpenXMLAddIn
     
        'Installation et activation du complément :
            Application.AddIns.Add(NomCompletFichier).Installed = True
     
        'Validation de l'installation du fichier et fermeture du fichier d'installation :
            MsgBox "Complément " & NomFichier & " chargé avec succès !" & Chr(13) & Chr(13) & _
                       "Le fichier d'installation va maintenant se fermer.", vbOkOnly, "Terminé"
            ThisWorkbook.Close SaveChanges:=False
     
        End If
     
    End sub
    PE

  7. #7
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par PierreE_67207 Voir le message
    @Menhir, je vais distribuer un Add-In dans mon entreprise, et je souhaiterais ne pas avoir à transmettre une méthodologie pour son installation et ses mises-à-jour à venir, donc mon objectif est d'automatiser sa mise en place à l'ouverture d'un fichier d'installation.
    Il suffit que ton fichier d'installation copie le xlam dans XLStart.
    Même un simple fichier .BAT pourrait faire ça.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  8. #8
    Nouveau membre du Club Avatar de PierreE_67207
    Homme Profil pro
    Bureau d'étude (bâtiment)
    Inscrit en
    Janvier 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Bureau d'étude (bâtiment)
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2015
    Messages : 35
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Il suffit que ton fichier d'installation copie le xlam dans XLStart.
    Même un simple fichier .BAT pourrait faire ça.
    Bonsoir Menhir,

    C'est sensiblement ce que j'ai fait finalement, mais en passant par le dossier \AppData\Roaming\Microsoft\AddIns\.
    J'avais aussi pensé à un .BAT, mais n'ayant aucune connaissance dans ce domaine, j'ai opté par un fichier .XLSM qui contient le .XLAM

    Sujet résolu, merci encore.

    PE

  9. #9
    Rédacteur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2013
    Messages
    947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Août 2013
    Messages : 947
    Points : 4 058
    Points
    4 058
    Par défaut
    Citation Envoyé par PierreE_67207 Voir le message
    Voici par conséquent mon code qui fonctionne à présent, et qui répond à mon besoin.
    La procédure est appelée dans "Private Sub Workbook_Open" du classeur du futur Complément, enregistré en format .xlsm :
    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
    Sub AjoutComplémentExcel()
     
    '*****************************************'
    'Ajout du complément macro complémentaire :
    '*****************************************'
     
        Dim CheminFichier As String: CheminFichier = Application.UserLibraryPath
            '=> équivalent à : "C:\Users\" & Environ("USERNAME") & "\AppData\Roaming\Microsoft\AddIns\"
        'Nota : NomFichier est une constante public String qui définit le nom de fichier pour la copie
        Dim NomCompletFichier As String: NomCompletFichier = CheminFichier & NomFichier & ".xlam"
        Dim Complément As AddIn
     
     
        If Mid(ThisWorkbook.FullNameURLEncoded, InStrRev(ThisWorkbook.FullNameURLEncoded, ".") + 1) <> "xlam" Then
     
        'Si le complément existe déjà, on le supprime pour pouvoir le regénérer (permet les mises-à-jour)
            If Len(Dir(NomCompletFichier)) > 0 Then
                Application.AddIns.Add(NomCompletFichier).Installed = False
                Kill NomCompletFichier
            End If
     
        'Enregistrement du fichier en cours en format .xlam dans le dossier des compléments Excel :
            ThisWorkbook.SaveAs Filename:=CheminFichier & NomFichier, FileFormat:=xlOpenXMLAddIn
     
        'Installation et activation du complément :
            Application.AddIns.Add(NomCompletFichier).Installed = True
     
        'Validation de l'installation du fichier et fermeture du fichier d'installation :
            MsgBox "Complément " & NomFichier & " chargé avec succès !" & Chr(13) & Chr(13) & _
                       "Le fichier d'installation va maintenant se fermer.", vbOkOnly, "Terminé"
            ThisWorkbook.Close SaveChanges:=False
     
        End If
     
    End sub
    PE
    Bonjour.
    C'est en lisant ton code que j'ai compris ce que tu voulais faire, et que tu as réussi à faire.
    Je trouve l'idée très intéressante et je me suis permis de recopier ton code dans ma boîte à outils VBA personnelle (en citant la source), au cas où un jour j'en aurai besoin.
    Félicitations.

  10. #10
    Nouveau membre du Club Avatar de PierreE_67207
    Homme Profil pro
    Bureau d'étude (bâtiment)
    Inscrit en
    Janvier 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Bureau d'étude (bâtiment)
    Secteur : Bâtiment

    Informations forums :
    Inscription : Janvier 2015
    Messages : 35
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par laurent_ott Voir le message
    Bonjour.
    C'est en lisant ton code que j'ai compris ce que tu voulais faire, et que tu as réussi à faire.
    Je trouve l'idée très intéressante et je me suis permis de recopier ton code dans ma boîte à outils VBA personnelle (en citant la source), au cas où un jour j'en aurai besoin.
    Félicitations.
    Merci beaucoup ! venant d'un expert, ça fait très plaisir

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

Discussions similaires

  1. [XL-2013] Ajout d'une macro complémentaire (XLAM) par VBA
    Par PierreE_67207 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 03/06/2020, 22h43
  2. [XL-2016] Diffuser fichier xlsm avec macros complémentaires
    Par lguez dans le forum Excel
    Réponses: 1
    Dernier message: 15/12/2017, 15h54
  3. Réponses: 2
    Dernier message: 17/09/2008, 16h17
  4. [VBA-E] Enregistrer un fichier sans sa macro
    Par KKshi666 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/04/2007, 16h11
  5. [VBA]enregistrer en fichier excel en macro
    Par jazziestan dans le forum SDK
    Réponses: 12
    Dernier message: 29/12/2006, 10h07

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