Sauvegarde de plusieurs états (ID individuel) en PDF à partir d'un ID de groupe

Anonyme
2022-11-21T09:57:09+00:00

Bonjour,

Toujours dans l'idée de progresser en Access et de trouver des solutions pour me faciliter le quotidien, je me trouve devant ce petit problème : je gère une base de données d'élèves, rangés par classe. Je souhaite pouvoir sauvegarder en PDF le document de chaque élève. Pour cela, j'applique sur un bouton le code suivant :

Dim directory As String, fileName As String, filePath As String, SaisirVal As String

DoCmd.OpenReport "nom_etat", acViewReport, , "ID_elv= " & ID_elv

SaisirVal = [elv]&"-"&[classe]

directory = "chemin de destination"

fileName = "nom_doc. " & SaisirVal & ".pdf"

DoCmd.OutputTo acOutputReport, " nom_etat ", acFormatPDF, directory & fileName, False

DoCmd.Close acReport, " nom_etat ", acSaveNo

Mais je suis obligée de cliquer sur le bouton qui correspond à chaque élève.

Ce que je cherche à faire, c'est de pouvoir cliquer sur un seul bouton, qui reprend une classe en particulier, et qui me génère autant d'états en PDF que d'élèves compris dans cette classe, et là, je ne sais pas comment modifier le code.

J'espère que mon explication est claire

D'avance, merci

Emma.

Microsoft 365 et Office | Access | Other | Windows

Question verrouillée. Cette question a été migrée à partir de la Communauté Support Microsoft. Vous pouvez voter pour indiquer si elle est utile, mais vous ne pouvez pas ajouter de commentaires ou de réponses ni suivre la question.

0 commentaires Aucun commentaire
Réponse acceptée par l’auteur de la question
Anonyme
2022-11-22T15:17:38+00:00

Salut,

Dans la plupart des cas cela signifie que l'un des champs de la table/requête ne s'appelle pas comme indiqué dans la chaîne SQL. Vérifie donc si les noms des champs sont "class", "elv", "ID_elv".

Une autre cause d'erreur est souvent que le type de données du paramètre n'est pas transmis correctement. Par exemple, un texte a besoin de guillemets ou d'apostrophes simples devant et derrière, comme démontré dans l'exemple avec: ...class = '" & "TLT" & "'"

Servus

Karl

Cette réponse a-t-elle été utile ?

1 personne a trouvé cette réponse utile.
0 commentaires Aucun commentaire

5 réponses supplémentaires

  1. Anonyme
    2022-11-22T14:52:38+00:00

    Merci pour la réponse, je comprends mieux le fonctionnement.

    Je rencontre cependant un autre problème avec comme message d'erreur : "Erreur d'exécution '3061'. trop peu de paramètres1. attendu"

    Et la ligne du code "Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)" est surlignée

    Encore merci

    Emma.

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  2. Anonyme
    2022-11-22T14:22:00+00:00

    Salut,

    Ce dont tu as probablement besoin, ce sont des crochets autour du nom des tables/requêtes, car il contient un caractère spécial avec le moins. L'autre chose, c'est Me!TLT. Cela signifierait que dans le formulaire actuel, il y a un champ/contrôle nommé "TLT" qui contient l'Id de la classe.

    Tu es le seul à savoir comment s'appellent tes champs de table et d'où doivent venir les informations sur la classe. C'est pourquoi je l'ai seulement suggéré dans cette ligne. Tu dois le remplacer par les noms réels. Si "TLT" n'est pas un champ ou un contrôle, mais vraiment le nom direct d'une classe, alors la ligne doit peut-être ressembler à ceci :

    strSQL = "SELECT class, elv, ID_elv FROM [02-validation_TLT] WHERE class = '" & "TLT" & "'"

    Servus

    Karl

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  3. Anonyme
    2022-11-22T13:56:39+00:00

    Bonjour,

    Merci pour la réponse.

    Je ne comprends pas tout, mais j'essaie de saisir où je dois mettre les infos choisies. Je coince sur la ligne :

    strSQL = "SELECT classe, elv, ID_elv FROM TaTableOuRequête WHERE classeID = " & Me!TonChoixDeClasse

    qui, adaptée, est devenue :

    strSQL = "SELECT classe, elv, ID_elv FROM 02-validation_TLT WHERE classeID = " & Me!TLT

    Pour être plus claire, TLT est le nom de la classe. Et j'ai eu un message d'erreur : "Erreur d'exécution '2465', ... ne trouve pas le champ 'TLT'"... Je pense que la désignation de ma classe n'est pas bonne.

    Merci encore

    Emma.

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire
  4. Anonyme
    2022-11-21T11:53:17+00:00

    Salut,

    Code aérien, comment je fais à peu près:

    Dim db As DAO.Database

    Dim rs As DAO.Recordset

    Dim strSQL As String

    Dim directory As String, fileName As String, filePath As String, SaisirVal As String

    strSQL = "SELECT classe, elv, ID_elv FROM TaTableOuRequête WHERE classeID = " & Me!TonChoixDeClasse

    Set db = CurrentDb

    Set rs = db.OpenRecordset(strSQL, dbOpenDynaset)

    directory = "chemin de destination"

    Do Until rs.EOF

    SaisirVal = rs!elv & "-" & rs!classe  
    fileName = "nom\_doc. " & SaisirVal & ".pdf"  
    DoCmd.OpenReport "nom\_etat", acViewPreview, , "ID\_elv= " & rs!ID\_elv, acHidden
    
    DoCmd.OutputTo acOutputReport, " nom\_etat ", acFormatPDF, directory & fileName, False
    
    DoCmd.Close acReport, " nom\_etat ", acSaveNo
    
    rs.MoveNext
    

    Loop

    Je ne sais pas ce qu'est "SaisirVal". Le nom d'un contrôle?

    Parfois, la boucle tourne alors trop vite et il faut faire une petite pause pour la création de chaque PDF. C'est possible grâce à la fonction API Sleep.

    Servus

    Karl

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire