{Access} Impression

Résolu/Fermé
Gibbs57 Messages postés 4 Date d'inscription mardi 5 janvier 2010 Statut Membre Dernière intervention 6 janvier 2010 - 5 janv. 2010 à 15:32
Gibbs57 Messages postés 4 Date d'inscription mardi 5 janvier 2010 Statut Membre Dernière intervention 6 janvier 2010 - 6 janv. 2010 à 07:04
Bonjour tout le monde,


Gros problème qui m'occupe déjà depuis quelques heures sans trouver de solution.

Je dois imprimer des cartes de membre (club canin) et pour éviter d'imprimer plusieurs ois la même, j'utilise la requête suivante :

SELECT TMembre.NumInscription, TMembre.DateInscription, TMembre.NomMembre, TMembre.Prenom, TMembre.Adresse, TMembre.CP, TMembre.Ville, TMembre.CheckCarte1
FROM TMembre
WHERE (((TMembre.DateInscription)=Date()) AND ((TMembre.CheckCarte1)=0));

J'ai donc, dans mon formulaire, une case à cocher qui se met à -1 lors de la pression du bouton Imprimer

Private Sub Imprim_carte1_Click()
On Error GoTo Erreur
nb = DCount("*", "RPremiere carte")
If nb = 0 Then
MsgBox "Pas de carte à imprimer."
Exit Sub
End If
DoCmd.OpenReport "EPremiere carte", acPreview
DoCmd.RunSQL "UPDATE TMembre SET CheckCarte1 = -1;", 0
Me.Requery
Exit_Imprim_carte1_Click:
Exit Sub
Erreur:
MsgBox Err.Description
Resume Exit_Imprim_carte1_Click
End Sub

Ca fonctionne très bien.

Le problème est que les cartes de membre doivent être renouvellées tous les ans et je n'arrive pas à sélectionner les membres devant se mettre en ordre à l'échéance. La solution ci-dessus ne fonctionne pas du fait de la contrainte de renouvellement annuel. Grâce à mon champ "Date de renouvellement" je peux pondre une requête m'affichant les gens à échance mais je calle sur le fait de n'imprimer que ceux là et pas tous mes enregistrements.

Auriez-vous une petite idée ?

Grand merci et bonne journée

5 réponses

blux Messages postés 26001 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 24 avril 2024 3 289
5 janv. 2010 à 15:58
Salut,

quand remets-tu à 0 ton champ checkcarte ?

je n'arrive pas à sélectionner les membres devant se mettre en ordre à l'échéance
Qu'appelles-tu "se mettre en ordre à l'échéance" ?
0
Gibbs57 Messages postés 4 Date d'inscription mardi 5 janvier 2010 Statut Membre Dernière intervention 6 janvier 2010
5 janv. 2010 à 16:15
Salut Blux,

Merci de te pencher sur mon problème.

Dans l'absolu, je n'ai pas besoin de remettre mon "checkcarte" à 0 puisque celui-ci gère l'impression de la première carte de membre du nouveau membre qui se présente au club.

Tous les ans, à la date d'échéance, il faudrait imprimer une nouvelle carte de membre. Pour cela, j'ai prévu un champ date "Date de renouvellement" qui devrait être incrémenté d'un an avant impression de la nouvelle carte de membre (c'est la mise en ordre à l'échéance).

Je vois un truc du genre : Une requête me donnant les gens arrivés à échéance :

SELECT TMembre.NumInscription, TMembre.DateRenouvellement, TMembre.NomMembre, TMembre.Prenom, TMembre.Adresse, TMembre.CP, TMembre.Ville
FROM TMembre
WHERE (((TMembre.DateRenouvellement)=Date()));

Un formulaire basé sur cette requête, un double clic sur l'enregistrement de la personne qui vient se mettre en ordre (et qui figure sur cette liste), un marquage quelconque sur le formulaire principal, mise à jour de la date de renouvellement + 1 an et impression de la carte de membre (facile à dire mais pour le faire, aïe aïe aïe ....)

Ceci est l'idée d'un gros novice et il y a beaucoup de chances que je me mette le doigt dans l'oeil ... ;o)

J'avoue que je pédale sérieusement, je ne trouve rien de bien convainquant, mes connaissances en VBA et SQL sont plus que limitées.


Encore un grand merci
0
blux Messages postés 26001 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 24 avril 2024 3 289
5 janv. 2010 à 17:09
Le mieux n'est pas de faire comme ça, mais de faire à l'envers, je m'explique :

Tu as une date d'inscription rattachée à chaque membre, il faut donc à chaque anniversaire imprimer une nouvelle carte, mais il y a un souci : imaginons qu'on ne passe pas de traitement tous les jours pour éditer les nouvelles cartes, celles qu'on a oubliées ne seront pas éditées.

Donc, l'astuce consiste à ne pas marquer la date de renouvellement, mais à mettre un top d'édition dans la base lorsque la carte est imprimée. ce top sera remis à zéro une fois l'an (à la première ouverture de la base, par exemple).

Ensuite, il te suffit de créer un bouton qui va sélectionner les adhérents qui ont un top à 0 et une date d'inscription inférieure à la date du jour, en ne testant bien sûr que le jour et le mois.
0
Gibbs57 Messages postés 4 Date d'inscription mardi 5 janvier 2010 Statut Membre Dernière intervention 6 janvier 2010
5 janv. 2010 à 18:05
Desolé Blux mais je ne comprends pas, enfin si mais comment mettre ça en oeuvre. Si je savais déjà ce qu'est un top d'étidion, ça m'aiderait :o))))) (ha oui, j'avais prévenu que je suis nul, faut pas se plaindre ;o))) )

Purée à force de chercher je fini pas ne plus rien percuter du tout ...

Bonne soirée et merci ;o)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Gibbs57 Messages postés 4 Date d'inscription mardi 5 janvier 2010 Statut Membre Dernière intervention 6 janvier 2010
6 janv. 2010 à 07:04
Bonjour Blux,
Bonjour tout le monde,


Alors voilà, le problème est résolu de la manière suivante :

Une requête pour afficher les membres arrivés à échéance :

SELECT TMembre.NumInscription, TMembre.DateRenouv, TMembre.Montant, TMembre.NomMembre, TMembre.Prenom, TMembre.Adresse, TMembre.CP, TMembre.Ville, TMembre.CheckRenouv
FROM TMembre
WHERE (((TMembre.DateRenouv)<Date()));

Un formulaire lié à cette requête qui s'affiche à l'ouverture de la base de données.

L'utilisateur modifie la date de renouvellement et coche la case "CheckRenouv" dans ce formulaire - Mise à jour du formulaire dans l'évènement AFTERUPDATE du champ CheckRenouv.

Une nouvelle requête pour imprimer mes cartes de membre:

SELECT TMembre.NumInscription, TMembre.DateRenouv, TMembre.Montant, TMembre.NomMembre, TMembre.Prenom, TMembre.Adresse, TMembre.CP, TMembre.Ville, TMembre.CheckRenouv
FROM TMembre
WHERE (((TMembre.CheckRenouv)=-1));

Un état ImprimRenouv en mode aperçu basé sur cette requête.

Et sur la fermeture de cet état, remise du CheckRenouv à 0

DoCmd.RunSQL "UPDATE TMembre SET checkrenouv = 0;", 0

Et voilà une affaire qui roule. Bon, je n'ai certainement pas choisi le chemin le plus court mais ça fonctionne, c'est le principal.

Mille mercis Blux, tu m'as mis sur la route, il fallait simplement que mon neurone comprenne ;o)

Bonne journée et mes meilleurs voeux pour cette nouvelle année.
0