enregistrer feuille sans bouton et code VBA

meldja

XLDnaute Impliqué
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
 

tototiti2008

XLDnaute Barbatruc
Re : enregistrer feuille sans bouton et code VBA

Bonjour meldja,

peut-être

Code:
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.

Si je rouvre le fichier Facture_.xlsx, pas de code dans la feuille

Edit : bonjour Dormeur74 :)
 
Dernière édition:

Dormeur74

XLDnaute Occasionnel
Re : enregistrer feuille sans bouton et code VBA

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

Oups ! Percussion ! Bojour tototiti2008.
 

meldja

XLDnaute Impliqué
Re : enregistrer feuille sans bouton et code VBA

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
 

meldja

XLDnaute Impliqué
Re : enregistrer feuille sans bouton et code VBA

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
 

Staple1600

XLDnaute Barbatruc
Re : enregistrer feuille sans bouton et code VBA

Bonsoir à tous

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.
 
Dernière édition:

Discussions similaires