Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/02/2011, 15h37   #1
Membre régulier
 
Avatar de amerex
 
Inscription : septembre 2007
Messages : 224
Détails du profil
Informations personnelles :
Âge : 25
Localisation : Canada

Informations forums :
Inscription : septembre 2007
Messages : 224
Points : 91
Points : 91
Par défaut Mon code imprime l'état 2 fois (?)

Bonjour,
je récupère une base créée par un ancien collègue. J'ai modifié le code qui imprime, afin qu'il demande si l'usager désire imprimer en couleur ou non (ça change l'imprimante par défaut et la restaure par la suite). Le problème, c'est que lorsque je demande une impression pas-en-couleur, sans demander de duplicata, ça imprime 2 fois l'état (même document 2 fois).

Mon code:
Code VBA :
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
Private Sub CmdImprimerFacture_Click()
Dim myint As Integer
 
Dim a As Variant
    a = MsgBox("Imprimer en couleur?", vbYesNo, "Imprimante")
 
        If a = vbYes Then
 
            'On Error GoTo err
                Dim strPrinter As String
                strPrinter = Application.printer.DeviceName
 
                Set Application.printer = Application.Printers("<a href="file://\\quebec3\Q020" target="_blank">\\quebec3\Q020</a>")
 
                DoCmd.OpenReport "RptFactureA", acViewPreview, "ReqFiltreFactureA"
                DoCmd.PrintOut acPages, , , , 1
                DoCmd.Close acReport, "RptfactureA"
 
                Set Application.printer = Application.Printers(strPrinter)
                Exit Sub
 
            End If
 
 
 
On Error GoTo Err_ImprimerEtat_Click
'Imprime un état ensuite imprime le même état avec un champs différents dans le rapport
'nombre de copie que l'on veut
'Dim myint As Integer
    ' Imprime l'état Facture en utilisant la requête Filtre factures
    ' pour imprimer la facture en cours.
 
Me.Refresh
    If MsgBox("Voulez-vous imprimer des Duplicata avec l'original?", vbYesNo, "Duplicata") = vbNo Then
       DoCmd.OpenReport "RptFactureA", acViewNormal, "ReqFiltreFactureA"
    Else
       ' InputBox "Combien?", "Nombre de Dublicata"
    myint = CInt(InputBox("Combien?", "Nombre de Duplicata"))
    End If
DoCmd.OpenReport "RptFactureA", acNormal, "ReqFiltreFactureA"
DoCmd.Close acReport, "RptfactureA"
If myint > 0 Then
DoCmd.OpenReport "RptFactureA", acViewPreview, "ReqFiltreFactureA"
Report_RptFactureA.EtqDuplicata.Caption = "DUPLICATA"
DoCmd.PrintOut acPages, , , , myint
Report_RptFactureA.EtqDuplicata.Caption = ""
DoCmd.Close acReport, "RptFactureA"
End If
 
Exit_ImprimerEtat_Click:
    Exit Sub
Err_ImprimerEtat_Click:
    MsgBox err.Description
    Resume Exit_ImprimerEtat_Click
 
err:
    MsgBox "Vous n'êtes pas connecté à l'imprimante 20."
    Exit Sub
End Sub

Êtes-vous capable de simplement me dire quelle portion du code génère la 2e impression ?
MERCI !!
__________________
Amerex
«La chance sourit aux audacieux»
Ms Access, Ms Excel, Ms FrontPage, Expression Web, Crystal, UniVerse, Basic, SQL, PHP, VBA...

N'oubliez pas de noter les messages!
amerex est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 17h30   #2
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 462
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 462
Points : 7 539
Points : 7 539
C'est un peu normal vu ton code

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    If MsgBox("Voulez-vous imprimer des Duplicata avec l'original?", vbYesNo, "Duplicata") = vbNo Then
       DoCmd.OpenReport "RptFactureA", acViewNormal, "ReqFiltreFactureA"
    Else
       ' InputBox "Combien?", "Nombre de Dublicata"
       myint = CInt(InputBox("Combien?", "Nombre de Duplicata"))
    End If

    DoCmd.OpenReport "RptFactureA", acNormal, "ReqFiltreFactureA"
    DoCmd.Close acReport, "RptfactureA"

    If myint > 0 Then
        DoCmd.OpenReport "RptFactureA", acViewPreview, "ReqFiltreFactureA"
        Report_RptFactureA.EtqDuplicata.Caption = "DUPLICATA"
        DoCmd.PrintOut acPages, , , , myint
        Report_RptFactureA.EtqDuplicata.Caption = ""
        DoCmd.Close acReport, "RptFactureA"
   End If
Les deux ligne en rouge ne sont pas conditionnées et s'exécute tout le temps.

Une pratique recommandée en programmation et de ne pas avoir plusieurs points de sortie dans un code et de mettre la gestion d'erreur au plus tot dans le code.

Voici à quoi ton code pourrait ressembler en appliquant ces recommandations et quelques autres.

Code :
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
 
Private Sub CmdImprimerFacture_Click()
 
On Error GoTo Err_ImprimerEtat_Click
 
    Dim myint As Integer
 
    Dim imprimerEnCouleur As integer :'Typage exact et nom significatif recommandé
    imprimerEnCouleur = MsgBox("Imprimer en couleur?", vbYesNo, "Imprimante")
 
    If imprimerEnCouleur = vbYes Then
 
         Dim strPrinter As String
         strPrinter = Application.printer.DeviceName
 
         Set Application.printer = Application.Printers("<a href="file://\\quebec3\Q020" target="_blank">\\quebec3\Q020</a>")
 
         DoCmd.OpenReport "RptFactureA", acViewPreview, "ReqFiltreFactureA"
         DoCmd.PrintOut acPages, , , , 1
         DoCmd.Close acReport, "RptfactureA"
 
         Set Application.printer = Application.Printers(strPrinter)
       else           
 
          'Imprime un état ensuite imprime le même état avec un champs différents dans le rapport
          'nombre de copie que l'on veut
         ' Imprime l'état Facture en utilisant la requête Filtre factures
         ' pour imprimer la facture en cours.
 
          Me.Refresh
 
          If MsgBox("Voulez-vous imprimer des Duplicata avec l'original?", vbYesNo, "Duplicata") = vbNo Then
                DoCmd.OpenReport "RptFactureA", acViewNormal, "ReqFiltreFactureA"
             Else
               ' InputBox "Combien?", "Nombre de Dublicata"
               myint = CInt(InputBox("Combien?", "Nombre de Duplicata"))
          End If
 
          If myint > 0 Then
              DoCmd.OpenReport "RptFactureA", ViewPreview, "ReqFiltreFactureA"
              Report_RptFactureA.EtqDuplicata.Caption = "DUPLICATA"
              DoCmd.PrintOut acPages, , , , myint
              Report_RptFactureA.EtqDuplicata.Caption = ""
              DoCmd.Close acReport, "RptFactureA"
         End If
 
    End if
 
Exit_ImprimerEtat_Click:
    Exit Sub
 
Err_ImprimerEtat_Click:
 
    select case err.number 
        case ###ici le numéro d'erreur spécifique correspondant au pb d'imprimante
            MsgBox "Vous n'êtes pas connecté à l'imprimante 20."
 
        case else
            MsgBox err.Description
 
    end select
 
    Resume Exit_ImprimerEtat_Click
 
End Sub
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 17h40   #3
Membre régulier
 
Avatar de amerex
 
Inscription : septembre 2007
Messages : 224
Détails du profil
Informations personnelles :
Âge : 25
Localisation : Canada

Informations forums :
Inscription : septembre 2007
Messages : 224
Points : 91
Points : 91
Merci des informations, j'en prend très bonne note
__________________
Amerex
«La chance sourit aux audacieux»
Ms Access, Ms Excel, Ms FrontPage, Expression Web, Crystal, UniVerse, Basic, SQL, PHP, VBA...

N'oubliez pas de noter les messages!
amerex est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h25.


 
 
 
 
Partenaires

Hébergement Web