Avoir liste imprimantes sous Access97

Fermé
sahaso Messages postés 33 Date d'inscription dimanche 24 décembre 2000 Statut Membre Dernière intervention 7 août 2020 - 20 juil. 2004 à 11:19
 SupraDolph - 31 janv. 2008 à 15:49
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

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
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
à 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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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