Ouvrir une copie d'un Workbook "Read-Only", Modifier, Imprimer et Refe

GabrielTurbide Messages postés 2 Statut Membre -  
Kalissi Messages postés 221 Statut Membre -
Bonjour,

Dans un fichier Excel, je voudrais une macro qui vient ouvrir un autre fichier Excel, le modifier et imprimer certaines pages.

Le problème est que le fichier externe à modifier ne peut pas être ouvert en écriture. Il faudrait donc ouvrir une copie, la modifier, imprimer les pages en question et fermer cette copie, sans toucher à l'original. Le fichier modifié n'est plus utile suite à l'impression, alors il est préférable de ne pas l'enregistrer, ou de supprimer la copie après son enregistrement.

Sub Imprimer(NumJob)

Dim app As New Excel.Application
Dim sourceWorkbookPro As Workbook

app.Visible = False

Set sourceWorkbookPro = app.Workbooks.Open("C:\Users\xx.xx\Documents\DocumentACopier.xlsm", 0, ReadOnly:=True)

...

sourceWorkbookPro.Close SaveChanges:=False
app.Quit
Set app = Nothing

End Sub


De cette manière, je ne peux pas le modifier. J'ai pensé à enregistrer une copie pour ensuite le modifier et supprimer la copie, mais y a-t-il une façon de ne rien enregistrer pour diminuer le temps du code?

Merci d'avance! :)

Gabriel.

2 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour, pourquoi ne peux-tu pas le modifier?
    0
  2. Kalissi Messages postés 221 Statut Membre 20
     
    Bonjour,

    Exemple :

    Option Explicit
    '
    
    Public Sub ImprimerV2(NumJob)
    
        Dim ClasseurACopier As Workbook
        
        Set ClasseurACopier = Workbooks.Open("C:\Document\Dev\Excel_VBA\Calculs.xlsm", 0, ReadOnly:=True)
        ClasseurACopier.SaveAs ("C:\Document\Dev\Excel_VBA\CalculsCopie.xlsm")
        
        ' Traitement du fichier - Modification, Impression, etc ...
        ' ton code ici ...
        
        ClasseurACopier.Close
       
        ' Suppression de la copie de travail
        Kill "C:\Document\Dev\Excel_VBA\CalculsCopie.xlsm"
        
        ThisWorkbook.Activate
    
    End Sub
    
    


    Note : Il n'est pas vraiment utile d'instancier une itération de Excel ... Dim app As New Excel.Application
    si tu est déjà dans un classeur Excel. Selon la syntaxe que tu applique on croirait que tu code en VBS dans le bloc note.

    K
    0