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 :

Sauvegarde des macros en même temps que le classeur


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Janvier 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 13
    Points : 9
    Points
    9
    Par défaut Sauvegarde des macros en même temps que le classeur
    Bonjour,

    J'ai écris une macro qui me permet d'enregistrer le classeur ouvert dans un autre emplacement en format xlsm et sous un autre nom. Or quand j'ouvre le nouveau classeur les macros n'y sont pas.
    Pouvez-vous m'indiquer la marche à suivre pour que le classeur et les modules soient sauvegarder en même temps, svp?
    Merci d'avance.

    Voici le 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
    37
    38
    Private Sub CommandButton2_Click()
    'Macro qui permet de sauvegarder une copie du fichier
     
    'je définie les 2 variables qui sont remplies par l'utilisateur
    Dim BOST As String
     
    Dim strPath As Variant
     
     
      'je sélectionne toutes les feuilles que je vais copier dans un nouveau classeur
      ActiveWorkbook.Worksheets.Copy
     
     
        'associe les valeurs rentré par l'utilisateur aux variables
       BOST = UserForm1.TextBoxBOST.Value
     
       strPath = "U:\Pl@net\" & BOST
       ChDrive strPath
       ChDir strPath
     
     
        strPath = Application.GetSaveAsFilename(InitialFileName:="Consummables  " & BOST, fileFilter:="Excel Macro-Enabled Workbook (*.xlsm), *.xlsm")
        If strPath <> False Then
             MsgBox "Save as " & strPath
        'message d'erreur en cas d'annulation
            If strPath = False Then
                MsgBox "Aucun fichier sauvegardé", vbInformation, "ANNULATION"
            End If
        End If
        Application.DisplayAlerts = False
        ActiveWorkbook.SaveAs strPath, FileFormat:=xlOpenXMLWorkbookMacroEnabled
     
        ActiveWorkbook.Close
     
        Workbooks("Create list").Close
        Application.DisplayAlerts = True
     
    End Sub

  2. #2
    Membre régulier Avatar de MlNOU
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 47
    Points : 112
    Points
    112
    Par défaut
    Bonjour,

    Si la macro est attachée a ton classeur elle sera enregistrée en meme tps que celui-ci.
    Sinon tu peux enregistrer le module qui t'interesse et le rajouter a ton nouveau classeur je pense.
    Voila , en esperant t'avoir aidé un peu.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Janvier 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Ok pour la méthode mais techniquement quelle ligne de code je dois rajouter, svp?
    Merci d'avance.

  4. #4
    Membre régulier Avatar de MlNOU
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 47
    Points : 112
    Points
    112
    Par défaut
    Re,
    J'ai trouver ca sur un autre forum ( comme quoi en cherchant un poil ).
    Ca devrait marcher mais je ne l'ai pas testé mais ca ma l'air corect.

    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
    Dans un premier temps il faut que tu exportes une copie de ton Module Standard "Module1"... il se nomera "Module1.Bas" (il n'y a pas de module "Haut" lol)
     
    Depuis VBE tu sélectionnes ce module "Module1" et click droit "Exporter".
     
    Tu choisis là où tu veux le mettre...
    Exemple "c:\mes macros"
     
    Dans un autre module de ton "classeur source" tu écris cette macro :
     
     
    Sub CreationMacroAuto()
    Dim Modulos As String
    Modulos = "C:\Mes Macros\Module1.bas"
     
    With Workbooks("LeClasseurCible.xls").VBProject
    .VBComponents.Import Modulos
    End With
    End Sub
    En esperant que ca fonctionne et que ca resoudra ton probleme.

    Re re,

    Dans mon infini bonté je l'ai testé a l'instant et ça fonctionne parfaitement

    Tu devrais pourvoir marquer resolu

    Cordialement
    MlNOU

  5. #5
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    N'étant pas d'accord avec Minou puisque le xls n'enregistrera pas tes macros dans des modules séparés si c'est du xlsx

    je me permets de rajouter la méthode SaveAs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ActiveWorkbook.SaveAs Filename:= NewFile, _
        FileFormat:=xlOpenXMLWorkbookMacroEnabled, _

  6. #6
    Membre régulier Avatar de MlNOU
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 47
    Points : 112
    Points
    112
    Par défaut
    Merci de cette remarque pertinente que je n'avais pas modifié dans le code envoyé. Mais il etais bien precisé dans la question qu'il enregistrait le classeur en format xlsm ( qui prendra les macro ), donc pas la peine d'ajouter la fonction "save as" me semble-t-il.

    Cordialement MlNOU.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Janvier 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    EngueEngue

    N'étant pas d'accord avec Minou puisque le xls n'enregistrera pas tes macros dans des modules séparés si c'est du xlsx

    je me permets de rajouter la méthode SaveAs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ActiveWorkbook.SaveAs Filename:= NewFile, _
    FileFormat:=xlOpenXMLWorkbookMacroEnabled, _
    Je met cette spécification en ligne 31 de mon code.
    Le fichier que j'enregistre est bien noté comme xlsm.
    Mais il ne contient aucun module.
    Est-ce normal? Faut-il enregistrer le classeur et les modules séparément?


    MINOU,

    Merci pour la méthode pour importer le module.
    Mais mon souhait est principalement de ne pas devoir importer les modules mais de faire en sorte qu'ils restent liés au classeur nouvellement créé.

  8. #8
    Membre régulier Avatar de MlNOU
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juillet 2013
    Messages : 47
    Points : 112
    Points
    112
    Par défaut
    Re bonjour,

    Je ne suis pas sur que ce que tu demandes soit possible ( de ce que je sais en tout cas) , à moins qu'il existe des methodes d'enregistrements specifiques.
    A voir, pour ma part je ne peux t'aider plus .


    Cordialement MlNOU

  9. #9
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Bonjour,

    J'avoue ne pas trop comprendre, il faudrait que je test ton code mais normalement lorsque l'on enregistre le classeur, même sous un autre nom on a bien les macros qui sont enregistrées.

    Tu peux essayer de changer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Application.DisplayAlerts = False 
        ActiveWorkbook.SaveAs strPath, FileFormat:=xlOpenXMLWorkbookMacroEnabled
     
        ActiveWorkbook.Close
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ' Application.DisplayAlerts = False  '=> En commentaire je veux voir ce qui se passe
     ThisWorkbook.SaveAs strPath ' => Pourquoi actif, This semble plus approprié puisque l'on parle du classeur qui lance la macro.
    ' au lieu de saveas il existe aussi savecopyas, as-tu essayé ?  
    ThisWorkbook.Close
    Une dernière chose, tu confirmes que l'utilisateur à le choix dans le repertoire de destination, sinon tu pourrais simplement fermer le classeur et le copier a un autre emplacement sans ouvrir la fenetre.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Janvier 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    aalex_38


    Merci beaucoup. Effectivement en changeant ActiveWorbooks par ThisWorbooks, les modules sont sauvegardés en même temps que le classeur.

    Et je laisse le choix à l'utilisateur au cas où il aurait envie de le sauvegarder dans une autre répertoire. Mais je pense que je vais faire comme tu as dit.

    Encore merci, tu me tires une sacrée épine du pied.

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

Discussions similaires

  1. [Java] Redimensionnement des composants en même temps que la fenêtre
    Par Yann_69 dans le forum API standards et tierces
    Réponses: 10
    Dernier message: 31/05/2012, 14h19
  2. [XL-2007] fermer un autre classeur en même temps que le classeur actif -> bug
    Par DiesIrae dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 14/08/2009, 11h45
  3. Lancer 2 macros en même temps
    Par amalane dans le forum Général VBA
    Réponses: 9
    Dernier message: 04/05/2007, 08h16
  4. Réponses: 5
    Dernier message: 03/08/2006, 16h13
  5. Comment fermer l'application en même temps que Windows ?
    Par semaj_james dans le forum Langage
    Réponses: 4
    Dernier message: 23/06/2004, 22h17

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