Avoir liste imprimantes sous Access97

sahaso Messages postés 34 Statut Membre -  
 SupraDolph -
Bonjour,

Dans mon application Access 97, j'ai un formulaire qui lance un état à imprimer... Ce que je voudrais faire, c'est que dans ce formulaire, il y ait un controle qui contient la liste de toutes les imprimantes disponibles sur le poste, afin que l'utilisateur puisse choisir facilement l'imprimante à utiliser.

Le problème est que je ne sais pas comment m'y prendre... Insérer un controle ActiveX ? (Mais lequel ? )

Pouvez-vous m'aider ?

Merci d'avance.

Sabrina.

5 réponses

  1. max
     
    Bonjours, j'ai exactement le meme probleme
    j'essaye vainement depuis 3 jours
    j'arrive a afficher l'imprimante par default, mais pas la liste complete
    je suis tes reponses
    a+
    0
  2. LouisB
     
    pour ma part, j'ai crée une barre d'outil avec un bouton "Imprimante par défaut" et un autre "Choix Imprimante" (+ 1 pour "fermer l'état").
    Je fais afficher cette barre d'outil à l'ouverture de l'état avec "DoCmd.ShowToolbar "Impression Etat", acToolbarYes" dans la sub Form_Open de l'état. Elle se refermera avec "DoCmd.ShowToolbar "Impression Etat", acToolbarNo" dans la sub Form_Close.

    Les boutons de la barre d'outils sont liés à une macro "Impression Etats" avec une sous macro "Imprimer" et une macro "Choix", dont l'action est "exécuter code". Il faut désigner un nom de fonction dans le bas de la fenêtre de macro.
    Pour l'imprimante par défaut, j'ai créé la fonction "ImpressionEtatDéfaut ()", et pour faire ouvrir la boîte de dialogue d'impression, la fonction "ImpressionEtatChoixPrt ()", dont voici les codes respectifs placé dans un module à part

    Function ImpressionEtatDéfaut()
    On Error GoTo ImpressionEtatDéfaut_Err

    Dim Mabase As Database, EtatNom As String
    Set Mabase = CodeDb
    EtatNom = Screen.ActiveReport.Name
    DoCmd.SelectObject acReport, EtatNom, False
    DoCmd.PrintOut acPrintAll, , , acHigh, 1
    ImpressionEtatDéfaut_Exit:
    Exit Function

    ImpressionEtatDéfaut_Err:
    If Err.Number <> 2501 Then
    MsgBox Error$
    End If
    Resume ImpressionEtatDéfaut_Exit:

    End Function
    '***
    Function ImpressionEtatChoixPrt()

    On Error GoTo ImpressionEtatChoixPrt_Err

    Dim Mabase As Database, EtatNom As String
    Set Mabase = CodeDb
    EtatNom = Screen.ActiveReport.Name
    DoCmd.SelectObject acReport, EtatNom, False
    DoCmd.RunCommand acCmdPrint

    ImpressionEtatChoixPrt_Exit:
    Exit Function

    ImpressionEtatChoixPrt_Err:
    If Err.Number <> 2501 Then
    MsgBox Error$
    End If
    Resume ImpressionEtatChoixPrt_Exit:

    End Function
    '***
    Lorsque l'état s'affiche ( avec DoCmd.OpenReport "NomDoc", acViewPreview), la barre d'outil s'affiche et il est alors possible d'imprimer en cliquant sur le bouton correspondant.

    Bon courage
    0
  3. LouisB
     
    à la place de "sub Form_Open" et "sub Form_Close", il faut bien sûr comprendre "sub Report_Open" et sub Report_Close", puisqu'il s'agit d'un Etat. Sorry
    0
  4. LouisB
     
    Une autre solution bricolarde, pour peu que l'on ne change pas son parc d'imprimantes tous les deux jours, consiste à créer des états bidons, autant qu'il y a d'imprimantes installées sur le poste en les nommant, pourquoi pas, respectivement du même nom que les imprimantes.
    On peut faire un état minimaliste, que l'on recopie autant de fois que nécessaire, puis renommer chaque état d'un nom d'imprimante.

    La combine consiste ensuite à ouvrir chacun des états, tour à tour, en prenant soin de faire imprimer chaque état avec l'imprimante homonyme, puis à enregistrer l'état tel quel avant de le refermer;

    procédure:
    -ouvrir un état,
    -faire "Fichier/Imprimer" et choisir dans la boîte de dialogue "impression" l'imprimante correspondante, puis cliquer Ok.
    -faire "Fichier/Enregister"
    -fermer l'état

    Bien sûr, renouveler pour chaque état/chaque imprimante.

    De ce fait, chaque état dispose d'une propriété PrtDevNames personnelle, contenant les informations relatives à l'imprimante choisie dans la boîte de dialogue Imprimer, conservées lors de son dernier enregistrement

    Après quoi il n'y a plus qu'à faire l'échange de cette propriété PrtDevNames entre un de ces états bidons et l'etat beaucoup plus sérieux qu'on veut réellement imprimer.

    Cette fonction fait très bien le travail:

    Function ChangeImprimante(EtatàChanger As String, Etatd'Impression As String)
    '***déclarer deux états
    Dim rpt1 As Report, rpt2 As Report

    '***ouverture des deux états en mode création
    DoCmd.OpenReport EtatàChanger, acViewDesign
    DoCmd.OpenReport Etatd'Impression, acViewDesign

    '***indiquer à quoi correspondent les deux états déclarés
    Set rpt1 = Reports(EtatàChanger)
    Set rpt2 = Reports(Etatd'Impression)

    '***les caractéristiques d'imprimante de l'état à changer prennent celles de l'état d'impression choisie
    rpt1.PrtDevNames = rpt2.PrtDevNames

    '***on referme l'etat modèle d'imprimante
    DoCmd.Close acReport, Etatd'Impression, acSaveNo

    '***on ouvre l'état qu'on veut imprimer en mode aperçu
    DoCmd.OpenReport EtatàChanger, acViewPreview

    End Function

    On peut choisir, par exemple, l'imprimante dans un combobox (zone de liste modifiable) qui aurait comme RowsourceType: Liste Valeurs et rentrer dans cette liste les mêmes noms que ceux des Etats/Imprimantes modèles. Nommons cette liste "ChoixImprimante"

    Ayant choisi une "imprimante" dans cette liste, on peut ensuite lancer l'impression de tout état à l'aide d'un bouton (ou autre manière) avec une Sub qui fait appel à la fonction ChangeImprimante, exemple:

    Private Sub Imprimer_Click()
    '***copie de PrtDevNames du modèle vers l'état à imprimer et affichage de ce dernier
    Call ChangePrinter("EtatQueJeVeuxImprimer", Me.ChoixImprimante) '**Me suppose ici qu'on se trouve dans un formulaire...

    '***affichage MsgBox de confirmation d'impression, si nécessaire
    If MsgBox("Imprimer l'Etat ?", vbYesNo) = vbYes Then
    DoCmd.PrintOut
    End If
    DoEvents

    '***refermer l'etat après impression (ici acSaveNo pour ne pas garder le nouveau PrtDevNames, sinon acSaveYes pour conserver à l'etat imprimer sa dernière "imprimante"
    DoCmd.Close acReport, "FilmsSurSallesFax", acSaveNo

    End Sub
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. SupraDolph
     
    Microsoft a désormait fait un exemple très bien fait pour ça :
    http://office.microsoft.com/fr-fr/access/HA010345531036.aspx?pid=CL100570041036

    (Je sais je déterre un sujet, mais ça peut servir à d'autres qui comme moi consultent google avant leur compagnon office)
    0