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

  1. #1
    Membre à l'essai
    Créer plusieurs PDF à partir d’un état
    Bonjour,
    j'ai un petit soucis.
    J'ai un état de plusieurs pages (1 personne par page) et j'aimerais obtenir plusieurs pdf (1 pdf par personne) pour les envoyer à chaque destinataire.

    J'ai ce code pour pouvoir renommer et extraire en pdf mon état, mais j'aimerais créer un pdf par personne
    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
    Private Sub Commande86_Click()
    ' Nommer automatiquement le fichier si impression en pdf
        DoCmd.OpenReport "E_Or Mi_Fournisseurs", acPreview
     
     
    Dim sFileName As String  'construction du nom du fichier
        sFileName = LValue & " " & Me.N°_Secu_Employé.Column(1) & "_" & Me.N°_Secu_Employé.Column(2) & "_" & Me.Enseigne & "_" & Me.date_anim & "_" & " OR MI " & "_" & Me.Envoi_des_contrats & ".pdf"
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
        '''''''''''''''''''''''''' A PERSONNALISER !! ''''''''''''''''''''''''''''
        ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
            sFileName = "c:\Users\Megaport\Desktop\a envoyer\" & sFileName  '<= Personalisation du dossier d'enregistrement // enregistrement dans le dossier d'origine => CurrentProject.Path &"\"&
     
     
        '--- méthode d'enregistrement avec possibilité de changer de dossier, de nom, ou d'annuler
     
        With Application.FileDialog(msoFileDialogSaveAs)   '=> (msoFileDialogSaveAs)à écrire à la main, le copier/coller ne fonctionne pas !!
            .Title = "Sauver le contrat au format pdf"
            .InitialFileName = sFileName
            If .Show Then
                sFileName = .SelectedItems(1)
                DoCmd.OutputTo acOutputReport, "E_Or Mi_Fournisseurs", acFormatPDF, sFileName, , , , acExportQualityPrint
     
            Else
                MsgBox "Annulé (non enregistré)", , "Pour info"
            End If
        End With
    End Sub


    Si quelqu'un pouvais me filer un coup de main ...

    merci d'avance

  2. #2
    Modérateur

    Bonjour.

    Avec les outils standards de Access, c'est un rapport un pdf.

    Si tu veux découper un pdf en morceaux, il faut te tourner vers des outils externes comme ceux de Adobe.

    Sinon, il suffit que tu filtres ton rapport pour que les données ne concerne qu'un seul destinataire et que tu expédies le résultat puis tu recommences pour le
    destinataire suivant.

    A+
    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.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre à l'essai
    j'ai vu, que c'etait possible avec du VBA mais je ne saurais pas le faire

    https://grenier.self-access.com/acce...n-etat-access/

  4. #4
    Modérateur

    Bonjour.

    Il ne découpe pas de PDF il en crée 4 séparés.

    Donc as-tu des soucis pour filtrer selon les destinataires ?

    A+
    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.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  5. #5
    Membre à l'essai
    je n'avais pas parlé de coupé, mais de créer plusieurs pdf.
    C'est bien ca que je veux

  6. #6
    Modérateur

    Bonjour.

    J'ai un état de plusieurs pages (1 personne par page) et j'aimerais obtenir plusieurs pdf (1 pdf par personne)
    C'est cela qui m'a induit en erreur.

    Où se trouve les destinataires ? Dans une table ?
    Quel est le nom du champ qui contient l'info du destinataire ?
    Est-ce qu'il porte le même nom dans l'état ?

    A+
    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.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  7. #7
    Membre à l'essai
    Alors,
    la table ou se trouve les Nom et Prénom de mes employé est appelé T_Employés.
    dans T_Employés
    clé primaire = N° de sécurité social
    Champ 1 = Nom_dusage_Employé
    Champs 2 = Prénom_Employé

    Et dans l'état j'ai une zone de texte "Employé" qui regroupe ces éléments : =[Titre_Employé] & " " & [Nom_dusage_Employé] & " " & [Prénom_Employé].
    Et il y a un saut de page entre chaque employés

  8. #8
    Modérateur

    Bonjour.

    Sauf si les lois ont changé depuis que je suis parti il y a 20 ans on n'avait n'as pas le droit d'utiliser le numéro d'Assurance Sociale comme clef primaire.
    On pouvait l'avoir mais pas comme clef primaire. Peut-être devrais-tu vérifier avec la CNIL.

    Revenons à ton problème, je pense que le code devrait être quelque chose comme :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    dim db as dao.database:set db=currentdb
    dim r as dao.recordset:set r=db.openRecordset("T_Employés", dbOpenSnapshot)
     
    do while not r.eof
       call DoCmd.OpenReport("E_Or Mi_Fournisseurs", acPreview, "[N° de sécurité social]=""" & r![N° de sécurité social] & """")
       sFileName = LValue & " " &  r![Nom_dusage_Employé] & "_" & r![Prénom_Employé] & "_" & Me.Enseigne & "_" & Me.date_anim & "_" & " OR MI " & "_" & Me.Envoi_des_contrats & ".pdf"
       sFileName = "c:\Users\Megaport\Desktop\a envoyer\" & sFileName
       DoCmd.OutputTo acOutputReport, "E_Or Mi_Fournisseurs", acFormatPDF, sFileName, , , , acExportQualityPrint 'Là j'ai un doute sur cette instruction. À tester.
       r.movenext
    loop
     
    r.close:set r=nothing
    db.close:set db=nothing


    A+
    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.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  9. #9
    Membre à l'essai
    Bonsoir,
    effectivement, j'ai bien mon état qui s'ouvre, mais j'ai également une fenêtre erreur d'exéction 2501,
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
     l'action OutputTo a été annulée

  10. #10
    Modérateur

    Je vais regarder cela ce soir je me souviens que créer un pdf à partir d'un rapport ouvert n'est pas intuitif.

    A+
    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.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  11. #11
    Membre à l'essai
    Ok, ca marche. je te remercie du coup de main

  12. #12
    Modérateur

    Désolé j'ai complètement oublié.

    je vais essayer de faire cela ce soir sinon vendredi.

    Tu peux si tu es pressé faire aussi une recherche sur Google, c'est un cas qui est souvent traité. Tu devrais pouvoir trouver quelque choses.

    A+
    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.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  13. #13
    Expert éminent sénior
    bonjour,
    peut-être faut-il faire un Close après le r.movenext ?
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    DoCmd.Close acReport, "E_Or Mi_Fournisseurs"

    par contre il faudra peut-être utiliser l'API Sleep, le temps de laisser l'état se fermer avant de l'ouvrir ?
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...

  14. #14
    Membre à l'essai
    Bonjour,
    apres avoir inclus le code
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    DoCmd.Close acReport, "E_Or Mi_Fournisseurs"


    J'ai toujours le débogage ... sur cette ligne du code
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    DoCmd.OutputTo acOutputReport, "E_Or Mi_Fournisseurs", acFormatPDF, sFileName, , , , acExportQualityPrint

  15. #15
    Expert éminent sénior
    peux-tu poster le code complet ?
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...

  16. #16
    Membre à l'essai
    Bonjour Tee_Grandbois

    Voici le code complet :
    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
    Private Sub Commande6_Click()
     
        Dim db As dao.Database: Set db = CurrentDb
    Dim r As dao.Recordset: Set r = db.OpenRecordset("R_Récap_entre_date_et_société", dbOpenSnapshot) 'l erreur viens d'ici, car ce n'est pas d'une table mais d'une requete et je ne sais pas comment faire
     
    Do While Not r.EOF
    DoCmd.OpenReport "Récap_pour_justificatif_salaire", acPreview
       sFileName = LValue & " " & r![Nom_dusage_Employé] & "_" & r![Prénom_Employé] & ".pdf"
       sFileName = "c:\Users\Megaport\Desktop\a envoyer\" & sFileName
       DoCmd.OutputTo acOutputReport, "Récap_pour_justificatif_salaire", acFormatPDF, sFileName, , , , acExportQualityPrint 
    instruction. À tester.
       r.MoveNext
    Loop
     
    r.Close: Set r = Nothing
    db.Close: Set db = Nothing
     
    End Sub


    tout le code fonctionne, mais maintenant, c'est une erreur de ma part, j'ai appelé les employé depuis une table, alors qu'il doivent être appeler depuis une une requête ...

  17. #17
    Rédacteur/Modérateur

    Tout simplement :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    Dim r As dao.Recordset: Set r = db.OpenRecordset("select * from R_Récap_entre_date_et_société;", dbOpenSnapshot) 'l erreur viens d'ici, car ce n'est pas d'une table mais d'une requete et je ne sais pas comment faire


    C'est expliqué dans le tuto DAO.

    Je suis sceptique sur la fonctionnalité de ce code.

    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  18. #18
    Membre à l'essai
    Bonjour loufab
    Non, il ne fonctionne pas ...

    j'explique le soucis.
    j'ai un formulaire qui sert à faire des contrats de travail pour différentes sociétés.
    j'ai un second formulaire qui sert à saisir une société et entre 2 date. l'état dépend d'une requete, et l'etat sert a faire un recap des contrat de la société entre 2 date pour les différents salariés. mon etat à un regroupement par nom de salarié, et 1 page par salarié.
    j'aimerais créer autant de fichier pdf que de salarié dans mon état et je ne sais pas comment faire ...
    si vous avez une solution simple et efficace, je suis preneur

  19. #19
    Rédacteur/Modérateur

    Ce code n'est pas fonctionnel pour les raisons suivantes :

    Lorsque tu ouvres ton report tu ne lui spécifie pas ce que tu vas imprimer.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Set r = db.OpenRecordset("select * from R_Récap_entre_date_et_société;", dbOpenSnapshot) 'l erreur viens d'ici, car ce n'est pas d'une table mais d'une requete et je ne sais pas comment faire
     
    Do While Not r.EOF
        '--------------ici tu ouvres ton report sans spécifier de where.---------------
        DoCmd.OpenReport "Récap_pour_justificatif_salaire", acPreview
       '---------------------------------------------------------------------------
       sFileName = LValue & " " & r![Nom_dusage_Employé] & "_" & r![Prénom_Employé] & ".pdf"
       sFileName = "c:\Users\Megaport\Desktop\a envoyer\" & sFileName
       DoCmd.OutputTo acOutputReport, "Récap_pour_justificatif_salaire", acFormatPDF, sFileName, , , , acExportQualityPrint 
     
       r.MoveNext
       'ici tu doit fermer le report, puisque tu vas le rouvrir au prochain passage
    Loop


    Lorsque tu ouvres le report tu dois lui spécifier quel enregistrement tu traites, celui de recordset.

    Regarde la commande OpenRecordset et plus particulièrement la clause Where pour la composer.
    ça devrait ressembler à ceci :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     
    docmd.openreport ....., "[Id_employe]=" & r![id_employe]


    Cordialement,
    Détecter les modifications formulaire Cloud storage et ACCESS
    Classe MELA(CRUD) Opérateur IN et zone de liste Opérateur LIKE
    Visitez mon Blog
    Les questions techniques par MP ne sont pas lues et je ne pratique pas la bactériomancie

  20. #20
    Expert éminent sénior
    bonjour antony34200 et loufab,

    Citation Envoyé par antony34200
    j'aimerais créer autant de fichier pdf que de salarié dans mon état et je ne sais pas comment faire ...
    marot_r t'avais donné le code qui faisait cela (ici) et complété par loufab, marot_r avait juste oublié l'instruction Docmd.Close pour fermer l'état avant de l'ouvrir de nouveau, c'est ce que je t'expliquai sur mon premier post.
    Normalement avec toutes ces explications tu devrais pouvoir faire fonctionner ce code.
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...

###raw>template_hook.ano_emploi###