Sub Impression()
Dim Chemin As String, ExcelAppli As Object, OpFichier As Object, FichierDejaOuvert As Boolean
FichierDejaOuvert = False
Chemin = Application.GetOpenFilename 'recuperation du fichier
On Local Error Resume Next
Set ExcelAppli = GetObject(, "Excel.Application") 'ici on essaye de recuperer une session excel existante
If Nothing Is ExcelAppli Then 'si pas de process excel en cours
Set ExcelAppli = CreateObject("Excel.Application") 'on lance excel
'un petit truc en passant, ici vous pouvez ajouter : ExcelAppli.visible = True si vous voulez ouvrir excel graphiquement
Set OpFichier = ExcelAppli.Workbooks.Open(Chemin) 'on ouvre le fichier
OpFichier.PrintOut Copies:=1, Collate:=True 'on lance l'impression
OpFichier.Close False 'on ferme le fichier
ExcelAppli.Quit 'on ferme excel
Else 'process excel en cours
On Error Resume Next
ExcelAppli.Workbooks(Dir(Chemin)).Activate 'on verifi si ce fichier est deja ouvert
If Err = 9 Then 'il n'est pas ouvert
ExcelAppli.Application.ScreenUpdating = False
Set OpFichier = ExcelAppli.Workbooks.Open(Chemin) 'on l'ouvre
Else 'il est deja ouvert
Set OpFichier = ExcelAppli.ActiveWorkbook 'on le recupere
FichierDejaOuvert = True
End If
On Error Resume Next
OpFichier.PrintOut Copies:=1, Collate:=True 'on lance l'impression
If FichierDejaOuvert = False Then
OpFichier.Close False 'le fichier n'etait pas ouvert donc on le referme
ExcelAppli.Application.ScreenUpdating = True
End If
Err.Clear
End If
End Sub
Remarque :
Un titre un peu racoleur et pas tout a fait vrai, vous l'aurez compris. Car effectivement dans tout les cas, excel et le fichier seront ouvert soit uniquement dans un process excel, donc non visible (mise a par le process lui meme) ou soit dans une session excel existante qu'elle soit graphiquement visible ou non.