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 :

sauvegarder une macro


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut sauvegarder une macro
    Bonsoir

    j'ai une macro qui crée une autre macro.
    Mon problème est que cette nouvelle macro n'enregistre pas automatiquement le code.

    Voici un programme pour mieux comprendre (voir la PJ sinon)

    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
     
    Sub test()
     
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim ligne As String 'lignes de la macro
    Dim nomVB As String
    Dim isVBEopen As Boolean 'true si l'editeur de macro est deja ouvert, false sinon (VBE = Visual Basic Editor)
    Dim x As Long
     
    If (Application.VBE.MainWindow.Visible = True) Then
        isVBEopen = True
    Else
        isVBEopen = False
        Application.VBE.MainWindow.Visible = True 'ouverture de l'editeur de macros pour pouvoir creer la nouvelle macro dans le classeur wb
    End If
     
    Set wb = Workbooks.Add 'ouverture d'un classeur vierge
    Set ws = wb.Sheets(1)
    ws.Range("A1").Value = 4
     
    ligne = ligne & "Private Sub Worksheet_Change(ByVal Target As Range)" & vbCrLf
    ligne = ligne & vbCrLf
    ligne = ligne & "If (Target.AddressLocal = ""$A$1"") Then" & vbCrLf
    ligne = ligne & "    ActiveSheet.Range(""$A$2"").Value = ActiveSheet.Range(""$A$1"").Value + 2" & vbCrLf
    ligne = ligne & "End If" & vbCrLf
    ligne = ligne & vbCrLf
    ligne = ligne & "End Sub"
     
    nomVB = Sheets(ws.Name).CodeName
     
    'ajout de la procedure dans la feuille
    With wb.VBProject.VBComponents(nomVB).CodeModule
        x = .CountOfLines + 1
        .InsertLines x, ligne
    End With
     
    'fermeture de l'editeur de macros s'il etait initialement ferme
    If (isVBEopen = False) Then Application.VBE.MainWindow.Visible = False
     
    wb.SaveAs Filename:="C:\Temp\testMacro.xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
     
    End Sub
    Le problème est après. Si je ferme mon nouveau classeur puis que je le réouvre, la macro (qui fait A2 = A1 + 2) n'est pas enregistrée. En revanche, si je clique sur "Sauvegarder" puis que je ferme mon classeur puis que je le réouvre, là elle est sauvegardée. Pourtant j'avais bien fait un saveAs.

    Pourriez-vous me dire svp ce qui ne fonctionne pas dans mon code ?

    Merci beaucoup

    Très bonne soirée
    Fichiers attachés Fichiers attachés

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Bonjour,

    il n'y a vraiment personne pour m'aider ?
    Y a-t-il au moins une personne qui a essayé de lancer ma macro test pour voir si elle rencontre le même problème sur son PC ?

    merci bcp

    Bonne journée

  3. #3
    Expert éminent 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
    Par défaut
    Perso, je me garde bien d'utiliser le VBA pour modifier le VBE.

    Perso, si j'avais à faire ce que tu décris, au lieu de faire un Workbooks.Add et d'introduire une macro, je créerais "à la main" un fichier modèle avec la macro intégrée et je créerais le nouveau fichier avec un Open suivi d'un SaveAs.
    Ce serait beaucoup plus simple que ton tour de passe-passe : tout ton code se limiterais à 2 lignes (3 lignes si on compte le Dim wb).

    Ta méthode pourrais se justifier si le contenu de la macro destination changeait d'un fichier à l'autre mais, si je ne me trompe pas, ça ne semble pas être le cas.

    Citation Envoyé par salseropom Voir le message
    Y a-t-il au moins une personne qui a essayé de lancer ma macro test pour voir si elle rencontre le même problème sur son PC ?
    Beaucoup de participants à ce forum n'ouvre pas les fichiers joints (surtout s'ils peuvent contenir des macro), entre autre pour les raisons expliquées ici :
    https://www.developpez.net/forums/d8...s-discussions/

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Bonjour Menhir,

    je comprends bien le risque associé aux pièces jointes. C'est la raison pour laquelle, dans mon 1e post, j'avais fait un copier-coller du code de la macro. Ainsi, le code est lisible, et sans risque, par tout le monde.

    Concernant le VBA / VBE, j'avoue ne pas trop savoir quoi penser. Je comprends bien sûr ta position, mais elle oblige à avoir en input de la macro un fichier supplémentaire (le fichier template). Donc pour les grosses macros, je fais ce que tu dis. Mais là, pour quelques lignes, je modifie le VBE.

    Mais j'aimerai savoir si je suis le seul à rencontrer ce pb d'enregistrement de la macro. Je ne trouve rien sur le net...

    Merci encore

    Bonne journée

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2012
    Messages : 5
    Par défaut
    Bonjour

    Il faut corriger
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nomVb = Sheets(ws.Name).CodeName
    par

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Merci beaucoup !!

    ça marche très bien. Dégoûté que la réponse fut aussi "simple"...

    Encore merci

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

Discussions similaires

  1. sauvegarder une macro
    Par salseropom dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/09/2019, 15h55
  2. [XL-2007] erreur 80004005 a la sauvegarde d'un ppt par une macro
    Par loloiss dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/01/2011, 16h00
  3. [PPT-2007] Sauvegarder une presentation sans les macros
    Par Akxn0008 dans le forum VBA PowerPoint
    Réponses: 1
    Dernier message: 08/07/2009, 19h06
  4. [E-07] Exécution sans interruption d'une macro automatique de sauvegarde
    Par JMVBAExcel dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/01/2009, 21h40
  5. Commande pour ajouter une sauvegarde dans une macro
    Par Tinien dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/09/2008, 15h03

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