IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Impression userform code API [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2016
    Messages : 48
    Par défaut Impression userform code API
    Bonjour,

    Je travaille actuellement sur un petit logiciel muni de plusieurs Userform. Certain Userform possède un bouton permettant de l'imprimer et de choisir l'imprimante que l'on souhaite. Cela permet principalement d'imprimer en PDF avec PDFCreator ou directement sur feuille.

    J'ai trouvé un code parmi différents forums qui permet de réaliser cette fonction :

    Dans un module :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    Const HWND_BROADCAST = &HFFFF
    Const WM_WININICHANGE = &H1A
    Private Declare Function GetPrivateProfileString Lib "Kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long
    Private Declare Function GetWindowsDirectory Lib "Kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long
    Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Any) As Long
    Private Declare Function WritePrivateProfileString Lib "Kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
    Dim Chemin As String
    Dim NC As Long
    Dim Ret As String
     
    Public StrImprimante As String
     
    Sub ChangeImprimanteParDéfaut(Nom As String)
     Chemin = String(260, 0)
     Chemin = Left$(Chemin, GetWindowsDirectory(Chemin, Len(Chemin))) + "\win.ini"
     Ret = String(255, 0)
     NC = GetPrivateProfileString("Devices", Nom, "", Ret, 255, Chemin)
     Ret = Left(Ret, NC)
     WritePrivateProfileString "windows", "device", Nom & "," & Ret, Chemin
     SendMessage HWND_BROADCAST, WM_WININICHANGE, 0, "windows"
    End Sub
     
     
    Function ImprimanteParDéfaut() As String
     Chemin = String(260, 0)
     Chemin = Left$(Chemin, GetWindowsDirectory(Chemin, Len(Chemin))) + "\win.ini"
     Ret = String(255, 0)
     NC = GetPrivateProfileString("windows", "device", "", Ret, 255, Chemin)
     Ret = Left(Ret, NC)
     NC = InStr(Ret, ",")
     ImprimanteParDéfaut = Left(Ret, NC - 1)
    End Function

    Et au niveau du bouton impression :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Private Sub CommandImprimer_Click()
     
    StrImprimante = ImprimanteParDéfaut
    Application.Dialogs(xlDialogPrinterSetup).Show
    ChangeImprimanteParDéfaut Application.ActivePrinter
    Userform1.PrintForm
    ChangeImprimanteParDéfaut StrImprimante
     
    End Sub
    Ce code à fonctionné une fois parfaitement mais maintenant lorsque je clique sur mon bouton imprimer, j'ai bien la fenêtre de choix d'imprimante qui s'ouvre mais lorsque je valide j'ai une erreur qui apparaît :
    Erreur d'exécution 484
    Problème pour obtenir des informations du gestionnaire d'imprimante du système. Assurez-vous que le gestionnaire d'imprimante est installé correctement.

    J'ai fais quelques recherches sur cette erreur sans trouver de solutions convaincantes.
    D'autant plus que dans mon éditeur VBA, lorsque je fais Fichier / Imprimer, une fenêtre d'erreur s'affiche avec exactement la même indication que pour mon userform

    Si quelqu'un peut m'éclaircir sur cette erreur et à une solution pour y remédier !!

    Je vous remercie d'avance

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour

    Tout d'abord : je ne comprends pas que tu utilises des fonctions de l'Api de Windows.
    L'étique consiste plutôt à restituer les "choses" dans l'état dans lequel on les a trouvées et donc tout simplement (sans API) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim choiximprimante As Boolean
      impriactuelle = ActivePrinter ' on relève l'état de départ
      choiximprimante = Application.Dialogs(xlDialogPrinterSetup).Show(ActivePrinter)
      If Not choiximprimante Then
         MsgBox "aucune imprimante choisie ! L'imprimante active restera donc " & ActivePrinter
      Else
        MsgBox ActivePrinter ' remplace ce msgbox par tes instructions
      End If
      ActivePrinter = impriactuelle ' on restitue en l'état de départ
    Ceci n'a toutefois rien à voir avec le message que tu reçois, qui, lui, dénonce une mauvaise installation de ton imprimante sur ta machine. Et ce ne sera pas VBA qui réparera cette installation.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2016
    Messages : 48
    Par défaut
    Bonjour unparia et merci de m'avoir répondu,

    Pour imprimer un userform et pouvoir sélectionner l'imprimante voulu, après différentes recherches, il est indispensable de passé par API.

    En effet, j'utilise ensuite la fonction Userform.Printform et cette fonction ne tiens pas compte du code précédent comme celui que tu m'a indiqué.

    J'ai testé beaucoup de code différent avec active.printer et application.dialogs dans le même esprit que celui que tu m'a transmis mais il n'y a rien à faire, l'impression se réalise toujours sur l'imprimante par défaut quelque soit la sélection faite auparavant.

  4. #4
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, c'est faux, d'autre part depuis Office 2007 SP2 le format pdf est inclus en natif et l'usage de PDFCreator 1.7.3 n'est utile que pour manipuler des PDFs.
    Excel 2003 PDFCreator 1.7.3 : Sauvegarde UserForm en Pdf
    Excel 2007+ : Sauvegarde UserForm en Pdf

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2016
    Messages : 48
    Par défaut
    Bonjour Kiki,

    J'ai regarder tes liens mais je n'arrive pas à ouvrir tes fichiers

  6. #6
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    L'usage de 7Zip est fortement conseillé .....

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Impression étiquettes codes barre ?
    Par donia dans le forum QuickReport
    Réponses: 4
    Dernier message: 14/03/2016, 10h20
  2. [VB.NET] Impression de code barre 128
    Par fuhraih dans le forum Windows Forms
    Réponses: 3
    Dernier message: 19/12/2006, 22h30
  3. Code API de DELPHI
    Par ariel555 dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 05/04/2006, 11h52
  4. Solution pour impression de codes à barres
    Par KRis dans le forum Composants VCL
    Réponses: 2
    Dernier message: 31/03/2006, 16h58
  5. [D6] Gestion et impression de code barre
    Par dridri86 dans le forum Composants VCL
    Réponses: 1
    Dernier message: 01/12/2005, 14h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo