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 :

Supprimer le code VBA private sub d'une feuille [XL-2019]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2020
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Janvier 2020
    Messages : 129
    Par défaut Supprimer le code VBA private sub d'une feuille
    Bonjour le forum
    voici mon 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
    Worksheets("Selection").Copy                'copier l'onglet selection dans un nv fichier
    ActiveWorkbook.Application.Dialogs(xlDialogSaveAs).Show nouveau_fichier 'enregistrer-sous ce fichier, avec boite de dialogue Excel
                                                                            'nouveau_fichier = chemin+nomfichier+.xlsx
     
    'supprimer le code de la feuille
    With ActiveWorkbook.VBProject.VBComponents _
                (ActiveWorkbook.Sheets("Selection").CodeName).CodeModule
                .DeleteLines 1, .CountOfLines
                .CodePane.Window.Close
            End With
     
    'purger la feuille des cellules en trop
    '...
    '....
     
     
            'enregistrer le fichier
            ActiveWorkbook.Save
    Je copie la feuille d'un fichier existant dans un fichier tout neuf. La feuille d'origine porte un code (Worksheet_change, worksheet_selectionchange...).
    Bien que j'enregistre mon nouveau fichier en .xlsx (donc sans macro??) ma nouvelle feuille porte encore son code. Qui me bloque pour la suite.
    J'ai essayé plusieurs méthodes pour supprimer ce code, dont celle ci dessus, mais à chaque fois ça bloque, avec messages d'erreur divers et variés.

    Quelqu'un aurait une piste?

    Nota : je tiens à passer par la fenêtre de dialogue "enregistrement" pour pouvoir gérer le nom du fichier, le chemin, au cas où celui donner par la macro ne convienne pas à l'utilisateur.

    Merci d'avance
    Benoit

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par BenoitL77 Voir le message
    Bien que j'enregistre mon nouveau fichier en .xlsx (donc sans macro??) ma nouvelle feuille porte encore son code. Qui me bloque pour la suite.
    Bonjour,

    Même en le fermant et en le rouvrant, et en le sauvegardant dans le bon format ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2020
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Janvier 2020
    Messages : 129
    Par défaut
    Bonjour Eric, merci pour ce retour rapide

    Effectivement, je ferme, je réouvre et le code à disparu.
    J'en déduit qu'il faut ajouter un "close" et un "open" à mon code?

    Est ce qu'il y aurai une méthode pour copier en excluant le code?

    Merci
    Benoit

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2020
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Janvier 2020
    Messages : 129
    Par défaut
    Je viens d'ajouter un Application.EnableEvents = False à la place du With. Et un Application.EnableEvents = True à la fin
    ça empêche le code de bloquer la 'purge'.
    A la fin, le code est toujours présent. Mais si je ferme/ouvre, il n'est plus là.

    Et ça me va bien comme ça !

    Je trouve ça bizarre quand même...pourquoi ça marche comme ça?

    Merci et bonne soirée
    Benoit

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par BenoitL77 Voir le message
    A tester. J'ai mis le format du fichier en paramètre, à voir si cela fonctionne chez toi.
    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
     
    Sub TestSauvegarde()
     
    'Dim nouveau_fichier As String
     
     
          ' nouveau_fichier = ActiveWorkbook.Path & "\MonFichier.xlsx"
     
            'copier l'onglet selection dans un nv fichier
            Worksheets("Selection").Copy
            With ActiveWorkbook.Application.Dialogs(xlDialogSaveAs)
     
                .Show nouveau_fichier, xlOpenXMLWorkbook 'enregistrer-sous ce fichier, avec boite de dialogue Excel
                                                                            'nouveau_fichier = chemin+nomfichier+.xlsx
            End With
            'supprimer le code de la feuille
            With ActiveWorkbook.VBProject.VBComponents _
                        (ActiveWorkbook.Sheets("Selection").CodeName).CodeModule
                        .DeleteLines 1, .CountOfLines
                        .CodePane.Window.Close
            End With
     
            'purger la feuille des cellules en trop
            '...
            '....
     
     
            'enregistrer le fichier
            ActiveWorkbook.Save
     
    End Sub

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Personnellement, je n'aime pas faire écrire ou supprimer des codes VBA par lui-même surtout si ce code doit fonctionner sur d'autres PC

    Une solution qui fonctionne avec une procédure à placer dans un moduie standard (shtData est le CodeName de la feuille que l'on copie)
    La feuille est copiée dans un nouveau classeur que l'on sauve en classeur sans macro (xlsx) et on le ferme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub CopySheet()
      shtData.Copy   
      Application.DisplayAlerts = False
      ActiveWorkbook.SaveAs Filename:=Format(Date, "yymmdd") & "- Test", FileFormat:=xlOpenXMLWorkbook
      Application.DisplayAlerts = True
      ActiveWorkbook.Close
    End Sub
    Si ce sont des procédures événementielles de type WorkSheet, une autre solution est d'utiliser les procédures événementielles préfixées Workbook_Sheet dans ThisWorkbook
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  7. #7
    Membre confirmé
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2020
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Janvier 2020
    Messages : 129
    Par défaut
    Merci Messieurs pour ces retours.
    Encore une fois je cherche des trucs qui s'avèrent compliqués...

    Je vais donc resté sur la solution du applications.enableEvents décrite dans mon précédent post.
    Même si je travaille un peu dans ce nouveau fichier avant de l'avoir fermé/ouvert, le code résistant ne peut plus me gêner une fois la purge faite.
    Il ne gêne que pour faire la purge.

    @Eric
    J'ai testé ton code et ça plante toujours en ligne 17-18, avec le message "L'accès par programme au projet Visual Basic n'est pas fiable"...
    Comme quoi, même Excel est d'accord avec Philippe sur ce point ! !
    A ta dispo pour tester autre chose si ta curiosité t'y pousse.

    Pour ma part, sujet clos

    Encore merci
    Benoit

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

Discussions similaires

  1. [XL-2016] Supprimer le code XML du Ruban avec une macro VBA
    Par curt dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/11/2017, 11h20
  2. [XL-2007] Code VBA à la place d'une formule
    Par maxval18 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 18/12/2012, 17h09
  3. Réponses: 5
    Dernier message: 17/02/2011, 21h12
  4. [XL-2003] Supprimer une sub dans une feuille
    Par alainb dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/06/2010, 20h16
  5. Réponses: 2
    Dernier message: 09/06/2006, 14h38

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