Macro copie d'un classeur

Macrodeb Messages postés 9 Statut Membre -  
Patrice33740 Messages postés 8930 Statut Membre -
Bonjour à toute la communauté de "commentcamarche",

Je viens vers vous car j'ai différentes questions suite à la réalisation d'une macro.

Je souhaite créer une macro qui me permette de créer une copie d'un classeur entier.
Dans ce nouveau classeur, je souhaiterais que toutes les feuilles soient affichées (des feuilles sont masquées dans le docuement d'origine) et que la protection soit retirée.

Voici le début de code :

    
Sub Extraction() 
     
     jour = Day(Now) & "_" & Month(Now) & "_" & Year(Now) '// pour que le nom de la copie, intègre la date (jour - mois - année) 
     monfichier = "C:\Documents and Settings\GTmacrodeb\Mes documents\Suivi Location" & " " & jour 
   

 If Dir(monfichier & ".xls" ) <> "" Then 
 MsgBox ("Un fichier de ce nom existe déjà, veuillez le supprimer/déplacer avant nouvelle copie" ) 
  Else 
  monfichier = monfichier & ".xls" 
  
  ActiveWorkbook.SaveAs Filename:= _ 
          monfichier, _ 
          FileFormat:=xlNormal, Password:="", WriteResPassword:="", _ 
          ReadOnlyRecommended:=False, CreateBackup:=False 
  
          MsgBox ("Fichier créé dans Mes Documents" ) 
  
  monfichier.Worksheets("Archivage Matériel" ).unhide 
              
              End If 
          
          End Sub


Pour l'instant je n'ai pas encore pris en compte la partie retrait de la protection car j'ai un message d'erreur avec ce code
"Erreur d'exécution '424' Objet requis" pour la ligne monfichier.Worksheets("Archivage Matériel" ).unhide

Une autre question : Est-il possible de créer le nouveau fichier avec l'ensemble des feuilles rendues visibles sans qu'il s'ouvre nécessairement ?

Merci d'avance pour votre aide.
A voir également:

2 réponses

Patrice33740 Messages postés 8930 Statut Membre 1 782
 
Bonjour,

L'absence de déclaration des variables est la source de nombreux problèmes et de manque de carté dans le code, c'est pourquoi il est conseillé d'utiliser systématiquement au début de chaque module :
Option Explicit
Dans ton cas, la ligne :

monfichier = monfichier & ".xls"
entraine la déclaration implicite de la variable monfichier comme chaine de caractère, d'où l'erreur lorsque tu tentes d'utiliser cette même variable comme un objet workbook à la ligne :
monfichier.Worksheets("Archivage Matériel" ).unhide 
0
Patrice33740 Messages postés 8930 Statut Membre 1 782
 
Outre le fait que la syntaxe .unhide est incorrecte, "Erreur d'exécution '424' Objet requis" vient du fait que monfichier (il faudrait utiliser une autre variable car celle-ci est déjà utilisée) n'a pas été affecté par une instruction du type :
Set monfichier = ...
0
Paf
 
Bonsoir

monfichier.Worksheets("Archivage Matériel" ).unhide

pour excel 2003, ça s'écrierait (a priori):
monfichier.Worksheets("Archivage Matériel" ).Visible = True

Par ailleurs ce code intervenant après l'enregistrement du classeur, quelle action pourra-t-il avoir ?

Bonne soirée ( nuit ? ou journée?)
0