Copie feuille vers un autre classeur sans copier ses macros.

Riko

XLDnaute Occasionnel
Bonjour,
je rencontre un problème avec la copie d'une feuille vers un autre classeur.

La feuille (à copier) est remplie via des formules. Dans cette même feuille il y a du code VBA sur l'événement Worksheet_Calculate().
J'ai ajouté un bouton qui devrait permettre d'exporter le contenu de la feuille vers un nouveau classeur.
Code de la macro du bouton:
Code:
Sheets("Cal-couleur").Copy
Cells.Copy
Cells.PasteSpecial Paste:=xlPasteValues
Lors de l'éxécution de la macro d'export, j'ai une erreur due à la macro qui est copiée en même temps que la feuille. Normal puisque plusieurs éléments sont manquants dans le nouveau classeur.
J'aurais voulu savoir comment puis-je faire pour ne pas copier le code VBA de la feuille.

Merci d'avance pour vos réponses.
 

Riko

XLDnaute Occasionnel
Re : Copie feuille vers un autre classeur sans copier ses macros.

Merci de ta réponse mais je ne dois pas être doué je n'arrive pas à adapter.
J'avais trouvé une parade en ajoutant "Application.EnableEvents = False" qui me stoppe l'événement mais il faut que je supprime le code vba.
J'ai testé avec le code que tu as indiqué sur les posts similaires mais j'ai une erreur.
Erreur 1004 - L'accès au programme visual Basic n'est pas fiable
 
Dernière édition:

Riko

XLDnaute Occasionnel
Re : Copie feuille vers un autre classeur sans copier ses macros.

ça fonctionne en modifiant les options de sécurité.
N'y aurait il pas une autre solution car le fichier sera sur un poste où les utilisateurs ne vont pas "gratter" les options d'excel.
 
G

Guest

Guest
Re : Copie feuille vers un autre classeur sans copier ses macros.

Re,

Non c'est la seule solution si tu passes par Sheets("Cal-couleur").Copy

Sinon, tu peux créer un nouveau classeur, quelque chose comme ceci:

Code:
Dim wkDestination as Workbook
Set wkDestination = WorkBooks.Add()
 
ThisWorkBook.Sheets("Cal-Couleur").UsedRange.Copy Destination:= wkDestination.Sheets(1).range("A1")

A+
 

Riko

XLDnaute Occasionnel
Re : Copie feuille vers un autre classeur sans copier ses macros.

oui j'avais essayé mais une erreur était survenue (à cause encore de l'événement calculate sur le fichier original) mais je n'avais pas pris la peine de regarder si le code VBA était présent dans le fichier copié.:eek:

Je retesterai tout ça ce soir.
Merci !
 
G

Guest

Guest
Re : Copie feuille vers un autre classeur sans copier ses macros.

Re,


Code:
'Le calcul de la feuille ne sera pas lancé donc son évènement Calculate non plus
Application.Calculation = xlCalculationManual
 
..... le code de copie
 
Application.Calculation = xlCalculationAutomatic

A+
 

Riko

XLDnaute Occasionnel
Re : Copie feuille vers un autre classeur sans copier ses macros.

Décidemment j'ai toujours une erreur. Je dois être benêt...:confused:

je joins mon fichier car je ne pige plus rien.
Le bouton d'export se trouve dans la feuille 'Cal-couleur'

Merci d'avance.
 

Pièces jointes

  • dernière-Final-Eric-Calendrier-autoV1.1.xls
    273.5 KB · Affichages: 437
G

Guest

Guest
Re : Copie feuille vers un autre classeur sans copier ses macros.

Bonjour,

Voici qui est corrigé et qui fonctionne.
Avant de réactiver le calcul automatique, il faut réactiver le classeur qui contient la macro.
Lorsqu'on ajoute un classeur (Workbooks.Add) il devient le classeur actif.

VB:
Sub Exporter()
'
' Exporter Macro
'
'
    Dim PlageAExporter As Range
    Dim wkDestination As Workbook
    'Le calcul de la feuille ne sera pas lancé donc son évènement Calculate non plus
    Application.Calculation = xlCalculationManual
    'Initialisation de la variable range à exporter (calendrier)
    Set PlageAExporter = ThisWorkbook.Sheets("Cal-couleur").Range("calendrier")
    ' création d'un nouveau classeur (il devient le classeur actif
    Set wkDestination = Workbooks.Add()
    ' copier la plage à exporter
    PlageAExporter.Copy
    'Travailler sur la feuille 1 du classeur destination, cellule B2
    With wkDestination.Sheets(1).Range("B2")
        'collage spécial nécessaire
        .PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                                                             :=False, Transpose:=False
        .PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
                      xlNone, SkipBlanks:=False, Transpose:=False
        .PasteSpecial Paste:=xlPasteColumnWidths, Operation:=xlNone, _
                      SkipBlanks:=False, Transpose:=False
        .PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
                      SkipBlanks:=False, Transpose:=False
        ActiveWindow.DisplayGridlines = False    'ne pas afficher quadrillage
    End With
    
    
    '               IMPORTANT
    'Il faut réactiver ce classeur pour que l'évènement Calculate ne provoque pas d'erreur
    ThisWorkbook.Activate
    'On remet le calcul en automatique
    Application.Calculation = xlCalculationAutomatic
End Sub

Pour enregistrer le classeur avant la fin de la macro:
wkdestination.SaveAs "c:\lenomquetuveux.xls"
A+
 
Dernière modification par un modérateur:

Discussions similaires

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16