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 du code par une macro


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2015
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2015
    Messages : 59
    Par défaut Supprimer du code par une macro
    Bonjour,

    Je souhaite faire une suppression de la procédure "Private Sub Worksheet_Change(ByVal Target As Range)" par l'intermédiaire d'une macro qui se lance après une première.
    La première macro génère 12 feuilles qui dupliquent une base appelée TRAME et qui portent ensuite le du mois auquel elles correspondent.

    Ce que j'essaie de faire est une boucle qui parcoure les 12 feuilles et supprime cette procédure et uniquement celle-ci rattachée à la feuille. J'ai mis le code suivant dans "Module1" après la macro de copie de feuilles avec une adaptation du code issu de :

    http://www.developpez.net/forums/d56...-macros-macro/

    Mais ça ne marche pas, avec une erreur qui se positionne sur la première ligne de With.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Sub Supprimer_Code_Feuille()
     
    Dim NomFeuille As String, i%
     
        For i = 1 To 12
            NomFeuille = MonthName(i)
            With ActiveWorkbook.VBProject.VBComponents _
                (ActiveWorkbook.Sheets(NomFeuille).CodeName).CodeModule
                .DeleteLines 1, .CountOfLines
                .CodePane.Window.Close
            End With
        Next i
    End Sub
    D'avance merci!

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    cette procédure me semble correcte en termes de syntaxe

    quel est le message d'erreur ? et quelle valeur prend i lors de l'erreur ?

    tu es sûr d'avoir 12 feuilles avec chacune le nom du mois ? le nom est correctement écris ? pas de problème de casse, d'accents ou d'espaces ?

    attention aussi, tu parles de supprimer uniquement une procédure dans chaque module des feuilles, là ton code supprime TOUT, ce qui signifie que si tu as d'autres procédures, elles seront également supprimées

  3. #3
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2015
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2015
    Messages : 59
    Par défaut
    J'ai bien 12 feuilles avec le nom d'un mois les mois sont écrits automatiquement par le biais d'une boucle et d'un formatage de variable. L'erreur est l'accès par pogramme au projet VisualBasic n'est pas fiable.

    Effectivement il y a des accents sur le nom des feuilles écriture en toutes lettres. voilà le code de génération des feuilles :
    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
    Sub Copies_Feuil()
        Dim i%
     
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
        For i = 1 To 12
            Sheets("TRAME").Copy after:=Sheets(Sheets.Count)
            ActiveSheet.Name = MonthName(i)
            ActiveSheet.Range("B1").Range("A1") = DateSerial(Year(Date), i, 1)
            ActiveSheet.Range("B1").Range("A1").NumberFormatLocal = "mmmm"
        Next i
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
     
     
    Application.Dialogs(xlDialogSaveAs).Show (Range("B2").Value & ".xls")
    Application.Run "Supprimer_Code_Feuille"
    End Sub

    Pour ce qui est de ne supprimer qu'une partie du code il faudrait que je fasse comment?

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Ok je vois

    tu vas dans l'onglet Developpeur
    option Sécurité des macros
    dans la fenêtre qui s'affiche, tu coches la case "accès approuvé au modèle de d'objet du projet VBA"

    ça va régler ton erreur d'accès, c'est une sécurité VBA

    concernant le fait de n'effacer que cette procédure, on a deux solutions :

    - détecter le nom de ta Sub, et supprimer toutes les lignes jusqu'à tomber sur une ligne contenant "End Sub"
    - mettre cette procédure en première position dans le module, comme ça on sait qu'elle commence à la ligne 1. Ensuite tu comptes combien de ligne représente cette procédure (18 dans ton exemple ci-dessus), et tu modifies la ligne de code de ta procédure comme ça :


  5. #5
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Avril 2015
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2015
    Messages : 59
    Par défaut
    C'est parfait ça fait exactement ce que je veux. j'ai choisi l'option facile avec le nombre de lignes parce que ne suis pas très doué en programmation.

    Merci beaucoup en tout cas!

  6. #6
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, pour une solution moins bestiale consulte : Visual Basic Editor

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

Discussions similaires

  1. Supprimer les macros par une macro
    Par fring dans le forum Général VBA
    Réponses: 17
    Dernier message: 10/04/2020, 20h21
  2. [XL-2010] Supprimer ligne d'un userform par une macro
    Par herve5785 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 06/02/2014, 12h19
  3. Supprimer les macros par une macro
    Par Yvouille dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 03/09/2013, 20h50
  4. Maj le code VBA par une macro extérieure
    Par benpinta dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/10/2007, 09h16
  5. [Excel] Utiliser une application externe par une macro
    Par thierry2.dlp dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/08/2005, 22h07

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