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 Access Discussion :

Impression Etat sur imprimante specifique [FAQ]


Sujet :

VBA Access

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 59
    Points : 36
    Points
    36
    Par défaut Impression Etat sur imprimante specifique
    Bonjour,
    Voila j'ai trouver ce code qui permet de changer l'imprimante par default
    Dans la partie de la Function Principale on doit indiquer l'impression que l'on veut effectuer avant de remettre l'imprimante default de du Départ.

    Quel serait le code pour lui dire d'imprimer l'Etat ouvert ou actif ???

    Le but etant d'imprimer sur une imprimante spécifique

    Merci

    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     'Declaration:
    Declare Function WriteProfileString Lib "kernel32" Alias "WriteProfileStringA" (ByVal lpszSection As String, ByVal lpszKeyName As String, ByVal lpszString As String) As Long
     
    Declare Function GetProfileString Lib "kernel32" Alias "GetProfileStringA" (ByVal lpAppName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Integer) As Integer
     
    'Function principale():
    Public Function Impression()
    'Recupere l'imprimante par defaut :
    DefaultPrinterdeb = Left(GetIniString("windows", "device", ""), InStr(1, GetIniString("windows", "device", ""), ",") - 1)
    'Changement d'imprimante :
    SetDefaultPrinter "PDF Printer 4"
     
    'Impression de l'etat actif avant changement d'imprimante origine
    'Manque le code pour imprimer l'etat actif
     
     
    'Remet l'imprimante par defaut
    SetDefaultPrinter DefaultPrinterdeb
    End Function
     
    Function GetIniString(ByVal section As String, ByVal key As String, ByVal default As String) As String
    Dim buffer As String
    Dim n As Long
    Dim status As Long
    buffer = String(255, " ")
    n = 255
    status = GetProfileString(section, key, default, buffer, n)
    GetIniString = Left(buffer, status)
    End Function
     
    Function SetDefaultPrinter(ByVal p As String) As Long
     
    Dim PrinterPort As String
    Dim PrinterDriver As String
     
    PrinterPort = GetPrinterPort(p)
    PrinterDriver = getPrinterDriver(p)
     
    If PrinterDriver <> "" And PrinterPort <> "" Then
    WriteIniString "windows", "device", p & ", " & PrinterDriver & ", " & PrinterPort
     
    'J'ai mis le code suivant en commentaire car il ce bloque a cet endroit pourquoi ????
    Module1.DefaultPrinter = p & ", " & PrinterDriver & ", " & PrinterPort
    Else
    Module1.DefaultPrinter = ""
    End If
     
    End Function
     
     
    Function GetPrinterPort(ByVal PrinterName As String) As String
    Dim buffer As String
     
    buffer = GetIniString("devices", PrinterName, "")
     
    If InStr(buffer, ",") <> 0 Then
    GetPrinterPort = Right(buffer, Len(buffer) - InStr(buffer, ","))
    End If
    End Function
     
    Function getPrinterDriver(ByVal printer As String)
    Dim buffer As String
     
    buffer = GetIniString("devices", printer, "")
     
    If InStr(buffer, ",") <> 0 Then
    getPrinterDriver = Left(buffer, InStr(buffer, ",") - 1)
    End If
    End Function
     
    Sub WriteIniString(ByVal section As String, ByVal key As String, ByVal Value As String)
    Dim status As Long
     
    status = WriteProfileString(section, key, Value)
     
    End Sub

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 052
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 052
    Points : 24 645
    Points
    24 645
    Par défaut
    Bonjour,

    Quelle avalanche de lignes de codes pour changer l'imprimante par défaut.

    Tu as la même chose en 3 lignes ici

    http://www.developpez.net/forums/sho...d.php?t=424080

    Pour imprimer voir :

    Cordialement,

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 59
    Points : 36
    Points
    36
    Par défaut
    Bonjour

    Merci tout d'abord d'avoir pris la peine de répondre.

    Effectivement tu as raison et ca fonctionne tres bien ce code pour
    changer d'imprimante default, cepandant il ne permets pas de revenir sur
    l'imprimante default du départ et comme l'application access est destinée
    a des utilisateurs novices et autres je ne suis pas certains qu'ils aiment
    changer d'imprimante a chaque fois
    tu comprends ??

    Maintenant si tu as la suite du code pour restaurer l'imprimante
    qui etait par default avant le changement je suis preneur..


    Sinon mon code fonctionne bien mise a part :

    Il y a dans le code 2 lignes séléctionnées en rouge
    - La premiere est comment lui dire d'imprimer l'etat actif
    - La deuxieme il renvoie une erreur 424 Objet requis


    Merci encore

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 052
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 052
    Points : 24 645
    Points
    24 645
    Par défaut
    Bonjour,

    Oui effectivement pour l'imprimante par défaut voici le code :

    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
    Function DefaultPrinter()
        Dim strPoste As String
        Dim objWMIService As Object
        Dim colInstalledPrinters As Variant
        Dim objPrinter As Variant
     
        strPoste = "."
     
        Set objWMIService = GetObject("winmgmts:" _
            & "{impersonationLevel=impersonate}!\\" & strPoste & "\root\cimv2")
        Set colInstalledPrinters = objWMIService.ExecQuery _
            ("Select * from Win32_Printer Where Default = true")
        For Each objPrinter In colInstalledPrinters
            DefaultPrinter = objPrinter.Name
        Next
     
    End Function
    Pour imprimer l'état actif regarde dans mon premier post il y a la commande à regarder.

    Cordialement,

    Cordialement,

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 59
    Points : 36
    Points
    36
    Par défaut
    Re,
    Ok ton code fonctionne bien et je n'en doutais pas
    merci encore,

    Par contre pour imrpimer l'etat actif je dois utiliser
    DoCmd.PrintOut

    mais je ne sais pas comment mettre dans une varaible le nom de l'etat actif ou ouvert comme tu prefere.

    Merci de ta patience

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 59
    Points : 36
    Points
    36
    Par défaut
    Alors pour imprimer l'etat je l'ouvre en mode Impression direct via une macro :
    Je suis le déroulement pas a pas et tout ce passe correctement, je vois meme
    l'imprimante defaut changer juste avant l'ouverture de l'etat et au moment de l'impression il imprime qd meme sur celle d'origine qui n'est pourtant pas par default.

    Pe etre y'a t'il un endroit ou il garde en memoire l'imprimante default d'origine style fichier ini ou base de registre ou je ne sais trop quoi.

    Qu'en pense tu ??

    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
    Function DefaultPrinter()
     
        'Déclaration :
        Dim strPoste As String
        Dim objWMIService As Object
        Dim colInstalledPrinters As Variant
        Dim objPrinter As Variant
        Dim wsn
     
        strPoste = "."
     
        'Garde en memoire l'imprimante default
        Set objWMIService = GetObject("winmgmts:" _
            & "{impersonationLevel=impersonate}!\\" & strPoste & "\root\cimv2")
        Set colInstalledPrinters = objWMIService.ExecQuery _
            ("Select * from Win32_Printer Where Default = true")
        For Each objPrinter In colInstalledPrinters
            DefaultPrinter = objPrinter.name
        Next
     
       ' Active l'imprimante PDF
        Set wsn = CreateObject("WScript.Network")
        wsn.SetDefaultPrinter "PDF Printer 4"
     
        'Mon impression (Macro qui ouvre l'etat en mode Impression direct)
        DoCmd.RunMacro "Longueur_AEP_Agence"
     
        'Reactive l'imprimante default d'origine
        wsn.SetDefaultPrinter DefaultPrinter
     
    End Function
    Merci

  7. #7
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 052
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 052
    Points : 24 645
    Points
    24 645
    Par défaut
    Avec cette solution tu changes directement l'imprimante par défaut sur le système.

    Le printOut est valable sur l'objet courant. Si tu n'es pas dans le report il va imprimer ce qui est ouvert.

    Je te conseille donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Changement de l'imprimante
    impression
    docmd.openreport "monreport"
    changement de l'imprimante
    J"ai raté une de tes phrases, je teste...

  8. #8
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 052
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 052
    Points : 24 645
    Points
    24 645
    Par défaut
    DefaultPrinter est le nom de la fonction.

    Je te donne le code qui fonctionne :

    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
    Function Change_et_Imprime()
     
        'Déclaration :
        Dim strPoste As String
        Dim objWMIService As Object
        Dim colInstalledPrinters As Variant
        Dim objPrinter As Variant
        Dim wsn
        Dim defaultprinter As String
     
        strPoste = "."
     
        'Garde en memoire l'imprimante default
        Set objWMIService = GetObject("winmgmts:" _
            & "{impersonationLevel=impersonate}!\\" & strPoste & "\root\cimv2")
        Set colInstalledPrinters = objWMIService.ExecQuery _
            ("Select * from Win32_Printer Where Default = true")
        For Each objPrinter In colInstalledPrinters
            defaultprinter = objPrinter.Name
        Next
     
       ' Active l'imprimante PDF
        Set wsn = CreateObject("WScript.Network")
        wsn.SetDefaultPrinter "PDF Printer 4"
     
        'Mon impression (Impression direct par la commande +simple et +rapide que Macro)
        DoCmd.OpenReport "MonEtat", acViewNormal
     
        'Reactive l'imprimante default d'origine
        wsn.SetDefaultPrinter defaultprinter
     
    End Function

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 59
    Points : 36
    Points
    36
    Par défaut
    "MonEtat" n'est pas une variable il faut donc lui indiquer le nom de l'etat et comme j'ai une 30 taine d'etat et que cela ce fait pontuellement a la demande de l'utilisateur en fait.

    Et sinon tu lance ce code a quel moment, (a l'ouverture de l'etat, depuis un bouton, en appel dans une macro ????)

    Merci
    Je crois que l'on se rapproche de la fin

  10. #10
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 052
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 052
    Points : 24 645
    Points
    24 645
    Par défaut
    Suivant les besoins que tu me rapportes je te propose la solution suivante.

    1 formulaire contenant

    une liste déroulante qui elle même contient la liste de tes états (pour l'alimentation voir mon tuto sur la recherche, il y a une fonction qui va chercher tous les reports de l'application courante)

    un bouton derrière lequel tu mets ton code.
    Prévois un test pour savoir si l'utilisateur à choisit un report dans la liste (ben oui y a des crétins)

    Remplace alors dans le code :

    par

    C'est une idée.

    PS : les macros c'est pas mal au début, mais tu en as vite fais le tour.
    Note que tu peux transformer une macro en code vba en utilisant le menu Fichier / Enregistrer sous / Module

    Cordialement,

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 59
    Points : 36
    Points
    36
    Par défaut
    Effectivement c'est une bonne idée et je vais me mettre au travail.

    Cepandant juste pour infos peut tu me confirmer que dans un code on ne peut pas recuperer dans une variable l'etat qui est ouvert en apercu par exemple et lui donner a "MonEtat" le résultat de la variable ?

    Et merci encore

  12. #12
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 052
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 052
    Points : 24 645
    Points
    24 645
    Par défaut
    Il existe un contener pour les formulaires et états ouvert (c'est dans le tuto, c'est important de lire un tuto en entier )

    Il s'agit de Reports(x) -ou Forms(x)-

    Il se comporte comme une pile.

    Le 0 est le premier et ainsi de suite.

    Renvoi le nom du premier état ouvert (dans l'ordre chronologique)

    Cordialement,

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 59
    Points : 36
    Points
    36
    Par défaut
    Ok
    Merci pour tout j'ai finaliser le projet

    Félicitations

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

Discussions similaires

  1. [AC-2007] impression etat sur une 2eme imprimante
    Par richemo dans le forum IHM
    Réponses: 4
    Dernier message: 10/05/2009, 10h57
  2. [Impression Etat] choix Imprimante
    Par jpo dans le forum VBA Access
    Réponses: 3
    Dernier message: 02/08/2007, 10h43
  3. Réponses: 6
    Dernier message: 17/05/2006, 21h02
  4. Impression direct sur imprimante via delphi
    Par wattman dans le forum Langage
    Réponses: 4
    Dernier message: 02/05/2006, 12h35

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