Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Copie feuille vers un autre classeur sans copier ses macros.

  • Initiateur de la discussion Initiateur de la discussion Riko
  • Date de début Date de début

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 !

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.
 
Re : Copie feuille vers un autre classeur sans copier ses macros.

Bonjour,

Regarde en bas de cette page dans la section "Discussions similaires" il y a un sujet traitant le problème.

A+
 
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:
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.
 
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+
 
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é.😱

Je retesterai tout ça ce soir.
Merci !
 
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+
 
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:
- 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

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…