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 :

Une fonction qui efface le code après fermeture?


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2009
    Messages : 106
    Par défaut Une fonction qui efface le code après fermeture?
    Bonjour,

    J’ai écrit une série de codes qui transforme un fichier de base et dont l’issue est de lénregistrer sous un autre nom, puis de tout fermer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    Sub Save_Result()
     
    ActiveWorkbook.SaveAs ThisWorkbook.Path & "\" & "NOM_FICHIER"
     
    End Sub
    puis pour finir........


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    Sub FermerClasseurExcel()
     
     Application.DisplayAlerts = False
     ActiveWorkbook.Close
     Application.Quit
     
    End Sub

    Je souhaiterais que ce fichier renommé n’ait plus les macros du fichier de base. Du genre à « delete maintenant toutes les macros, enregistre sous un autre nom et ferme » ou quelque chose qui y ressemble.

    Cela me semble contre toute logique, un peu comme les messages qui s’autodétruisent dans les James Bond, mais peut être il y a t’il une fonction ?

    Merci par avance

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 678
    Par défaut
    salut,
    les macros sont créées dans des modules. Ceux-ci peuvent être créés et donc détruit depuis le code VBA. Par contre, il te faut passer par un fichier tiers, car comme tu l'indiques, on ne peut se supprimer "soi même"
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Un exemple trouvé sur le web par Mister Pearson, il existe aussi des codes par syllkiroad

    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
    Sub SaveWithoutMacros()
     
    'Purpose : To save a copy of the active workbook without macros
     
    'PLEASE NOTE : You must choose Tools, References and select the
    'Microsoft Visual Basic for Applications Extensibility library
     
    Dim vFilename As Variant
    Dim wbActiveBook As Workbook
    Dim VBComp As VBIDE.VBComponent
    Dim VBComps As VBIDE.VBComponents
     
     
    On Error GoTo CodeError
     
     
    'Get a filename to save as
    vFilename = Application.GetSaveAsFilename(filefilter:="Microsoft Excel Workbooks,*.xls", _
                                            Title:="Save Copy Without Macros")
     
    If vFilename = False Then Exit Sub  'User chose Cancel
     
    ActiveWorkbook.SaveCopyAs vFilename
    Set wbActiveBook = Workbooks.Open(vFilename)
     
     
    'Now strip all VBA, modules, userforms from the copy
    'This code is from Chip Pearson's website http://www.cpearson.com
     
    Set VBComps = wbActiveBook.VBProject.VBComponents
     
    For Each VBComp In VBComps
       Select Case VBComp.Type
          Case vbext_ct_StdModule, vbext_ct_MSForm, _
                vbext_ct_ClassModule
             VBComps.Remove VBComp
          Case Else
             With VBComp.CodeModule
                .DeleteLines 1, .CountOfLines
             End With
       End Select
    Next VBComp
     
    wbActiveBook.Save
     
    Exit Sub
     
    CodeError:
    MsgBox Err.Description, vbExclamation, "An Error Occurred"
     
     
     
    End Sub

    L'exemple par silkyroad, regardes le module supprimetout

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Mars 2009
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mars 2009
    Messages : 106
    Par défaut
    Cela marche nickel!

    Merci beaucoup!

    Je me demnde par contre si je peux faire un code sans avoir à utiliser un add-in, car les nouveaux utilisateurs potentiels de la macro risquent d'être un peu paumés avec cet ajout manuel à faire.

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/04/2015, 11h01
  2. Réponses: 1
    Dernier message: 09/02/2009, 01h36
  3. Réponses: 3
    Dernier message: 26/06/2008, 21h33
  4. Réponses: 11
    Dernier message: 05/02/2008, 13h10
  5. Réponses: 3
    Dernier message: 29/01/2008, 12h04

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