Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
Bonjour,
J'utilise une macro pour générer une facture dans une feuille du classeur actif. Jusqu'ici, pas de problème.
Ensuite, via un bouton de commande, je sauvegarde la feuille active (la facture) avec un chemin d'accès spécifier. Jusqu'ici, pas de problème.
Le problème est que la feuille active qui est copiée (la facture) prend le bouton de commande qui se trouve sur celle-ci et le code VBA.
Suite à des recherches sur le Net, j'ai trouvé des solutions pour supprimer le code VBA, mais pas pour copier sans le code VBA et sans les contrôles activeX (les boutons de commande).
Il existe peut être un paramètre lors de la copie ?
Voici le code que j'utilise :
Code:
Private Sub CommandButton1_Click()
Dim Nom As String
Nom = Range("B16")
Sheets("Facture").Copy
ActiveWorkbook.Sheets(1).Range("C33") = Range("C33").Value
ActiveWorkbook.SaveAs ActiveWorkbook.Path & "C:\" & "Facture_" & Nom & ".xlsx", FileFormat:= _
xlOpenXMLWorkbook, CreateBackup:=False
ActiveWorkbook.Close
Range("A20:A26").ClearContents
Range("C20:C26").ClearContents
Range("D20:D26").ClearContents
Range("F20:F26").ClearContents
Range("D9").ClearContents
End Sub
Précision, je sauvegarde sans prise en charge de macro (format .xlsx), ce qui me fait zapper une fonction (dans un module) qui permet de convertir un nombre en texte (en cellule C33), ce pourquoi je recopie le contenu de cette cellule.
Cet enregistrement (sans macro) me supprime les modules mais pas le code de la feuille.
Si quelqu'un a une solution, merci d'avance
Private Sub CommandButton1_Click()
Dim Nom As String
Nom = Range("B16")
Sheets("Facture").Copy
ActiveWorkbook.Sheets(1).Range("C33") = Range("C33").Value
ActiveWorkbook.Sheets(1).OLEObjects("CommandButton1").Delete
ActiveWorkbook.SaveAs ActiveWorkbook.Path & "C:\" & "Facture_" & Nom & ".xlsx", FileFormat:= _
xlOpenXMLWorkbook, CreateBackup:=False
ActiveWorkbook.Close
Range("A20:A26").ClearContents
Range("C20:C26").ClearContents
Range("D20:D26").ClearContents
Range("F20:F26").ClearContents
Range("D9").ClearContents
End Sub
Cet enregistrement (sans macro) me supprime les modules mais pas le code de la feuille.
N'est-il pas possible de sauvegarder la facture dans un nouveau classeur qu'on enregistre dans un dossier prévu à cet effet ?
Un truc dans ce goût-là :
Code:
Sub Macro1()
Cells.Select
Selection.Copy
Workbooks.Add
Cells.Select
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveWorkbook.SaveAs Filename:="C:\factures\factures001.xls", FileFormat _
:=xlNormal, Password:="", WriteResPassword:="", ReadOnlyRecommended:= _
False, CreateBackup:=False
ActiveWorkbook.Close
End Sub
Bonjour,
Je reviens sur le sujet car je m'étais contenté d'une solution partielle (suppression des boutons de commande).
Pour supprimer le code de la page ainsi que les éventuels modules, voici ce que j'ai trouvé et testé avec réussite :
Code:
Dim VBComp As Object
Dim VBComps As Object
Set VBComps = ActiveWorkbook.VBProject.VBComponents
For Each VBComp In VBComps
Select Case VBComp.Type
Case 100
With VBComp.CodeModule
.DeleteLines 1, .CountOfLines
End With
Case Else
VBComps.Remove VBComp
End Select
Next VBComp
Par contre, vous obtiendrez une erreur si vous ne cochez pas :
Bouton office ==> Options Excel ==> Centre de gestion et de confidentialité ==> Paramètres du centre de gestion et de confidentialité ==> Paramètres des macros ==> Paramètres des macros pour les développeurs ==> Accès approuvé au modèle d'objet du projet VBA
Voila, une fois cette option cochée, ça fonctionne nickel. C'est pratique, sinon, s'il reste du code, au moment de la fermeture du fichier, on a la boite de dialogue qui demande si on veut sauvegarder en format xlsm ou xlsx. Maintenant, on n'a plus ça.
Bonne journée tout le monde
Désolé,
Toujours un message d'alerte au cours de l'enregistrement (xlsx ou xlsm). Solution finale, désactiver ce message avec ;
Code:
Application.DisplayAlerts = False
avant l'enregistrement du fichier et surtout :
Code:
Application.DisplayAlerts = True
après l'enregistrement du fichier (sinon, vous n'aurez plus de message d'alerte qui sont pourtant très utiles)
Maintenant, je pense que le sujet est définitivement résolu.
Bon courage à tous ceux qui se prennent la tête sur Excel
Voici un moyen qui peut servir si pas de priorité esthétique et qui fait ce que demande le titre du post: enregistrer feuille sans bouton et code VBA
VB:
Sub SVGNOVBANOAX()
' Macro enregistrée le 12/11/2012 par Staple
Sheets(1).Copy
ActiveWorkbook.SaveAs "C:\Temp\Test.slk", 2, False
ActiveWorkbook.Close True
End Sub
Avec cette macro, adieu VBA et bouton et aussi un peu plus 😉
Mais s'il s'agit de garder une copie d'une facture, cela peut suffire. 😉
PS: Cet astuce est bien pratique et je l'utilisais jadis pour archiver des factures.
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD