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 :

Imprimer par un Etat l'enregistrement en cours dans une boucle.


Sujet :

VBA Access

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 62
    Points : 45
    Points
    45
    Par défaut Imprimer par un Etat l'enregistrement en cours dans une boucle.
    Bonjour,
    je bloque bêtement sur un code tout simple en vba access 2016 qui boucle sur une table Clients et imprime (ou aperçu) la fiche de chaque client.
    (Le but étant ultérieurement de mettre des conditions et imprimer plusieurs états par client.)

    J'ai essayé de nombreuses variantes de code pour l'impression, mais en vain.
    La boucle fonctionne, j'ai fait un test en affichant un MsgBox.

    Merci par avance pour vos lumières.


    Table : TABLECLIENTS
    Champ principal : NOMCLIENT
    Etat individuel : ETATFICHECLIENT


    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
     
     
    Private Sub IMPRIMER_Click()
     
    Dim oRst As DAO.Recordset
    Dim oDb As DAO.Database
    Set oDb = CurrentDb
    Set oRst = oDb.OpenRecordset("TABLECLIENTS", dbOpenTable)
     
     
    While Not oRst.EOF
     
    	DoCmd.OpenReport "ETATFICHECLIENT", acViewPreview, , "NOMCLIENT=" & oRst.Fields("NOMCLIENT"), , acNormal
     
    oRst.MoveNext
    Wend
     
    oRst.Close
    oDb.Close
    Set oRst = Nothing
    Set oDb = Nothing
     
     
    End Sub

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonsoir,
    cela ne fonctionnera pas en mode Aperçu avant Impression tout seul, l'état reste ouvert sur le premier enregistrement, il faut utiliser le format de sortie en PDF et enregistrer le fichier sur disque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DoCmd.OpenReport "ETATFICHECLIENT", acViewPreview, , "NOMCLIENT=" & oRst.Fields("NOMCLIENT"), , acNormal
    DoCmd.OutputTo acOutputReport, "ETATFICHECLIENT", acFormatPDF, "C:\Fiche_Client_" & oRst.Fields("NOMCLIENT") & ".pdf", True
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 62
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    bonsoir,
    cela ne fonctionnera pas en mode Aperçu avant Impression tout seul, l'état reste ouvert sur le premier enregistrement, il faut utiliser le format de sortie en PDF et enregistrer le fichier sur disque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DoCmd.OpenReport "ETATFICHECLIENT", acViewPreview, , "NOMCLIENT=" & oRst.Fields("NOMCLIENT"), , acNormal
    DoCmd.OutputTo acOutputReport, "ETATFICHECLIENT", acFormatPDF, "C:\Fiche_Client_" & oRst.Fields("NOMCLIENT") & ".pdf", True

    Merci beaucoup, je vais essayer.
    Et en mode impression uniquement, pas de solution directe ?, le but étant uniquement d'imprimer, pas de stocker, il y a presque 2000 clients.

  4. #4
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Et en mode impression uniquement, pas de solution directe ? le but étant uniquement d'imprimer
    en impression directe (acViewNormal) cela fonctionne et sans le OutputTo, mais je ne comprend pas bien pourquoi utiliser une boucle s'il n'y a pas de sélection: autant imprimer l'état complet, cela prendra moins de temps.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  5. #5
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 62
    Points : 45
    Points
    45
    Par défaut
    Merci,

    effectivement, pour un seul état ce serait plus simple, c'est ce que je fais habituellement. Je dois cependant maintenant pour chaque client, imprimer jusqu'à dix états différents personnalisés en fonction de certaines conditions et cases à cocher sur un formulaire. (ici j'avais volontairement simplifié pour que le code soit épuré)

    J'ai bien essayé les sous-états, mais leur gestion n'est pas pratique et provoquent parfois des des pages blanches (malgré des heures passées à combler ces énigmes).

    Mon idée était de passer par une boucle, un enregistrement après l'autre pour imprimer tous les états désirés pour un clients, puis passer au suivant, ce qui me paraissait le plus efficace, mais il y a peut-être d'autres solutions.

  6. #6
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Mon idée était de passer par une boucle, un enregistrement après l'autre pour imprimer tous les états désirés pour un clients, puis passer au suivant, ce qui me paraissait le plus efficace, mais il y a peut-être d'autres solutions
    pourquoi ne pas ajouter un bouton "Imprimer" dans un formulaire continu, avec éventuellement l'ajout un code d'édition type Oui/Non ou une date de dernière édition dans la table des clients pour savoir en est le traitement ?
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  7. #7
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 62
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    pourquoi ne pas ajouter un bouton "Imprimer" dans un formulaire continu, avec éventuellement l'ajout un code d'édition type Oui/Non ou une date de dernière édition dans la table des clients pour savoir en est le traitement ?
    Merci pour l'idée, je vais essayer. Bonne journée.

  8. #8
    Membre du Club
    Inscrit en
    Octobre 2006
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 62
    Points : 45
    Points
    45
    Par défaut
    Merci @tee_grandbois, votre aide m'a été précieuse. Le problème venait du fait qu'un aperçu (acViewPreview) n'était pas possible effectivement, par contre une impression directe (acViewNormal) fonctionne correctement.
    Je garde en mémoire vos autres indications qui me seront utiles pour plus tard.

    Si éventuellement d'autres personnes ont la même question, j'ajoute ci-dessous la ligne du code corrigé, qui fait appel à un champ NuméroAuto "NUMCLIENT" en place du "NOMCLIENT" pour éviter les doublons.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DoCmd.OpenReport "ETATFICHECLIENT", acViewNormal, , "NUMCLIENT=" & oRst!NUMCLIENT, , acNormal
    Merci au forum !

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

Discussions similaires

  1. Enregistrement sans confirmation dans une boucle
    Par eole-33 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 04/02/2016, 19h51
  2. Enregistrer des fichiers dans une boucle
    Par sebastien06 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 05/04/2008, 13h17
  3. Réponses: 3
    Dernier message: 19/03/2008, 21h35
  4. Réponses: 7
    Dernier message: 12/01/2005, 11h30

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