Ne pas copier le code VBA

phiphi27

XLDnaute Junior
Bonjour
Voila j'ai ce code qui me permet de sauvegarder la feuille "Calendrier" dans un autre classeur mais je ne veux pas que le code VBA soit copier pouvez vous adapter ce code
Merci

Code:
Sub Sauvegarde()
   
ActiveSheet.Unprotect 'Désactive la protection
    ActiveSheet.Shapes("AutoShape 90").Select 'Masque le bouton de sauvegarde
    Selection.ShapeRange.ZOrder msoSendToBack
MsgBox ("Bonjour ") & Environ("username") & (" ,tu vas créer une sauvegarde de cette feuille 'Calendrier'") 'Affiche une Box avec message

Dim Nouveaufichier As String
ActiveSheet.Copy
With ActiveSheet
    .Cells.Copy
    .Cells.PasteSpecial xlPasteValues
     Application.ErrorCheckingOptions.NumberAsText = False 'retire l'option Nb stoké en tant que texte
End With
Nouveaufichier = Application.GetSaveAsFilename
ActiveWorkbook.SaveAs Nouveaufichier & "xls"
MsgBox ("La Feuille 'Calendrier' as été créé et fermé ")
ActiveWorkbook.Close 'Ferme le fichier EXCEL créé
ActiveSheet.Shapes("AutoShape 90").Select 'Affiche le bouton de sauvegarde
Selection.ShapeRange.ZOrder msoBringToFront
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True 'Active la protection de la feuille
End Sub
 

JNP

XLDnaute Barbatruc
Re : Ne pas copier le code VBA

Bonsoir Phiphi27 :),
Le problème est que tu te trouves dans le classeur enregistré, donc si tu supprimes le VBA, celui-ci s'arrête :eek:...
Pour pouvoir enregistrer sans le VBA, il faudrait créer un nouveau classeur, copier ta feuille dedans et enregistrer celui-ci ;).
Bon courage :cool:
 

JNP

XLDnaute Barbatruc
Re : Ne pas copier le code VBA

Re :),
Je ne peux pas copier ma feuille "calendrier" dans un autre classeur sans son code VBA?
Si ton code est dans un module, il ne sera pas copié avec ta feuille. Si c'est le code de ta feuille, tu peux supprimer le texte avec
Code:
With Workbooks("Classeur1").VBProject.VBComponents("Calendrier").CodeModule
.DeleteLines 1, .CountOfLines
End With
en remplaçant Workbooks("Classeur1") par la variable classeur que tu auras créé.
Bon courage :cool:
 

Banzai64

XLDnaute Accro
Re : Ne pas copier le code VBA

Bonjour phiphi27 & JNP

Dans mes tablettes j'avais ceci

Merci à celui qui à fait cette macro

VB:
 'copier (ou déplacer) une feuille d'un classeur sans son code VBA

Sub CopieFeuilleSansMacros()
Dim NomEtChemin$, NomCodeFueille$
  NomEtChemin = ThisWorkbook.Path & "\copier sans code vba.xls" ' Inscrit le nom et le chemin que tu veux

  With ThisWorkbook.Sheets("A copier")
    NomCodeFeuille = .CodeName
    .Copy                                 'Fait une copie de la feuille
'    .Move                                 'Coupe la feuille de ce classeur
  End With
  With ActiveWorkbook
    .SaveAs NomEtChemin
    With .VBProject.VBComponents(NomCodeFeuille).CodeModule
      .DeleteLines 1, .CountOfLines
    End With
    .Save
  End With
End Sub
 

phiphi27

XLDnaute Junior
Re : Ne pas copier le code VBA

Bonjour a tous
Voila ce code VBA appartient à la feuille "Calendrier" je n'arrive pas a l'adapter pour que je puisse copier la feuille avec sa mise en forme sans les formules et sans le code VBA qui reste accroché à la feuille
merci de pour les personnes qui mon donné des bout de code mais comme j'ai très très peu de connaissance en VBA je n'arrive pas à les inserer
A l'avance merci
Phiphi27

Code:
Sub Sauvegarde()
   
ActiveSheet.Unprotect 'Désactive la protection
    ActiveSheet.Shapes("AutoShape 90").Select 'Masque le bouton de sauvegarde
    Selection.ShapeRange.ZOrder msoSendToBack
MsgBox ("Bonjour ") & Environ("username") & (" ,tu vas créer une sauvegarde de cette feuille 'Calendrier'") 'Affiche une Box avec message

Dim Nouveaufichier As String
ActiveSheet.Copy
With ActiveSheet
    .Cells.Copy
    .Cells.PasteSpecial xlPasteValues
     Application.ErrorCheckingOptions.NumberAsText = False 'retire l'option Nb stoké en tant que texte
End With

Nouveaufichier = Application.GetSaveAsFilename
ActiveWorkbook.SaveAs Nouveaufichier & "xls"
MsgBox ("La Feuille 'Calendrier' as été créé et fermé ")
ActiveWorkbook.Close 'Ferme le fichier EXCEL créé
ActiveSheet.Shapes("AutoShape 90").Select 'Affiche le bouton de sauvegarde
Selection.ShapeRange.ZOrder msoBringToFront
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True 'Active la protection de la feuille
End Sub
 

JNP

XLDnaute Barbatruc
Re : Ne pas copier le code VBA

Re :),
A tester sous 2003
Code:
Sub test()
Workbooks.Add
With ActiveWorkbook
ThisWorkbook.Sheets("Test").Copy Before:=.Sheets(1)
.SaveAs Application.GetSaveAsFilename
.Close
End With
End Sub
en remplaçant "Test" par le nom de ta feuille. A priori, le code n'est pas dupliqué, mais je suis en 2010...
A +
 

Lermiton

XLDnaute Nouveau
Re : Ne pas copier le code VBA

Bonsoir phiphi27 et le forum

Il me semble que la solution la plus simple consiste à copier non pas la feuille mais seulement le contenu de la plage utilisée ("UsedRange").

Pour copier dans un classeur vierge :
Code:
Sub Copier_Feuille_dans_Classeur_Vierge()
    Dim Cellule1 As String
    
Rem     Crée un classeur vierge
    Workbooks.Add
Rem     Repère la cellule haut-gauche de la plage utilisée dans la feuille source
    Cellule1 = ThisWorkbook.Sheets("Nom_de_la_Feuille").UsedRange.Cells(1, 1).Address
Rem     Copie la plage utilisée dans la feuille source 
    ThisWorkbook.Sheets("Nom_de_la_Feuille").UsedRange.Copy
Rem     Colle dans la même plage de la feuille active du classeur vierge
'       le contenu des cellules de la feuille source
    ActiveSheet.Range(Cellule1).Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
Rem     Ajouter procédure de sauvegarde

End Sub

Pour copier dans un classeur existant :
Code:
Sub Copier_Feuille_dans_Classeur_Existant()
    Dim Cellule1 As String

Rem     Ouvre le classeur "cible" où la feuille doit être copiée
    Workbooks.Open "Test_Copie.xls"
Rem     Ajoute une feuille vierge à ce classeur
    ActiveWorkbook.Sheets.Add after:=Sheets(ActiveWorkbook.Sheets.Count)
Rem     Repère la cellule haut-gauche de la plage utilisée dans la feuille source
    Cellule1 = ThisWorkbook.Sheets("Nom_de_la_Feuille").UsedRange.Cells(1, 1).Address
Rem     Copie la plage utilisée dans la feuille source
    ThisWorkbook.Sheets("Nom_de_la_Feuille").UsedRange.Copy
Rem     Colle dans la même plage de la feuille active du classeur cible
'       le contenu des cellules de la feuille source
    ActiveSheet.Range(Cellule1).Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
Rem     Ajouter procédure de sauvegarde

End Sub

Bonne soirée.


PS1 : dans ton cas, il me semble que "ActiveSheet.PasteSpecial" conviendrait mieux que "ActiveSheet.Paste"

PS2 : la solution évoquée par Banzai64 fonctionne aussi, mais elle risque de créer un lien entre la feuille copiée et le fichier source s'il y a des formules.
Code:
Sub Copie_de_feuille_Sans_Macros()

Rem     Copie la feuille dans un classeur vierge
    ThisWorkbook.Sheets("Nom_de_la_Feuille").Copy
Rem     Supprime les macros de la feuille copiée
    With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
      .DeleteLines 1, .CountOfLines
    End With
Rem     Ajouter procédure de sauvegarde

End Sub
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : Ne pas copier le code VBA

Re :),
J'ai fait le test et non cela copie aussi les macro qui sont sous la feuille Calendrier
Effectivement, j'ai du louper quelque chose :p.
Avec ce code, cela devrait fonctionner
Code:
[COLOR=blue]Sub[/COLOR] test()
[COLOR=blue]Dim[/COLOR] Feuille [COLOR=blue]As[/COLOR] Worksheet
Workbooks.Add
[COLOR=blue]With[/COLOR] ActiveWorkbook
ThisWorkbook.Sheets("Test").Copy Before:=.Sheets(1)
[COLOR=blue]With[/COLOR] .VBProject.VBComponents(ActiveSheet.CodeName).CodeModule
.DeleteLines 1, .CountOfLines
[COLOR=blue]End With[/COLOR]
Application.DisplayAlerts = [COLOR=blue]False[/COLOR]
[COLOR=blue]For Each[/COLOR] Feuille [COLOR=blue]In[/COLOR] .Worksheets
[COLOR=blue]If[/COLOR] Feuille.Name <> ActiveSheet.Name [COLOR=blue]Then[/COLOR] Feuille.Delete
[COLOR=blue]Next[/COLOR]
Application.DisplayAlerts = [COLOR=blue]True[/COLOR]
.SaveAs Application.GetSaveAsFilename
.Close
[COLOR=blue]End With[/COLOR]
[COLOR=blue]End Sub[/COLOR]
Bon dimanche :cool:
PS : Le code serait différent en 2007/2010, il suffirait d'enregistrer en XSLX pour supprimer les macros sans problème :rolleyes:
 

phiphi27

XLDnaute Junior
Re : Ne pas copier le code VBA

Bonjour a tous
Un grand merci à vous tous pour vos réponses
En fin de compte je me suis apperçu que plusieures codes VBA qui enfin n'était que des macros etaient dns la feuille que je voulais copier.
J'ai donc créé des modules ainsi que pour ma macro "sauvegarde" et cela fonctionne
Je n'ai plus de code sous la feuille mais je garde la mise en forme sans formules dans les cellules
Amitiés de phiphi27
 

Discussions similaires

Statistiques des forums

Discussions
312 217
Messages
2 086 353
Membres
103 196
dernier inscrit
N-TR86