Macro copie d'un classeur

Macrodeb Messages postés 9 Statut Membre -  
Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   -
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.

2 réponses

  1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    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
    1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
       
      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
  2. 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