Forum - Questions générale - Sujet n°578

[]
Nombre de membres 1 membre
Connectés : ( personne )
 

La Charte du Forum - La Charte du Forum

Forum - Forum
Questions générale - Questions générale


clos par 3Stone le 10/01/2014 : 01:05  Sujet n° 578  Générer autant d'état que d'enregistrement dans une requete

le 06/02/2012 : 22:42
par Julien

Anonyme

visiteur

Bonjour,
J'aimerais pouvoir exécuter via, macro ou code, un PDF à partir d'un état, basé sur plusieurs enregistrement en même temps.
J'ai un peu de mal a expliqué ma demande, en pratique, j'ai par exemple 15 factures au mois de janvier.
J'aimerais pouvoir générer mes 15 PDF avec chaque fois une facture, actuellement je dois générer mes facture individuellement en exécutant ma commande sur chaque "fiche client";

J'espère m’être fait comprendre, je vous remercie par avance pour votre aide.
julien

Ecrire à Julien  sujet clos  Haut

[]   

DébutPrécédent [ 1 2 3 ] SuivantFin
Réponse n° 1
--------
le 06/02/2012 : 23:42
par 3Stone

Anonyme

Administrateur

Bonjour,

Le principe est assez simple... avec un peu de code, effectivement.

Il faut prévoir plusieurs choses :
  • une requête qui te permet de sélectionner tous ceux que tu souhaites facturer
  • comme la requête sera probablement paramétrées, prévoir une (petit) formulaire pour saisir ces paramètres(date de... à... , le mois ou autre critères)
  • l'état qui représente la facture et qui affichera un seul client sur la/les pages
Dans le formulaire, un peu de code pour :
  • ouvrir un recordset sur la requête
  • boucler sur le recordset
  • a chaque ligne (chaque client) transmettre l'identifiant (la clé primaire) à l'état qui sera exécuté pour cet unique client
  • créer le pdf (en "imprimant l'état)
  • reboucler sur le recordset jusqu'à épuisement des enregistrements
Aussi long à expliquer qu'à faire wink

Je regarde pour te créer un petit exemple pour illustrer cela...

Cordialement,
Pierre(3stone)


3stone

  clos par 3Stone le 10/01/2014 : 01:05  Haut
Réponse n° 2
--------
le 26/11/2013 : 19:52
par Julien

Anonyme

visiteur
Bonjour,
je me permets de répondre à ma première demande, je n'ai toujours pas réussi à "boucler" et "reboucler".
si quelqu'un aurait un morceau de code pour m'aider à avancer sur le sujet, ça serait avec grand plaisir.
merci d'avance,
Julien
  clos par 3Stone le 10/01/2014 : 01:05  Haut
Réponse n° 3
--------
le 27/11/2013 : 01:10
par 3Stone

3Stone

Administrateur

Bonjour,
 
Citation :

je n'ai toujours pas réussi à "boucler" et "reboucler".

 
Tu as essayé ce que j'ai indiqué plus haut ?  et tu n'y es pas arrivé malgré le découpage indiqué ?

Je peux seulement te proposer d'utiliser ceci pour m'envoyer ta base avec quelques données exemples.

Cordialement
Pierre(3stone)
  clos par 3Stone le 10/01/2014 : 01:05  Haut
Réponse n° 4
--------
le 27/11/2013 : 08:51
par Julien

Anonyme

visiteur
Bonjour,
Je vais essayer d'envoyer ma base, mais en l'état le fichier est bien trop lourd, en attendant voici le code, j'ai une première erreur : "Trop peu de paramètres".


 
Code :
Sub PrintAsPDF( _
ByVal strFilename As String, _
ByVal strReportName As String, _
Optional ByVal strWhere As String = "", _
Optional ByVal blnOpenReader As Boolean = False)

DoCmd.OpenReport strReportName, acViewPreview, , _
strWhere, acHidden

DoCmd.OutputTo acOutputReport, strReportName, acFormatPDF, _
strFilename, blnOpenReader

DoCmd.Close acReport, strReportName
End Sub
Private Sub Afficher_Factures_Click()
Dim strFichier As String
Dim strEtat As String
Dim strFiltre As String
Dim rst As dao.Recordset

strEtat = "Facture-mult"


strFichier = "c:\Docs\test\Fact" & DLookup("[numfact]", "fact_synthese-mult", strFilter) & ".pdf"

Set rst = CurrentDb.OpenRecordset("fact_synthese-mult", dbOpenSnapshot)

While Not rst.EOF
'strFiltre = "[réffacture] = " & rst("réffacture")
strFiltre = "[réffacture] <> rst(1) & rst(2)"

PrintAsPDF strFichierPDF, strEtat, strFiltre

rst.MoveNext
Wend
rst.Close
Set rst = Nothing
MsgBox "Opération terminée !", vbInformation
End Sub
 

merci !
Julien
  clos par 3Stone le 10/01/2014 : 01:05  Haut
Réponse n° 5
--------
le 27/11/2013 : 14:38
par 3Stone

3Stone

Administrateur

Bonjour,

Première chose à faire absolument : rendre la déclaration des variables obligatoire!
Pour cela, dans l'éditeur du VBA (VBE - Visual Basic Editor) aller cocher via le menu Outils, Options, Déclaration des variables obligatoire.

Cela évite des erreurs inutiles comme l'utilisation de "strFiltre" d'un coté et de "strFilter" par ailleurs...

Si les différents enregistrements qui représentent les factures sont source du formulaire, ton code qui boucle peut se réduire à quelque chose comme ceci :

 
Code :
Public Function BouclerFacture()
Dim Rst As dao.Recordset
Dim NbreEnreg As Integer
Dim i As Integer
Dim strFiltre As String

Set Rst = Me.RecordsetClone
NbreEnreg = Me.RecordCount

For i = 1 To NbreEnreg
strFiltre = "[IdFacture] = " & Rst.IdFacture

PrintAsPDF strFichierPDF, strNomEtat, strFiltre

Next i

Rst.Close
Set Rst = Nothing
End Function
 
a adapter au nom de tes champs, bien sûr.

Cordialement,
Pierre(3stone)
  clos par 3Stone le 10/01/2014 : 01:05  Haut
Réponse n° 6
--------
le 04/12/2013 : 14:47
par Julien

Anonyme

visiteur
Bonjour,
Merci pour cette précision, cependant je n'arrive pas à appeler ma fonction sur le bouton... Private Sub ..._Click()

Erreur de compilation : membre de méthode ou de données introuvable.

J'ai bien dans la source du formulaire mes enregistrements Factures

merci d'avance pour votre aide.
Julien
Ecrire à Julien   clos par 3Stone le 10/01/2014 : 01:05  Haut
Réponse n° 7
--------
le 05/12/2013 : 00:52
par 3Stone

3Stone

Administrateur

Bonjour,

La fonction donnée plus haut (que tu auras adaptée, bien sûr) se place "sous" le formulaire et non dans la section module.

Il ne faut pas faire un simple copié/collé... mais adapter à tes champs et contrôles et SURTOUT compiler ton code pour pister les erreurs éventuelles.

Cordialement,
Pierre(3stone)
  clos par 3Stone le 10/01/2014 : 01:05  Haut
Réponse n° 8
--------
le 05/12/2013 : 01:04
par Julien

Anonyme

visiteur
Bonjour,
Je l'ai bien placé dans mon formulaire et mis à jour les champs...
l'erreur à l'air de venir de Me.RecordCount

Julien
  clos par 3Stone le 10/01/2014 : 01:05  Haut
DébutPrécédent [ 1 2 3 ] SuivantFin
actif sujet actif   clos sujet clos   Important! Important!   Nouveau Nouveau message   -   Rectifier Rectifier message   Clôturer Clôturer sujet   Remonter Remonter
[]
Catégories de discussion  Forum 



Haut