Macro qui supprime une macro

Encore moi !

Grâce à Theze j'ai pu avancer à pas de géant dans mon fichier, seul me persiste un problème.

Dans ma feuille DEVIS, j'ai un bouton ENREGISTRER SOUS, qui permet d'enregistrer le fichier en fonction du nom contenu en C16.

Ce que je voudrais c'est une macro qui efface la macro ENREGISTRER SOUS dans les fichier enregistré.

Est ce possible?

46magifirst2.xlsm (157.33 Ko)

Bonjour,

S'il n'y a pas d'autres macros qui, elles, ne doivent pas être effacées, il te suffit de procéder à un enregistrement en .xlsx, les macros disparaîtront automatiquement.

Faire précéder la commande d'enregistrement de :

Application.DisplayAlerts = False

pour éliminer le message d'alerte qu'émettra Excel.

Cordialement.

Je doit juste supprimer celle ci, les autres doivent restées

Re,

Sub EnregistrerSous()
    Dim nWb$, chDos$
    nWb = ActiveSheet.Range("C6") & ".xlsm"
    chDos = "C:\Users\oem\Desktop\DEVIS\"
    ThisWorkbook.SaveCopyAs chDos & nWb
    With Workbooks.Open(chDos & nWb)
        With .VBProject.VBComponents
            .Remove .Item("Module2")
        End With
        .Worksheets("Devis").Shapes("Rectangle 1").Delete
        .Close True
    End With
    Application.Quit
End Sub

On enregistre une copie. On l'ouvre ! On supprime le module contenant la macro. Et dans la foulée on supprime le bouton Enregistrer sous qui déclenchera une erreur si on l'utilise ! On referme le classeur en enregistrant. On quitte.

Suggestions :

  • réduire le nombre de module à 2, dont un pour la macro à supprimer... (la multiplication des modules ne se justifie en aucune façon...)
  • un renommage adéquat des formes et l'utilisation de boucles améliorerait de façon décisive le code
  • tout code enregistré (mais il vaudrait mieux se passer définitivement d'enregistrer) est mauvais tant qu'il n'a pas été entièrement réécrit pour notamment qualifier les expressions (ce que ne fait jamais l'enregistreur) et éliminer le code inutile (dont le volume est toujours important dans le code enregistré).

Cordialement.

Merci énormément ça fonctionne parfaitement !

Par contre je ne comprend pas trop t'es suggestions.

Globalement tu dis que j'ai trop de module et d'en faire que 2 c'est ça ? Un où j'ai la macro a supprimé et l'autre où il y a les autres fonctions ?

Cordialement

Deux petit soucis hier cela fonctionnait parfaitement,

Aujourd'hui j'ai une erreur 1004 à la ligne

With.VBProject.VBComponents

De plus le nom du fichier enregistré est XXX XXX.xlsm alors que je voudrais que ce soir juste XXX.xlsm

Pouvez vous m'aider ?

Cordialement

Little UP !

(Ô toi grand maître MFerrand je te conjure par le toute puissance que si tu passe par la pourrais tu égailler mon univers de ton infinie connaissance !)

Bonjour !

Ça marchait et ça marche plus ! A-priori, je ne sais pas pourquoi...

Pourrais-tu faire passer un fichier où ça ne marche pas, que je puisse regarder de plus près ?

C'est bon j'ai réglé le soucis.

Cela venait d'une case non coché dans les options d'excel.

Je vais être un peu abusif mais j'aimerai, si possible, que lorsque je fasse "ENREGISTRER SOUS", le classeur principal, en l'occurence MAGIfirst, se ferme et que le nouveau s'ouvre et affiche une MSGBOX du style "Fichier MAGIfirst fermé, ouverture du fichier XXX(nom contenu en cellule C6)"

est ce possible?

Cordialement


Résolution du dernier problème mais soucis lorsque je crée ma MSGBOX

D'ou viens mon soucis?

MsgBox("Fichier MAGIfirst fermé, ouverture du fichier" & " " & Range("C6"), vbOKOnly, "Ouverture du fichier" & " " & Range("C6"))
3magifirst.xlsm (157.29 Ko)

Si tu veux rester sur le nouveau classeur, il ne faut pas terminer par Application.Quit...

En utilisant SaveAs l'ancien classeur disparaît automatiquement au profit du nouveau, ce qui ne permettait pas de prolonger la procédure par l'élimination de la macro (c'est celle qui est en train de s'exécuter...)

C'est pourquoi j'ai utilisé SaveCopyAs,où le classeur est créé mais pas ouvert. A cemoment là, on l'ouvre et on supprime SA macro (il n'y a pas d'ambiguïté).

On peut continuer en lui faisant afficher un message et se fermer. Et le nouveau classeur, déjà devenu actif en s'ouvrant sera alors le seul.

J'ai reussi en modifiant un peu le code,

dites moi ce que vous en pensez et si je dois le modifier

Sub EnregistrerSous()
    Dim nWb$, chDos$
    nWb = ActiveSheet.Range("C6") & ".xlsm"
    chDos = "C:\Users\fifecaprod\Desktop\MATERIEL\"
    ThisWorkbook.SaveCopyAs chDos & nWb
    With Workbooks.Open(chDos & nWb)
        With .VBProject.VBComponents
            .Remove .Item("Module2")
        End With
        .Worksheets("DEVIS").Shapes("Rectangle 1").Delete
        .Close True
    End With
    Workbooks.Open (chDos & nWb)
    MsgBox "Fichier MAGIfirst fermé, ouverture du fichier" & " " & Range("C6"), vbOKOnly, "Ouverture du fichier" & " " & Range("C6")
    Workbooks("MAGIfirst").Close True
End Sub
Sub EnregistrerSous()
    Dim nWb$, chDos$
    nWb = ActiveSheet.Range("C6") & ".xlsm"
    chDos = "C:\Users\fifecaprod\Desktop\MATERIEL\"
    ThisWorkbook.SaveCopyAs chDos & nWb
    With Workbooks.Open(chDos & nWb)
        With .VBProject.VBComponents
            .Remove .Item("Module2")
        End With
        .Worksheets("DEVIS").Shapes("Rectangle 1").Delete
       [barrer].Close True[/barrer]
        .Save
    End With
    [barrer]Workbooks.Open (chDos & nWb)[/barrer]
    MsgBox "Fichier MAGIfirst fermé, ouverture du fichier" & " " & Range("C6"), [barrer]vbOKOnly[/barrer], "Ouverture du fichier" & " " & Range("C6")
    ThisWorkbook[barrer]Workbooks("MAGIfirst")[/barrer].Close True
End Sub

Inutile de le fermer pour le rouvrir immédiatement. Par contre l'enregistrer est prudent.

vbOKOnly est inutile, par défaut (et sa valeur est 0). Mais laisser vide entre les deux virgules si on ne met pas autre chose.

Le nom classeur était dans la variable nWb, sauf si tu le souhaites sans extension...

Préférer ThisWorkbook quand il s'agit du classeur qui contient la macro en cours d'exécution.

J'avais pas vu le premier Close True qui ferme le classeur crée

Je vais donc opter pour votre solution

Merci beaucoup

Grand maître MFerrand,

À partir de ce fichier comment puis je créées des liste déroulante semi automatique ? (Par rapport aux tailles)

Merci

Qu'entends-tu par là ? Et où ?

J'ai ouvert un nouveau topic concernant cette question

https://forum.excel-pratique.com/excel/liste-deroulante-et-recherche-t90857.html

Cette question a déjà été traitée plusieurs fois il me semble...

Mais il serait bon de mettre d'abord en place ta liste pour que quelqu'un puisse s'attaquer au problème.

Cordialement.

Ma liste est déjà mise en place.

J'ai suivi le fichier d'Amadeus qu'il m'a envoyé dans le lien que j'ai cité.

Le problème est que lorsque je vais dans validation des données et qu'en source je met la formule, cela me marque "La source est reconnue comme erronée"

Je voit pas d'où viens le problème. Peux-etre parce que ma liste est sur une page différente que celle ou il y a ma cellule de liste déroulante?

J'ai pas vu le sujet, ni la solution proposée (et pas le temps...) mais quand tu affectes ta liste, elle doit être valide et ne pas provoquer d'erreur...

Rechercher des sujets similaires à "macro qui supprime"