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

VBA Discussion :

[VBA-*] Choix de l'imprimante par l'utilisateur


Sujet :

VBA

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 6
    Points : 2
    Points
    2
    Par défaut [VBA-*] Choix de l'imprimante par l'utilisateur
    Bonjour,

    Je cherche à créer une "UserForm" par exemple qui reprend uniquement les imprimantes disponibles. Je souhaite que l'utilisateur puisse choisir l'imprimante sur laquelle va s'imprimer la sortie du programme...

    Quelqu'un peut-il m'aider ?

    Merci,

    Pierre.

  2. #2
    Membre habitué
    Inscrit en
    Novembre 2004
    Messages
    136
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 136
    Points : 127
    Points
    127
    Par défaut
    Je te suggère de mettre dans un combo box toutes les imprimantes qui sont installé sur le poste de l'utilisateur. Il faut que tu regardes dans les API windows. Je sais comment obtenir les imprimantes installées sur le poste, mais c'est du code Windev.

    Ensuite, quand l'utilisateur clique sur le bouton imprimer, en fonction de l'imprimante choisi, ton programme doit envoyer les données directement à l'imprimante pour pouvoir les imprimer.

    Bonne chance!

  3. #3
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Le contrôle CommonDialog permet de faire le choix.

    Je n'ai pas sous la main le code pour l'activer mais je peux trouver (si j'ai le temps).
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  4. #4
    Membre habitué
    Inscrit en
    Mai 2003
    Messages
    361
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 361
    Points : 146
    Points
    146
    Par défaut
    a propos du commondialog. tu place un composant commondialog sur ta form et derrière un bouton, tu mets ce bout de code. il permet d'ouvrir une arborescence et de la parcourir.
    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
    34
    35
    36
    Dim strOpen As String
    'On Error Resume Next
    FrmFichier.CmdSave.Visible = False
    On Error GoTo ErrHandler
     
    ' Attribue à CancelError la valeur True
    dlgOpenFile.CancelError = True
     
    strOpen = "c:\bebe"   'dlgOpenFile.FileName
     
    'MsgBox (strOpen)
     
    dlgOpenFile.Filter = "Tous les fichiers (*.*)|*.*|Fichiers texte" & _
      "(*.txt)|*.txt"
      ' Définit le filtre par défaut
    dlgOpenFile.FilterIndex = 2
     
    dlgOpenFile.FileName = strOpen
     
    dlgOpenFile.ShowOpen
     
     ' Utilise la méthode LoadFile pour ouvrir le fichier.
     
    FrmFichier.rtfData.LoadFile strOpen
    FrmFichier.Show
     
    CmdFichier.Visible = False
     
     
    ErrHandler:
    If Err.Number = cdlCancel Then
    Unload FrmFichier
    End If
      'L'utilisateur a cliqué sur Annuler
     
      Exit Sub

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Choix d'une imprimante, en VBA
    Bonjour,

    Là où j'aurais dû insister, c'est que c'est en VBA que je souhaite choisir l'imprimante, dans une macro Excel en fait... CommonDialog n'a pas l'air d'être connu par VBA...

    Merci de votre aide !

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonjour

    j'espere que cet exemple pourra t'aider

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Dialogs(Excel.xlBuiltInDialog.xlDialogPrinterSetup).Show

    cordialement
    michel[/code]

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Liste des imprimantes avec VBA
    Merci, ça m'aide en effet.
    Mais je recherche à insérer cette liste dans une UserForm (dans une ListBox par exemple). Aurais-tu une idée ? J'ai essayer à partir de ta ligne de commande avec des AddItem... c'est pas concluant...

    Merci.

  8. #8
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonjour

    cette procedure de Laurent Longre pourra sans doute t'aider

    http://frederic.sigonneau.free.fr/code/Impr/ListeImprimantesDisponibles.txt


    bon week end
    michel

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Liste Imprimantes
    Nickel ! Merci !

    Bonne fin d'année,

    Pierre

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2004
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par SilkyRoad
    bonjour

    cette procedure de Laurent Longre pourra sans doute t'aider

    http://frederic.sigonneau.free.fr/code/Impr/ListeImprimantesDisponibles.txt


    bon week end
    michel
    Bien ce code. Par contre comment ajouter le nom du port à la suite de chacune des imprimantes qui apparaissent ?

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Ingé électro
    Inscrit en
    Septembre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingé électro

    Informations forums :
    Inscription : Septembre 2015
    Messages : 5
    Points : 5
    Points
    5
    Par défaut
    Bonjour à tous,

    Le lien vers la procédure de Laurent Longre est mort, quelqu'un a-t-il le code qu'il contenait ?

    Bien à vous

  12. #12
    Expert éminent sénior
    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
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, voilà le code correspondant :
    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
    34
    35
    36
    37
    38
    39
    40
    41
    Option Explicit
     
    Private Type PRINTER_INFO_5
        pPrinterName As String
        pPortName As String
        Attributes As Long
        DeviceNotSelectedTimeout As Long
        TransmissionRetryTimeout As Long
    End Type
     
    Private Declare Function EnumPrintersA Lib "Winspool.drv" _
                                           (ByVal flags As Long, ByVal name As String, ByVal Level As Long, _
                                            pPrinterEnum As Long, ByVal cdBuf As Long, _
                                            pcbNeeded As Long, pcReturned As Long) As Long
     
    Private Declare Function lstrlenA Lib "Kernel32" _
                                      (ByVal lpString As Any) As Long
     
    Private Declare Function lstrcpyA Lib "Kernel32" _
                                      (ByVal lpString1 As String, ByVal lpString2 As Long) As Long
     
    Sub Test()
    Dim PrinterEnum() As Long, Impr() As String
    Dim Needed As Long, Returned As Long, I As Integer
     
        EnumPrintersA 2, vbNullString, 5, 0, 0, Needed, 0
        ReDim PrinterEnum(Needed / 4)
        EnumPrintersA 2, vbNullString, 5, PrinterEnum(0), _
                      Needed, Needed, Returned
        ReDim Impr(1 To Returned)
        For I = 1 To Returned
            Impr(I) = Space$(lstrlenA(PrinterEnum(I * 5 - 5)))
            lstrcpyA Impr(I), PrinterEnum(I * 5 - 5)
        Next I
     
        Application.ScreenUpdating = False
        Workbooks.Add
        Range("A1").Resize(Returned) = WorksheetFunction.Transpose(Impr)
        Columns(1).AutoFit
        Application.ScreenUpdating = True
    End Sub
    une variante :
    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
    Option Explicit
     
    Sub PrinterPort()
    Dim Reg As Variant, oReg As Object, myStr As Variant
    Dim Arr As Variant, regvalue As Variant
    Dim sStr As String
    Const HKEY_CURRENT_USER = &H80000001
     
        sStr = ""
        Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
        oReg.enumvalues HKEY_CURRENT_USER, "Software\Microsoft\Windows NT\CurrentVersion\Devices", myStr, Arr
        For Each Reg In myStr
            oReg.getstringvalue HKEY_CURRENT_USER, _
                    "Software\Microsoft\Windows NT\CurrentVersion\Devices", Reg, regvalue
            sStr = sStr & vbCrLf & Reg & " sur " & Mid$(regvalue, InStr(regvalue, ",") + 1)
        Next Reg
        MsgBox sStr
    End Sub

  13. #13
    Expert éminent sénior
    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
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, une variante de plus
    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
    Option Explicit
     
    Private Declare Function GetProfileSection& Lib "kernel32" Alias "GetProfileSectionA" ( _
                                                ByVal lpAppName As String, ByVal lpReturnedString As String, ByVal lngSize As Long)
     
    Sub Liste_Ports_Imprimantes()
    Dim sA As String, rep As Long, cpt As Long, pos As Long, T() As String
        sA = Space(2048)
        rep = GetProfileSection("devices", sA, 2048)
        If rep > 0 Then
            Feuil1.Cells.Clear
            sA = Trim$(Replace(sA, Chr(0), ""))
            Do Until sA = ""
                cpt = cpt + 1
                ReDim Preserve T(1 To 2, 1 To cpt)
                pos = InStr(1, sA, "=") - 1
                T(1, cpt) = Mid$(sA, 1, pos)
                pos = InStr(1, sA, ",") + 1
                T(2, cpt) = Mid$(sA, pos, InStr(1, sA, ":") + 1 - pos)
                sA = Mid$(sA, InStr(1, sA, ":") + 1)
                With Feuil1
                    .Cells(cpt, 1) = T(1, cpt)
                    .Cells(cpt, 2) = T(2, cpt)
                End With
            Loop
        End If
    End Sub

Discussions similaires

  1. [XL-2007] Choix d'une imprimante par Code.
    Par labib23dz dans le forum Excel
    Réponses: 7
    Dernier message: 25/04/2012, 14h28
  2. Choix de l'imprimante par userform
    Par Vincent32 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 18/01/2012, 11h49
  3. Aide pour script choix de l'imprimante par defaut
    Par alex_m94 dans le forum Windows
    Réponses: 1
    Dernier message: 12/09/2007, 09h56
  4. Choix feuilles de styles par l'utilisateur
    Par Irish dans le forum ASP.NET
    Réponses: 19
    Dernier message: 20/12/2006, 21h15
  5. [VBA-E]Empecher la fermeture par l'utilisateur
    Par repié dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 15/02/2006, 16h31

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