Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Mettre à 0 certaines valeurs

6 réponses
Avatar
C15
Bonsoir à tous et à toutes,

J'ai une base pour gérer des adhérents d'une association.
On fait le suivi des cotisations non payées en remontant sur les 5
dernières années.

J'ai donc un formulaire avec les données de chaque adhérent, dont un
contrôle "Montant_dû" issu d'une requête (source du formulaire)
Montant_dû=Du10+Du09+Du08+Du07+Du06.

J'ai un bouton "nouvelle fiche" pour ouvrir le formulaire sur un
enregistrement vierge et saisir les données d'un nouvel adhérent.

En m'inspirant de ce que j'ai trouvé ici et là j'ai mis ce bout de code
sur l'évènement "sur clic" de ce bouton

Dim Testdate As Integer, dateI As String, Cotis As String
dateI = Year(DateAdhesion)
Testdate = Right$(dateI, 2)

For i = 1 To 6
Cotis = "Du" & Format(Testdate - i, "00")
Cotis = 0
Next i

afin que, pour tout nouvel adhérent, les cotisations dues des 5
dernières années ne lui soient pas réclamées.

Cela ne marche pas.

Où mon raisonnement coince-t-il ?

Merci de votre aide.

A+

C15

6 réponses

Avatar
3stone
Salut,

Hmmm... vague souvenir de conversations antérieures...

C15 wrote:
J'ai une base pour gérer des adhérents d'une association.
On fait le suivi des cotisations non payées en remontant sur les 5
dernières années.

J'ai donc un formulaire avec les données de chaque adhérent, dont un
contrôle "Montant_dû" issu d'une requête (source du formulaire)
Montant_dû=Du10+Du09+Du08+Du07+Du06.




cette construction t'oblige à modifier ta base à chaque année...



J'ai un bouton "nouvelle fiche" pour ouvrir le formulaire sur un
enregistrement vierge et saisir les données d'un nouvel adhérent.

En m'inspirant de ce que j'ai trouvé ici et là j'ai mis ce bout de
code sur l'évènement "sur clic" de ce bouton

Dim Testdate As Integer, dateI As String, Cotis As String
dateI = Year(DateAdhesion)
Testdate = Right$(dateI, 2)

For i = 1 To 6
Cotis = "Du" & Format(Testdate - i, "00")
Cotis = 0
Next i

afin que, pour tout nouvel adhérent, les cotisations dues des 5
dernières années ne lui soient pas réclamées.

Cela ne marche pas.

Où mon raisonnement coince-t-il ?




Erreur de frappe, ou quoi ?

Cotis = "Du" & Format(Testdate - i, "00")
Cotis = 0

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
Gloops
Le 28/04/2010 20:58, C15 a écrit :
Bonsoir à tous et à toutes,



Bonsoir,

Ah tiens, voilà un sujet qui m'a tout de suite fait penser à ce que d it
3stone.

For i = 1 To 6
Cotis = "Du" & Format(Testdate - i, "00")
Cotis = 0
Next i



Du coup là je ne réalise pas ce que doit contenir Cotis ni même de quel
type elle est.

Si elle contient le nom du champ c'est une variable de type chaîne de
caractères.
Si elle doit contenir sa valeur elle est ... du même type que le champ,
soit numérique (à préciser).

Bon alors j'explorerais bien un amusement de ce type :
(je pars du principe que la requête est ouverte dans un objet de type
QueryDef qui s'appelle Qry, et qu'elle a un champ Adherent de type
chaîne de caractères permettant d'identifier facilement à la lectur e
l'adhérent concerné par l'enregistrement en cours)

Dim Rs As Recordset
Dim NomChamp As String
Set Rs = Qry.OpenRecordset()
While not Rs.EOF
Debug.Print "Pour l'adhérent " + Qry!Adherent
For i = 1 to 6
NomChamp = "Du" + Trim$(Format(TestDate - i, "00"))
Debug.Print "Pour l'année " & (TestDate - i)
Debug.Print " le champ s'appelle " + NomChamp
Debug.Print " et il vaut " & Rs.Fields(NomChamp)
Next
Debug.Print "______________________________________"
Rs.MoveNext
Stop
Wend

Après on lit ce que ça donne, on cogite, et on en déduit ce qu'il f aut
faire ...
Sauf que si il y a lieu de modifier la valeur du champ on en reparlera
peut-être parce que ça ne se fera pas dans la requête, si c'est une
requête de type SELECT. Il conviendra de lire dans l'enregistrement de
la requête la clef de l'enregistrement à modifier, en ayant bien
conscience du nom de la table, et après on peut recourir à un jeu
d'enregistrements ou à une requête UPDATE.

Je note au passage que l'année 2010 n'est pas traitée si TestDate vau t
2010, puisqu'on va de (2010 - 1 = 2009) à (2010 - 6 = 2004).
Avatar
C15
Bonjour à tous les 2,

Ce que vous écrivez me fait dire que je suis totalement à côté de la plaque.

Pour info, les champs DuXX ont pour valeur 20 (cotisation annuelle).
Par ailleurs quand j'ai parlé d'une requête, j'aurai mieux fait de dire
l'instruction SQL sur laquelle est basée mon formulaire.

J'ai repensé le problème et ait tout simplement mis 0 comme valeur par
défaut pour Du05 à Du09 et 20 pour Du10 à Du..

Ces valeurs par défaut s'appliquant par définition aux nouveaux
enregistrements, tout nouvel adhérent aura
Montant_dû=Du10+Du09+Du08+Du07+Du06 (Cotisation de 2010).

Par contre dans le contrôle Montant_du de ce 1er formulaire, dès que je
commence à saisir le nom de l'adhérent la valeur par défaut disparait (?).
Comment se fait il que la valeur 20 n'apparaisse pas ?


Pour mettre à jour les cotisations j'ai un autre formulaire avec des
cases à cocher.
Lorsque l'on saisit les données d'un nouvel adhérent, l'on coche une
case C10 (s'il est considéré comme adhérent c'est qu'il vient de payer
sa 1ère cotisation C10) et donc la cotisation due Du10 passe à 0.


Merci de votre aide.

A+

C15










Le 28/04/2010 23:16, Gloops a écrit :
Le 28/04/2010 20:58, C15 a écrit :
Bonsoir à tous et à toutes,



Bonsoir,

Ah tiens, voilà un sujet qui m'a tout de suite fait penser à ce que dit
3stone.

For i = 1 To 6
Cotis = "Du" & Format(Testdate - i, "00")
Cotis = 0
Next i



Du coup là je ne réalise pas ce que doit contenir Cotis ni même de quel
type elle est.

Si elle contient le nom du champ c'est une variable de type chaîne de
caractères.
Si elle doit contenir sa valeur elle est ... du même type que le champ,
soit numérique (à préciser).

Bon alors j'explorerais bien un amusement de ce type :
(je pars du principe que la requête est ouverte dans un objet de type
QueryDef qui s'appelle Qry, et qu'elle a un champ Adherent de type
chaîne de caractères permettant d'identifier facilement à la lecture
l'adhérent concerné par l'enregistrement en cours)

Dim Rs As Recordset
Dim NomChamp As String
Set Rs = Qry.OpenRecordset()
While not Rs.EOF
Debug.Print "Pour l'adhérent " + Qry!Adherent
For i = 1 to 6
NomChamp = "Du" + Trim$(Format(TestDate - i, "00"))
Debug.Print "Pour l'année " & (TestDate - i)
Debug.Print " le champ s'appelle " + NomChamp
Debug.Print " et il vaut " & Rs.Fields(NomChamp)
Next
Debug.Print "______________________________________"
Rs.MoveNext
Stop
Wend

Après on lit ce que ça donne, on cogite, et on en déduit ce qu'il faut
faire ...
Sauf que si il y a lieu de modifier la valeur du champ on en reparlera
peut-être parce que ça ne se fera pas dans la requête, si c'est une
requête de type SELECT. Il conviendra de lire dans l'enregistrement de
la requête la clef de l'enregistrement à modifier, en ayant bien
conscience du nom de la table, et après on peut recourir à un jeu
d'enregistrements ou à une requête UPDATE.

Je note au passage que l'année 2010 n'est pas traitée si TestDate vaut
2010, puisqu'on va de (2010 - 1 = 2009) à (2010 - 6 = 2004).


Avatar
Gloops
Le 02/05/2010 11:39, C15 a écrit :
Bonjour à tous les 2,

Ce que vous écrivez me fait dire que je suis totalement à côté de la
plaque.

Pour info, les champs DuXX ont pour valeur 20 (cotisation annuelle).
Par ailleurs quand j'ai parlé d'une requête, j'aurai mieux fait de dire
l'instruction SQL sur laquelle est basée mon formulaire.



Boh, ça s'appelle bien une requête :)


J'ai repensé le problème et ait tout simplement mis 0 comme valeur par
défaut pour Du05 à Du09 et 20 pour Du10 à Du..




Est-ce que je comprends que le résultat finit par fonctionner ?
C'est l'essentiel.

On dirait que sur cette application la difficulté se situe plus au
niveau de l'analyse que de la mise en œuvre ensuite.

Ce qui m'incite à conseiller de bien approfondir les tests en
envisageant toutes sortes de cas de figures rarissimes. Incluant la
prise en charge de l'application par un successeur à qui on n'aurait pa s
le temps de trop bien expliquer comment ça fonctionne.
Avatar
C15
Bonsoir,

C'est un base qui fonctionne depuis 2002.
Je suis parti d'un projet existant, avec mes connaissances Access de
l'époque.
Comme dit dans un post précédent, j'ai une mise à jour manuelle à faire
tous les ans ; ce n'est pas le top, mais j'ai documenté la procédure, si
par hasard je me réveillais mourru demain matin ;-))

L'idéal ce serait d'avoir une table Cotisations Cxx, une table
cotisations dues Duxx et une table années dont je prendrais les 2
derniers chiffres au lieu d'avoir tout dans une même table.
Je ne sais pas trop comment y arriver depuis l'existant actuel.
Si par hasard tu avais une piste de réflexion je suis preneur.

Merci de ton aide.

A+

C15

Le 02/05/2010 12:39, Gloops a écrit :
Le 02/05/2010 11:39, C15 a écrit :
Bonjour à tous les 2,

Ce que vous écrivez me fait dire que je suis totalement à côté de la
plaque.

Pour info, les champs DuXX ont pour valeur 20 (cotisation annuelle).
Par ailleurs quand j'ai parlé d'une requête, j'aurai mieux fait de dire
l'instruction SQL sur laquelle est basée mon formulaire.



Boh, ça s'appelle bien une requête :)


J'ai repensé le problème et ait tout simplement mis 0 comme valeur par
défaut pour Du05 à Du09 et 20 pour Du10 à Du..




Est-ce que je comprends que le résultat finit par fonctionner ?
C'est l'essentiel.

On dirait que sur cette application la difficulté se situe plus au
niveau de l'analyse que de la mise en œuvre ensuite.

Ce qui m'incite à conseiller de bien approfondir les tests en
envisageant toutes sortes de cas de figures rarissimes. Incluant la
prise en charge de l'application par un successeur à qui on n'aurait pas
le temps de trop bien expliquer comment ça fonctionne.



Avatar
Gloops
Le 02/05/2010 18:10, C15 a écrit :
L'idéal ce serait d'avoir une table Cotisations Cxx, une table
cotisations dues Duxx et une table années dont je prendrais les 2
derniers chiffres au lieu d'avoir tout dans une même table.
Je ne sais pas trop comment y arriver depuis l'existant actuel.
Si par hasard tu avais une piste de réflexion je suis preneur.



C'est un sujet qui mérite d'y réfléchir sérieusement.
Je pense plus ou moins à une relation entre l'adhérent et l'année, qui
peut contenir le montant de l'adhésion et payé oui/non.
Mais on n'est pas au bout, avec ça.