Savoir l'imprimante active

bonjour,

j'effectue des impression globale de base de donnée sur imprimante reelle, ça marche nickel, la macro se compose ainsi :

je charge les données j'imprime, je range les données, et au suivant

pour cela j'utilise le code vba :

Application.Dialogs(Excel.XlBuiltInDialogPrinterSetup).Show

qui ouvre une boite de dialogue et me permet de choisir une imprimante

mais je veux rajouter pdf creator, mais cela inclus un code pour automatiser le nom d'enregistrement, l'endroit d'enregistrement ...

existe t'il un code vba dont le but est celui-ci :

si le resultat de DialogPrinterSetup.Show = "PDF creator" alors

code automatique d'enregistrement

fin de si

merci d'avance

Bonjour babouze64,

Après avoir sélectionné ton imprimante dans la boîte de dialogue, tu peux utiliser le code

Application.ActivePrinter

pour détecter l'imprimante active.

aprés plusieurs essais, rien de concluant,

j'ai donc décidé d'effectuer 2 macros différentes,

1 pour l'impression physique

1 pour pdf créator

et du coup plus de problème, meme si j'aurai préféré une seule macro.

A+

Si tu le souhaites, poste tes 2 macros qu'on y jette un œil...

macro impression pdf créator

Option Explicit

' Ne pas oublier de cocher la bibliothèqe PDFCreator
' dans le menu Outils / Références de Visual Basic Editor

' API Windows pour faire une temporisation en millisecondes
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

' Constantes pour les temporisations
Private Const maxTime = 10    ' en secondes
Private Const sleepTime = 250 ' en millisecondes

' ---
' IMPRESSION D'UN CLASSEUR EXCEL EN PDF
' ---
' Entrée : strPDFName    <- Nom du fichier PDF à générer (facultatif)
'                           En l'absence de nom de fichier, le PDF
'                           généré reprend le nom du classeur Excel.
'          strDirectory  <- Chemin de stockage du fichier PDF (facultatif)
'
Public Sub SaveAsPDF(Optional ByVal strPDFName As String = "", Optional ByVal strDirectory As String = "")

  ' Quelques variables...
  Dim pdfc As PDFCreator.clsPDFCreator
  Dim DefaultPrinter As String
  Dim c As Long
  Dim OutputFilename As String
  Dim mavariable As String
  mavariable = Format(Date, "mmmm yyyy")

  ' Instancier un nouvel objet PDFCreator
  Set pdfc = New clsPDFCreator

 ' Paramétrer l'objet PDFCreator
  With pdfc
    .cStart "/NoProcessingAtStartup"
    .cOption("UseAutosave") = 1
    .cOption("UseAutosaveDirectory") = 1

    ' Chemin de destination
    ' Par défaut : dossier 'Mes documents' de l'utilisateur
    If strDirectory = "" Then
      strDirectory = Environ("USERPROFILE") & "\Bureau\BILAN AF PDF de " & mavariable
    End If
    .cOption("AutosaveDirectory") = strDirectory

    ' Nom du fichier PDF à générer
    .cOption("AutosaveFilename") = _
      IIf(strPDFName = "", Sheets("presentation").Range("I15").Value, strPDFName)

    ' Format de sauvegarde (0 = PDF)
    .cOption("AutosaveFormat") = 0

    ' Mémoriser l'imprimante par défaut
    ' et définir PDFCreator à la place
    DefaultPrinter = .cDefaultPrinter
    .cDefaultPrinter = "PDFCreator"
    .cClearCache

    ' Imprimer les feuilles sélectionnées
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True

    .cPrinterStop = False
  End With

  ' Temporisation
  c = 0
  Do While (pdfc.cOutputFilename = "") And (c < (maxTime * 1000 / sleepTime))
    c = c + 1
    Sleep 200
  Loop

  ' Nom du fichier PDF produit
  OutputFilename = pdfc.cOutputFilename

  ' Réinstaller l'imprimante d'origine
  With pdfc
    .cDefaultPrinter = DefaultPrinter
    Sleep 200
    .cClose
  End With

  ' Attendre jusqu'à ce que PDFCreator soit supprimé de la mémoire
  Sleep 2000

  ' Vérifier si le fichier a été créé
  If OutputFilename = "" Then
    MsgBox "Création du fichier PDF." & vbCrLf & vbCrLf & _
      "Une erreur s'est produite : temps écoulé !", vbExclamation + vbSystemModal
  End If
End Sub
Public Sub impression_globale_pdf_creator()

Sheets("attente").Select
Application.ScreenUpdating = False

Sheets("Feuil1").Select
    Dim n As Integer
    For n = 1 To Range("P6").Value
'-----------------------------------------------------------------------------------------------------------------------------

' editer

Sheets("ACCUEIL").Select
If Range("D6") = "" Then
Else: Sheets("Feuil1").Select
MsgBox ("une AF est déjà en cours d'édition")
Range("D2") = 1
Exit Sub
End If

Sheets("Feuil1").Select
Range("D2") = Range("P6") + 1

    Application.Run "initialiser"
    Application.Run "effacer"
    Application.Run "importer"
    Sheets("Feuil1").Select
    Range("D2") = 1
    Range("A1").Select

'-----------------------------------------------------------------------------------------------------------------------------

' imprimer

'partie impression
Sheets("PRESENTATION").Select
SaveAsPDF ""

'-----------------------------------------------------------------------------------------------------------------------------

' sauvegarder

'partie sauvegarde
    Sheets("extraction").Select
    Rows(7).Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Rows(2).Select
    Selection.Copy
    Rows(7).Select
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    ActiveWindow.SmallScroll Down:=-12
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Rows(2).Select
    Application.CutCopyMode = False
    Selection.Copy
    Rows(7).Select
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
    Range("A1").Select

'partie MAJ listing Feuil1

    Sheets("Feuil1").Select
    Rows("8:8").Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow
    Range("B8").Select
    ActiveCell.FormulaR1C1 = ""
    Range("B9:N9").Select
    Selection.AutoFill Destination:=Range("B8:N9"), Type:=xlFillDefault
    Range("B8:N9").Select
    Range("A8").Select
    ActiveCell.FormulaR1C1 = "=extraction!R[-1]C[1]"                    'PFAF
    Range("B8").Select
    ActiveCell.FormulaR1C1 = "=extraction!R[-1]C[1]"                    'GSBdD
    Range("C8").Select
    ActiveCell.FormulaR1C1 = "=extraction!R[-1]C[1]"                    'site / n° de cuisine
    Range("D8").Select
    ActiveCell.FormulaR1C1 = "=extraction!R[-1]C[1]"                    'lieu
    Range("E8").Select
    ActiveCell.FormulaR1C1 = "=extraction!R[-1]C[1]"                    'organisme
    Range("F8").Select
    ActiveCell.FormulaR1C1 = "=extraction!R[-1]C[2]"                    'rationnaires midi
    Range("G8").Select
    ActiveCell.FormulaR1C1 = "=extraction!R[-1]C[2]"                    'rationnaires soir
    Range("H8").Select
    ActiveCell.FormulaR1C1 = "=extraction!R[-1]C[3]"                    'rationnaires stockage
    Range("I8").Select
    ActiveCell.FormulaR1C1 = "=extraction!R[-1]C[-2]"                    'date AF
    Range("J8").Select
    ActiveCell.FormulaR1C1 = "=extraction!R[-1]C[-9]"                    'date MAJ
    Range("K8").Select
    ActiveCell.FormulaR1C1 = "=extraction!R[-1]C[188]"                  'NOTE fonc
    Range("L8").Select
    ActiveCell.FormulaR1C1 = "=extraction!R[-1]C[188]"                  'NOTE capa
    Range("M8").Select
    ActiveCell.FormulaR1C1 = "=extraction!R[-1]C[188]"                  'NOTE vétus
    Range("N8").Select
    ActiveCell.FormulaR1C1 = "=extraction!R[-1]C[188]"                  'NOTE SCA
        Range("Q8").Select
        ActiveCell.FormulaR1C1 = "=extraction!R[-1]C[2]"                'commentaire général
    Sheets("Feuil1").Select
    Range("A1").Select

 Application.Run "initialiser"
'

'-----------------------------------------------------------------------------------------------------------------------------

    Next n
'
Application.ScreenUpdating = True
Sheets("Feuil1").Select
Range("A1").Select
End Sub

macro impression imprimante physique

Sub impression_globale()

Sheets("attente").Select
Application.ScreenUpdating = False
'choix de l'imprimante
Application.Dialogs(Excel.XlBuiltInDialog.xlDialogPrinterSetup).Show

Sheets("Feuil1").Select
    Dim n As Integer
    For n = 1 To Range("P6").Value
'-----------------------------------------------------------------------------------------------------------------------------

' editer

Sheets("ACCUEIL").Select
If Range("D6") = "" Then
Else: Sheets("Feuil1").Select
MsgBox ("une AF est déjà en cours d'édition")
Range("D2") = 1
Exit Sub
End If

Sheets("Feuil1").Select
Range("D2") = Range("P6") + 1

    Application.Run "initialiser"
    Application.Run "effacer"
    Application.Run "importer"
    Sheets("Feuil1").Select
    Range("D2") = 1
    Range("A1").Select

'-----------------------------------------------------------------------------------------------------------------------------

' imprimer

'partie impression
    Sheets("PRESENTATION").Select

    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True

'-----------------------------------------------------------------------------------------------------------------------------

' sauvegarder

'partie sauvegarde
    Sheets("extraction").Select
    Rows(7).Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Rows(2).Select
    Selection.Copy
    Rows(7).Select
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    ActiveWindow.SmallScroll Down:=-12
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Rows(2).Select
    Application.CutCopyMode = False
    Selection.Copy
    Rows(7).Select
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
    Range("A1").Select

'partie MAJ listing Feuil1

    Sheets("Feuil1").Select
    Rows("8:8").Select
    Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromRightOrBelow
    Range("B8").Select
    ActiveCell.FormulaR1C1 = ""
    Range("B9:N9").Select
    Selection.AutoFill Destination:=Range("B8:N9"), Type:=xlFillDefault
    Range("B8:N9").Select
    Range("A8").Select
    ActiveCell.FormulaR1C1 = "=extraction!R[-1]C[1]"                    'PFAF
    Range("B8").Select
    ActiveCell.FormulaR1C1 = "=extraction!R[-1]C[1]"                    'GSBdD
    Range("C8").Select
    ActiveCell.FormulaR1C1 = "=extraction!R[-1]C[1]"                    'site / n° de cuisine
    Range("D8").Select
    ActiveCell.FormulaR1C1 = "=extraction!R[-1]C[1]"                    'lieu
    Range("E8").Select
    ActiveCell.FormulaR1C1 = "=extraction!R[-1]C[1]"                    'organisme
    Range("F8").Select
    ActiveCell.FormulaR1C1 = "=extraction!R[-1]C[2]"                    'rationnaires midi
    Range("G8").Select
    ActiveCell.FormulaR1C1 = "=extraction!R[-1]C[2]"                    'rationnaires soir
    Range("H8").Select
    ActiveCell.FormulaR1C1 = "=extraction!R[-1]C[3]"                    'rationnaires stockage
    Range("I8").Select
    ActiveCell.FormulaR1C1 = "=extraction!R[-1]C[-2]"                    'date AF
    Range("J8").Select
    ActiveCell.FormulaR1C1 = "=extraction!R[-1]C[-9]"                    'date MAJ
    Range("K8").Select
    ActiveCell.FormulaR1C1 = "=extraction!R[-1]C[188]"                  'NOTE fonc
    Range("L8").Select
    ActiveCell.FormulaR1C1 = "=extraction!R[-1]C[188]"                  'NOTE capa
    Range("M8").Select
    ActiveCell.FormulaR1C1 = "=extraction!R[-1]C[188]"                  'NOTE vétus
    Range("N8").Select
    ActiveCell.FormulaR1C1 = "=extraction!R[-1]C[188]"                  'NOTE SCA
        Range("Q8").Select
        ActiveCell.FormulaR1C1 = "=extraction!R[-1]C[2]"                'commentaire général
    Sheets("Feuil1").Select
    Range("A1").Select

 Application.Run "initialiser"
'

'-----------------------------------------------------------------------------------------------------------------------------

    Next n
'
Application.ScreenUpdating = True
Sheets("Feuil1").Select
Range("A1").Select
End Sub

Je vois que tu utilises également excel 2007.

La fonction d'export en PDF a été intégrée depuis office 2007.

Peut-être peux-tu utiliser ce code ?

    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "C:\repertoire\fichier.pdf", Quality:=xlQualityMinimum _
        , IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        True

Merci pour l'info,

Je vais essayer, car le code vba que j'utilise me pose probléme, dés que j'utilise le fichier sur un ordinateur ne possedant pas PDF créator, la référence étant absente, un message d'erreur de module apparait, en assayant d'integrer ton code, j'espere contourner ce problème. je te tiens au jus ...

petite requette complementaire :

ton code fonctionne et m'évite d'utiliser pdf créator !! parfait !! mais comment puis-je rajouter à ton code la destination des fichiers pdf (en dessous mon ancien code)

' Chemin de destination souhaité

Dim mavariable As String

mavariable = Format(Date, "mmmm yyyy")

Environ("USERPROFILE") & "\Bureau\BILAN AF PDF de " & mavariable

merci d'avance

Essaie quelque chose comme ça :

' Chemin de destination souhaité
    Dim mavariable As String
    mavariable = Format(Date, "mmmm yyyy")

    repertoire = Environ("USERPROFILE") & "\Bureau\BILAN AF PDF de " & mavariable & "\"
    fichier = "tonfichier.pdf"

    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        repertoire & fichier, Quality:=xlQualityMinimum _
        , IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        True

Voilà le résultat, et comme toujours grace à toi, à vous, à ce forum, ça fonctionne !!

Je poste le code final pour ma part

   Dim Dossier$, Chemin$, PdfFile$
   Dim mavariable As String
   mavariable = Format(Date, "mmmm yyyy")
   Dossier = Environ("USERPROFILE") & "\Bureau\BILAN AF PDF de " & mavariable
   If Dir(Dossier, 16) = "" Then MkDir Dossier
   Chemin = Dossier & "\"
   PdfFile = Sheets("presentation").Range("I15").Value & ".pdf"
Sheets("PRESENTATION").Select
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        Chemin & PdfFile, Quality:=xlQualityMinimum _
        , IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        False

Merci encore

Rechercher des sujets similaires à "savoir imprimante active"