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 :

Nommer les fichiers PDF générés automatiquement à partir d'un état [AC-2003]


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 11
    Points : 10
    Points
    10
    Par défaut Nommer les fichiers PDF générés automatiquement à partir d'un état
    Bonjour,

    Je dispose d'un état possédant un niveau de regroupement que nous appellerons ID.
    Mon but est d'imprimer tout cet état, mais séparément (séparé par cet ID, donc.) Bon, c'est pas très clair, mais ça, j'y arrive au moyen de ce bout de code:

    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
    Option Compare Database
     
    Private Function PrintReportByGroup(ID As String)
        'On ouvre l'état en mode impression directe sur l'imprimante par défaut (PDFCreator),
        'Clause WHERE :[MonEtat]![ID]=ID
        DoCmd.OpenReport "MonEtat", acViewNormal, , "[MonEtat]![ID]=" & Chr(34) & ID & Chr(34)
     
    Function toPrint()
    Dim rs As Recordset
    Set rs = CurrentDb.OpenRecordset("SELECT ID FROM MATABLE")
    ' Parcours du champ ID de la table. Pour chaque ID, on imprime l'état correspondant.
        With rs
            While Not .EOF
                PrintReportByGroup (.Fields(0).Value) '(Puisque le recordset n'a qu'un seul champ)
            Wend
        End With
    End Function
     
     
    End Function
    Pour imprimer papier, pas de problème. Pour imprimer en PDF un état après l'autre (directement via PrintReportByGroup()), pas de problème non plus.

    Le souci, c'est quand je veux tous les imprimer d'un coup (soit environ 150 -un peu fastidieux à la main). La boucle est fonctionnelle, mais ils sont tous imprimés les uns après les autres avec le nom "MonEtat". D'où un écrasement en chaîne, au final je me retrouve avec un seul fichier PDF "MonEtat.pdf" qui ne contient que le dernier état imprimé.

    Je cherche donc un moyen de différencier chacun des état pour qu'ils soient de la forme "MonEtat" & ID &".pdf", afin d'éviter cet écrasement.

    Auriez-vous une solution?
    Merci par avance,
    Zod
    PS: j'utilise PDFCreator, et non PdfWriter, comme spécifié dans la source "Exporter en PDF".

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2009
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 16
    Points : 17
    Points
    17
    Par défaut
    Bonjour, j'ai réalisé cette opération avec PDFCreator dans le passé.
    Deux choses à faire:

    - Configurer dans les options de PDFCreator la génération automatique du PDF en prenant comme nom le nom proposé par l'application (et non en ouvrant la boite de dialogue "Enregistrer sous". (Visiblement c'est déjà le cas puisqu'il écrase les fichiers précédents chez toi).

    - Dans access, le nom généré est le nom de l'état, donc pour avoir un PDF au nom voulu, il faut changer le nom de l'état dans la boucle avant l'impression et lui redonner son nom original après impression.

    Ex: - si l'état s'appelle "resultats"
    - tu lui affecte un nouveau nom, ex "resultats_01",
    - tu lances l'ouverture de l'impression (l'état va donc s'appeller "resultats_01").
    - tu lui redonnes son nom original "resultats"
    - Par la suite, la boucle va récupérer l'état "resultats"et lui donner le nom "resultat_02" , l'imprimer avec le bon nom, le renommer
    - ....

    C'est un peu du bricolage mais je ne vois pas d'autre solutions.
    (Par ailleurs, l'exécution était assez rapide lorsque je l'ai utilisé.)

    En espérant que ça puisse t'aider,

    Quentin

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Re,
    Effectivement, cela m'aide bien! Je n'avais pas pensé à renommer l'état après son impression...

    Par contre, pour le renommer, justement, que pourrai-je utiliser? J'ai tenté avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.Rename "NouveauNom", acReport, "AncienNom"
    Mais je récolte une erreur 29068: "Microsoft Access ne peut achever l'opération. Vous devez interrompre l'exécution du code et recommencer", directement sur cette ligne.

    Je me demande si ne ce serait pas en rapport avec des dépendances d'objets quelconques.

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Re,

    Renommer les état avec DoCmd.Rename: fait. Visiblement, j'avais juste des erreurs de syntaxe.
    Petit détail toutefois: c'est pas la propriété Name qui est prise en compte pour nommer les aperçus avant impression(et donc, les fichiers PDF), mais la propriété Caption.

    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
     
     
        Dim Nom As String 
        Nom = Report_Monreport.Name
        Dim stringNomtemporaire as String
        'La concaténation, c'est juste pour tester la modification du Caption.
        stringNomtemporaire = Nom&"ID"
     
    'On change le caption
        Report_Monreport.Caption = stringNomtemporaire
    'On lance l'impression
        DoCmd.OpenReport Nom, acNormal, "", sWhere
        DoEvents
    'On remet le nom d'origine du Caption (Qui était le même que le nom de l'état)
        Report_Monreport.Caption = Nom
    L'impression marche très bien... Le seul problème étant que l'impression se fait avec Caption = Nom, et pas avec Caption = stringNomtemporaire.

    Je vais essayer en faisant :
    "ouvrir en mode création/modification Caption/Save/Fermer/Imprimer".
    Je vous tiens au courant.

    Zod

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2010
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 11
    Points : 10
    Points
    10
    Par défaut
    Trouvé! Au final, c'est un peu moche, mais il suffit d'avoir l'état déjà ouvert pour que ça marche.
    Du coup c'est un petit peu long, mais ça va quand même beaucoup plus vite que tous les faire un par un.

    Pour ceux que ça intéresserait, il suffit de boucler là dessus

    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
    Dim sOrigin As String
    Dim sLocal As String, sWhere As String
    Dim MyReport As Report
     
    sOrigin = NomReport
    sLocal = sOrigin & "_" & param
    sWhere = "[ID]=" & Chr(34) & param & Chr(34)
     
     
    On Error GoTo EtiErr
     
        DoCmd.OpenReport NomReport, acViewPreview, , sWhere
        Set MyReport = Screen.ActiveReport
        MyReport.Caption = sLocal
        DoEvents
        DoCmd.OpenReport sOrigin, acNormal, "", sWhere
        DoEvents
        MyReport.Caption = sOrigin
     
        DoCmd.Close acReport, NomReport
    Fun_Exit:
        Exit Function
     
    EtiErr:
        MsgBox Error$
        Resume Fun_Exit
    Merci pour votre aide , puis merci à moi aussi (parce que ça fait du bien quand on arrive à la fin).

    Zod

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Octobre 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Secteur : Transports

    Informations forums :
    Inscription : Octobre 2010
    Messages : 16
    Points : 11
    Points
    11
    Par défaut


    Merci mille fois, c'est exactement ce que je cherchais depuis des lustres !!!

    Meilleurs vœux pour cette nouvelle année !

    Nicolas

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

Discussions similaires

  1. Réponses: 18
    Dernier message: 11/03/2009, 16h47
  2. les fichiers pdf générés par le client se plaçe dans le serveur
    Par john_wili dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 10/03/2009, 17h49
  3. Réponses: 8
    Dernier message: 13/02/2007, 14h31
  4. [C#] Authentification sur les fichiers Pdf
    Par ensisoft dans le forum ASP.NET
    Réponses: 14
    Dernier message: 04/05/2004, 12h10

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