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

IHM Discussion :

Impression d'un état en plusieurs page PDF avec filtre (Un fichier .pdf par client) [AC-2007]


Sujet :

IHM

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Décembre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : Alimentation

    Informations forums :
    Inscription : Décembre 2018
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Impression d'un état en plusieurs page PDF avec filtre (Un fichier .pdf par client)
    Bonjour,

    Je suis nouvel inscrit consultant régulièrement ce forum mais cette fois-ci je bloque sur le problème suivant:

    - je possède dans ma BDD une table "FACTURATION" pour laquelle j'ai une Requête et un Etat nommés: "FACTURE-CONDENSE PAR ARTICLE TOTAL MOIS".
    - la requête me permet de regrouper les produits vendus par client (TIER).
    - l'Etat possède un bouton "Imprimer en PDF" qui lance la "Macro1" (qui exécute le module "SAVE_EN_PDF"))

    Lorsque je lance l'impression en PDF, je devrais obtenir un fichier .pdf par "TIER" avec un nom de fichier différent pour chaque "TIER" en utilisant "strFiltre".
    Ce n'est pas le cas et voici la liste des problèmes:

    • Problème 1 - lorsque je lance l'impression, une fenêtre me demande "Entrer une valeur de paramètre"
    • Problème 2 - je suis obligé d'indiquer le code "TIER" déjà mentionné dans cette fenêtre pour que le processus d'impression se lance
    • Problème 3 - le nom de fichier .pdf proposé ne correspond pas au nom qui devrait être généré sur base de "strFiltre"
    • Problème 4 - le processus se relance pour le même "TIER" en autant de fois que je n'ai de lignes d’articles différents ("CODE") !


    Je n'ai aucune connaissance en VBA et suis donc un bricolo du dimanche en la matière.

    Pourriez-vous me venir en aide ?

    Je joins une version du fichier .mdb en annexe afin que vous puissiez avoir une vue d'ensemble.

    Merci d'avance !



    P.S: j'utilise cette BDD sur Access 2007 et sur Access 2010
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 635
    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 635
    Points : 14 606
    Points
    14 606
    Par défaut
    Bonsoir,
    Problème 1 - lorsque je lance l'impression, une fenêtre me demande "Entrer une valeur de paramètre"
    Problème 2 - je suis obligé d'indiquer le code "TIER" déjà mentionné dans cette fenêtre pour que le processus d'impression se lance
    solution : il faut mettre des guillemets car TIER est de type texte:

    correction dans ANNEXE()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            ' Construire le filtre
            strFiltre = "[TIER] = """ & rst("TIER") & """"
    Problème 3 - le nom de fichier .pdf proposé ne correspond pas au nom qui devrait être généré sur base de "strFiltre"
    solution : les caractères / et : sont interdits pour nommer des fichiers, on va les remplacer par des _

    correction dans ANNEXE() à ajouter juste après strFichierPDF = Format(rst("TIER"), "000") & " " & Now() & ".pdf"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strFichierPDF = Replace(Replace(strFichierPDF, "/", "_"), ":", "_")
    conjointement dans PrintAsPDF() strFichierPDF est utilisé (donc vide) dans la procédure:
    DoCmd.OutputTo acOutputReport, strEtat, acFormatPDF, strFichierPDF, blnOpenReader alors que le paramètre strFichier est passé dans le Sub:
    Sub PrintAsPDF(ByVal strFichier As String, ByVal strEtat As String ...

    solution: il faut utiliser le paramètre passé (strFichier)

    correction dans PrintAsPDF()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.OutputTo acOutputReport, strEtat, acFormatPDF, strFichier, blnOpenReader
    Problème 4 - le processus se relance pour le même "TIER" en autant de fois que je n'ai de lignes d’articles différents ("CODE") !
    solution: faire une requête basée sur les tiers et non sur la totalité des enregistrements

    correction dans ANNEXE()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	    ' Ouvrir table Facturation
        Set rst = CurrentDb.OpenRecordset("SELECT DISTINCT TIER FROM FACTURATION", dbOpenSnapshot)
    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
    Futur Membre du Club
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Décembre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : Alimentation

    Informations forums :
    Inscription : Décembre 2018
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Merci "tee_grandbois" !

    Tout est parfaitement fonctionnel avec les corrections parfaitement documentées.

    Je joint en annexe la version corrigée mais il me reste un seul souci que je ne comprends pas:
    - comment puis-je forcer un chemin de dossier pour envoyer les .pdf ?

    J'ai remarqué que la ligne suivante ne sert à rien. En effet, tous les .pdf sont envoyés dans le dossier "Mes Documents" malgré le chemin indiqué (j'ai testé des chemins différents).
    On peut d'ailleurs commenté cette ligne sans aucun effet.

    La ligne en question dans ANNEXE():

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ' Nom de base du fichier PDF à créer
        strFichier = "C:\Bureau\Test\" & "ANNEXE {0} - {1}.pdf"
    Que faut-il modifier pour y parvenir ?
    Et conserver le nommage des fichiers .pdf comme repris dans la ligne suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ' Le nom du client (TIER) est repris volontairement deux fois dans le nom du fichier pour mes besoins ultérieurs :-)
            strFichierPDF = Format(rst("TIER"), "000") & " " & Format(rst("TIER"), "000") & " " & Format(Date, "dd.mm.yyyy") & ".pdf"
    Merci d'avance.
    Fichiers attachés Fichiers attachés

  4. #4
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 635
    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 635
    Points : 14 606
    Points
    14 606
    Par défaut
    bonsoir,
    pourquoi se compliquer ?
    code à supprimer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        ' Nom de base du fichier PDF à créer - NE FONCTIONNE PAS :-(
        'strFichier = "C:\Bureau\Test\" & "ANNEXE {0} - {1}.pdf"
    correction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            ' Le nom du fichier varie en fonction du client (TIER)
            ' Le nom du client (TIER) est repris volontairement deux fois dans le nom du fichier pour mes besoins ultérieurs :-)
            strFichierPDF = "C:\Bureau\Test\" & "ANNEXE " & rst("TIER") & "-" & rst("TIER") & " " & Format(Date, "dd.mm.yyyy") & ".pdf"
    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
    Futur Membre du Club
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Décembre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : Alimentation

    Informations forums :
    Inscription : Décembre 2018
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    J'ai effectué les corrections mais j'ai toujours un problème:

    1) Avec l'ancienne ligne de code suivante, cela fonctionne mais les fichiers sont placés dans "Mes Documents" car il n'y a pas de chemin défini; ce qui est normal:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strFichierPDF = Format(rst("TIER"), "000") & " " & Format(rst("TIER"), "000") & " " & Format(Date, "dd.mm.yyyy") & ".pdf"
    2) Avec la ligne suivante incluant un chemin de répertoire, le processus s'arrête avec message d'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strFichierPDF = "C:\Bureau\Test\" & "NDE_Client_" & rst("TIER") & "-" & rst("TIER") & " " & Format(Date, "dd.mm.yyyy") & ".pdf"
    Message d'erreur pour le module "PRINT_EN_PDF":
    Nom : ERR-001.png
Affichages : 1025
Taille : 6,8 Ko
    Nom : ERR-002.png
Affichages : 1090
Taille : 35,0 Ko

    J'ai essayé différentes choses y compris de mettre le chemin directement dans le module "PRINT_EN_PDF" mais cela ne fonctionne pas non plus.


    PS: j'ai volontairement commenté la ligne suivante car j'ai remarqué avec "l'info express" que cela me transformait: "C:\Bureau\Test\" en "C_\Bureau\Test\"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strFichierPDF = Replace(Replace(strFichierPDF, "/", "_"), ":", "_")
    La dernière version de mon fichier Access est en annexe.

    Merci pour votre aide !
    Fichiers attachés Fichiers attachés

  6. #6
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 635
    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 635
    Points : 14 606
    Points
    14 606
    Par défaut
    "C:\Bureau\Test\" est-ce bien un chemin correct ?
    en général le chemin de Bureau est : C:\Users\NomDeLUtilisateur\Desktop
    il faut regarder dans les propriétés du dossier Test le chemin réel

    PS: j'ai volontairement commenté la ligne suivante car j'ai remarqué avec "l'info express" que cela me transformait: "C:\Bureau\Test\" en "C_\Bureau\Test\"
    oui, il faut l'enlever ce code
    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
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 635
    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 635
    Points : 14 606
    Points
    14 606
    Par défaut
    tu peux mettre la propriété Afficher du bouton à "À l'écran" pour ne pas qu'il apparaisse à l'impression (onglet Format de la feuille de propriétés)
    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 ?

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Décembre 2018
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : Alimentation

    Informations forums :
    Inscription : Décembre 2018
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Bonjour tee_grandbois,

    Erreur de débutant concernant le chemin du dossier !
    Ce code va être intégré dans une BDD beaucoup plus vaste (+/- 60 requêtes, 50 Etats, 20 tables et tables liées, etc...)
    J'ai donc déplacé le bouton d'export en PDF dans le "menu" pour plus de clarté pour ceux qui s'inspireront de ceci pour leurs besoins.

    Tout est parfaitement fonctionnel et je post donc ci-dessous le code des deux modules avec une copie de la BDD en annexe.

    Merci encore pour cette aide vraiment précieuse !


    Module concernant l'état à exporter en pdf:
    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
    Function ANNEXE()
        Dim strFichierPDF As String
        Dim strEtat As String
        Dim strFiltre As String
        Dim rst As dao.Recordset
     
        ' Nom de l'état à imprimer
        strEtat = "FACTURE-CONDENSE PAR ARTICLE TOTAL MOIS"
     
        ' Ouvrir la table "FACTURATION" et effectuer une requête sur base du client "TIER"
        Set rst = CurrentDb.OpenRecordset("SELECT DISTINCT TIER FROM FACTURATION", dbOpenSnapshot)
     
        ' Parcourir toute la liste
        While Not rst.EOF
            ' Le nom du fichier varie en fonction du client (TIER)
            strFichierPDF = "C:\Users\NomDeLUtilisateur\Desktop\Dossier test\" & "Annexe facture" & " " & rst("TIER") & " " & Format(Date, "dd.mm.yyyy") & ".pdf"
     
            ' Caractères / et : sont interdits pour nommer des fichiers, on va les remplacer par des "_"
            ' Ce code n'est pas utilisé car pas de caractères comme "/" et ":" dans le code des clients (TIER)
            ' strFichierPDF = Replace(Replace(strFichierPDF, "/", "_"), ":", "_")
     
            ' Construire le filtre
            strFiltre = "[TIER] = """ & rst("TIER") & """"
     
            ' Imprimer l'état en le filtrant sur la personne concernée
            PrintAsPDF strFichierPDF, strEtat, strFiltre
     
            ' Client "TIER" suivant
            rst.MoveNext
        Wend
     
        ' Terminé !
        rst.Close
        Set rst = Nothing
        MsgBox "Opération terminée !", vbInformation
    End Function

    Module nécessaire pour exporter en pdf:
    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
    ' ---
    ' IMPRESSION D'UN ETAT EN PDF
    ' ---
    ' Entrée : strFichierPDF   <- Chemin complet du fichier PDF à créer.
    '          strEtat <- Nom de l'état à imprimer.
    '          strWhere      <- Condition Where facultative.
    '
    Sub PrintAsPDF( _
      ByVal strFichierPDF As String, _
      ByVal strEtat As String, _
      Optional ByVal strWhere As String = "", _
      Optional ByVal blnOpenReader As Boolean = False)
     
      ' Ouvrir l'état en mode caché
      DoCmd.OpenReport strEtat, acViewPreview, strFiltre, _
        strWhere, acHidden
     
      ' Imprimer en PDF
        DoCmd.OutputTo acOutputReport, strEtat, acFormatPDF, strFichierPDF, blnOpenReader
     
      ' Refermer l'état
      DoCmd.Close acReport, strEtat
    End Sub
    Fichiers attachés Fichiers attachés

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

Discussions similaires

  1. [WD10] imprimer un état de plusieurs pages
    Par yann_72 dans le forum WinDev
    Réponses: 0
    Dernier message: 05/05/2008, 10h20
  2. Réponses: 2
    Dernier message: 07/08/2007, 16h24
  3. [IHM] Forcer l'impression d'un état sur une page
    Par NiKoTiNe dans le forum IHM
    Réponses: 2
    Dernier message: 17/07/2007, 06h41
  4. impression d'un blob sur plusieurs pages
    Par maamar1979 dans le forum Bases de données
    Réponses: 1
    Dernier message: 28/05/2006, 13h38

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