Bonjour.
Ma mémoire ce réveille toujours trop tard … Cette fois-ci je me suis envoyer un courriel donc je devrai te répondre dans l'après-midi.
Désolé.
A+
Bonjour.
Ma mémoire ce réveille toujours trop tard … Cette fois-ci je me suis envoyer un courriel donc je devrai te répondre dans l'après-midi.
Désolé.
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.
Bonjour.
J'ai fait une mini BD de démo.
CreerPDF.zip
Voici un exemple de code au cas ou tu ne pourrais pas la lire. Elle a été créée en Access 2019.
Merci à tee_grandbois pour le rappel du close qui fait toute la différence.
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 Private Sub CreerPlusieursPDF() Dim db As DAO.Database: Set db = CurrentDb Const NOM_RAPPORT As String = "rptData" Dim r As DAO.Recordset: Set r = db.OpenRecordset("tblData", dbOpenSnapshot) Dim repertoireFic As String: repertoireFic = CurrentProject.Path Dim nomFic As String Dim infoFic As String Do While Not r.EOF nomFic = NOM_RAPPORT & "_" & r![Valeur] & ".pdf" infoFic = repertoireFic & "\" & nomFic If Dir(infoFic) <> "" Then Kill infoFic End If Call DoCmd.OpenReport(NOM_RAPPORT, acViewPreview, , "[Valeur]=""" & r![Valeur] & """") 'ouvre le rapport Call DoCmd.OutputTo(acOutputReport, NOM_RAPPORT, acFormatPDF, infoFic, , , , acExportQualityPrint) 'crée le PDF à partir du rapport ouvert. Call DoCmd.Close(acReport, NOM_RAPPORT) r.MoveNext Loop r.Close: Set r = Nothing db.Close: Set db = Nothing End Sub
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.
Bonjour à tous ...
je vous passe en PJ ma base.
marot_r je ne comprend pas ton code.
en ouvrant la base, clic sur "récap", puis sur "récap salaire collectif et individuel".
renseigne la société que tu veux via la liste déroulante, renseigne les date 01/06/20 et 30/06/20, puis j'aimerais qu'en cliquant sur le bouton "Aperçu récap par salarié" mon état Récap_pour_justificatif_salaire s'ouvre et imprime individuellement (1 fichier par personne présent sur le récap), en les nommant automatiquement.
Bonjour,
Le code proposé fait exactement ceci :
1) liste tous les employés
2) pour chaque employé
ouvre le report avec les données de l'employé courant
crée le nom du futur PDF -suivant l'employé courant
supprime le fichier s'il existe déjà.
fait une sortie du report avec le nom du PDF
ferme le report
passe au prochain employé
3) Quitte
Après vérification de ta base, il faudrait plutôt se baser sur la source de données du report pour établir la liste des employés .
Ta liste des employés à traiter (1) doit être :
Et pour l'ouverture du report :
Code : Sélectionner tout - Visualiser dans une fenêtre à part SELECT N°_Employé FROM R_Récap_entre_date_et_société;
Mettre un docmd.echo false au début de la procédure et à la fin un docmd.echo true pour éviter l'affichage inutile du preview.
Code : Sélectionner tout - Visualiser dans une fenêtre à part DoCmd.OpenReport(NOM_RAPPORT, acViewPreview, , "[N°_Employé]=" & r![N°_Employé] )
Pourquoi tu répètes les colonnes de tes tables dans cette requête ? Les mettre 1 seule fois suffit.
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
Bonjour.
Que ne comprends-tu pas ?marot_r je ne comprend pas ton code.
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.
Bonjour, marot_r, loufab
c'est simple. Le vba je débute et je m'y perd rapidement ...
La base que j'ai mis en exemple est une base que j'ai créé moi même, avec des infos vba piqué a droite à gauche, sans forcement les comprendre tous ...
De tous les posts de ce fil, je ne sais plus quoi essayer comme code. Il faut modifier, remplacer ... je m'y perds
Quelqu'un pourrais m’écrire le code à insérer ?
Re,
après bidouillage j'ai ce code :
Il fonctionne !! maintenant je dois trouver pour que les PDF s'enregistre dans un chemin spécifique et pas sur le bureau
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 Dim db As DAO.Database: Set db = CurrentDb Const NOM_RAPPORT As String = "Récap_pour_justificatif_salaire" Dim r As DAO.Recordset: Set r = db.OpenRecordset("T_Contrats", dbOpenSnapshot) Dim repertoireFic As String: repertoireFic = CurrentProject.Path Dim nomFic As String Dim infoFic As String Do While Not r.EOF nomFic = NOM_RAPPORT & "_" & r![N°_Employé] & ".pdf" infoFic = repertoireFic & "\" & nomFic If Dir(infoFic) <> "" Then Kill infoFic End If Call DoCmd.OpenReport(NOM_RAPPORT, acViewPreview, , "[N°_Employé]=" & r![N°_Employé]) 'ouvre le rapport Call DoCmd.OutputTo(acOutputReport, NOM_RAPPORT, acFormatPDF, infoFic, , , , acExportQualityPrint) 'crée le PDF à partir du rapport ouvert. Call DoCmd.Close(acReport, NOM_RAPPORT) r.MoveNext Loop r.Close: Set r = Nothing db.Close: Set db = Nothing End Sub
Et j'aimerais aussi que les fichiers créés soient nommé ainsi :
Code : Sélectionner tout - Visualiser dans une fenêtre à part "NOM" &"_"& "Prénom" &"_"& "récap salaire du" &"_"& "date de début" &" et"& "dans de fin"
Bonjour.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Dim repertoireFic As String: repertoireFic = "x:\unchemin" 'ici mettre le chemin que tu veuxUn truc du genre :"NOM" &"_"& "Prénom" &"_"& "récap salaire du" &"_"& "date de début" &" et"& "dans de fin"
Perso je ferai plutôt quelque chose comme "Recap salaire 2020-01-01 - 2020-01-31 Nom Prenom" histoire que les documents restent groupés par période.
Code : Sélectionner tout - Visualiser dans une fenêtre à part nomFic=r![Nom] &"_" & r![Prenom] &"_" & "récap salaire du" & "_" & format(r![dateDebut],"yyyy-mm-dd") & " et" & format(r![dateFin], "yyyy-mm-dd")
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.
Bonsoir,
je suis arrivé a faire aller les fichiers sur le chemin que je souhaite, mais je n'arrive pas a renommer le fichier comme je le veux ...
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 Dim db As DAO.Database: Set db = CurrentDb Const NOM_RAPPORT As String = "Récap_pour_justificatif_salaire" Dim r As DAO.Recordset: Set r = db.OpenRecordset("T_Contrats", dbOpenSnapshot) Dim repertoireFic As String: repertoireFic = "C:\Users\PC - Bureau\Desktop\a envoyer\" Dim nomFic As String Dim infoFic As String Do While Not r.EOF nomFic = r![N°_Employé] & ".pdf" infoFic = repertoireFic & "\" & nomFic If Dir(infoFic) <> "" Then Kill infoFic End If Call DoCmd.OpenReport(NOM_RAPPORT, acViewPreview, , "[N°_Employé] = " & r![N°_Employé]) 'ouvre le rapport Call DoCmd.OutputTo(acOutputReport, MON_RAPPORT, acFormatPDF, infoFic, , , , acExportQualityPrint) 'crée le PDF à partir du rapport ouvert. Call DoCmd.Close(acReport, NOM_RAPPORT) r.MoveNext Loop r.Close: Set r = Nothing db.Close: Set db = Nothing End Sub
Bonjour.
C'est cette ligne qu'il faut changer :
Et je t'ai mis le modèle suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part nomFic = r![N°_Employé] & ".pdf"
Quelle est la partie que tu ne comprends pas ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part nomFic=r![Nom] &"_" & r![Prenom] &"_" & "récap salaire du" & "_" & format(r![dateDebut],"yyyy-mm-dd") & " et " & format(r![dateFin], "yyyy-mm-dd")
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.
C'est bien a ce niveau que j'ai modifié le code, mais ca ne m'affiche une fenetre "erreur d éxécution 3265, element non trouvé dans cette collection" et en cliquant sur débogage, ça surligne la modification
bonsoir,
erreur 3265: quand un élément est non trouvé dans une collection, cela veut dire qu'un champ n'existe pas dans la table (ou la requête), la plupart du temps (pour ne pas dire tout le temps !), c'est une erreur humaine, donc, vérifie le nom de tes champs: le champ Non_dusage_Employé semble contenir une faute de frappe à mon avis
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 ?
Bonjour,
effectivement, j'ai bien fait une faute de frappe.j'ai refait avec la bonne orthographe, et j'ai le même message d'erreur ...
est ce que les champs nom_dusage_employé et prénom_employé doivent être présent dans mon etat ?
Bonjour.
Non, ils doivent être dans les champs du recordset source et exactement avec le même nom.
Ici : Set r = db.OpenRecordset("T_Contrats", dbOpenSnapshot).
Tu prends en entrée ta table T_Contrats, est-ce qu'elle contient les noms et prénoms de tes employés ?
Si non, ton problèmes vient de là.
Dans ce cas créer une requête qui met en jointure la table des contrats et celle des employés pour aller "pêcher" l'information manquante.
Si tu en as une qui fait déjà cela tu peux la réutiliser.
Une fois cette requête crée ou trouvée, sert-en comme source du recordset.
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.
dans T_Contrat, je me sert de N°_Sécu_Employé pour pouvoir puis je fais Me.N°_Employé = Me.N°_Secu_Employé.Column(4)
comment faire une requete avec jointure ??Dans ce cas créer une requête qui met en jointure la table des contrats et celle des employés pour aller "pêcher" l'information manquante.
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.
et après il faudra que je prenne la requete en entrée plutot que la tableT_Contrats ?
Bonjour.
Oui, ça va ressembler à :
A+
Code : Sélectionner tout - Visualiser dans une fenêtre à part Set r = db.OpenRecordset("NomTaRequete", dbOpenSnapshot)
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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager