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

Mettre plusieurs champs à 0

19 réponses
Avatar
C15
Bonjour à tous et à toutes,

J'ai un formulaire pour gérer des adhérents d'une assoc, basé sur une
table [T adhérents] dans lequel j'ai des champs liés aux cotisations
[Du09], [Du08],[Du07],[Du06],[Du05],[Du04] concernant les cotisations
des 5 dernières années que l'on peut encore réclamer.

Quand je créé un nouvel adhérent on ne peut bien sur pas lui réclamer
les cotisations des années précédentes.

Dans un post précédent Michel_D (merci à lui) m'avait proposé la
solution suivante :
VraiFaux(Year([DateAdhesion])<Year(Date());[Du09]+[Du08]+[Du07]+[Du06]+[Du05]+[Du04];0)

Cela marche bien pour obtenir que le total soit égal à 0 ou à la somme
des cotisations réellement dues.
Mais comment faire pour que dans ma table les champs [Du09],
[Du08],[Du07],[Du06],[Du05],[Du04] soient remis à 0 (valeur par défaut=15) ?

J'en ai effectivement besoin pour un publipostage "rappel des cotisations"

Si l'année de la date d'adhésion est < l'année en cours, alors le total du
[Du09]+[Du08]+[Du07]+[Du06]+[Du05]+[Du04]=0
sinon
[Du09]=0
[Du08]=0
[Du07]=0
[Du06]=0
[Du05]=0
[Du04]=0
et
le total du [Du09]+[Du08]+[Du07]+[Du06]+[Du05]+[Du04]=0

Je n'arrive pas à mettre cela en musique.

Merci de votre aide.

A+

C15

9 réponses

1 2
Avatar
C15
Bonjour,

Malgré tes explications particulièrement claires, cela ne marche
toujours pas.


J'ai fait 2 corrections mineures à ta formule (tes doigts ayant sans
doute glissé sur le clavier) :

sSQL = "UPDATE... et non UUPDATE...

& "[Formulaires]![F Adhérents]![N°Adherent]" & ";" et non
& [Formulaires]![F Adhérents]![N°Adherent] & ";"

L'événement après insertion est-il le mieux adapté ?
De toute façon il faut exécuter cette instruction après que le
N°Adhérent ait été généré.

Merci de ton aide.

A+

C15

Michel__D a écrit :
Bonjour,

1)
Donc il faudrait mettre la valeur par défaut sur les champs [Cxx] de ta
table
[T adhérents] sauf pour le champ [Cxx] correspondant à l'année en cours.

2)
Pour exécuter une requête action, il ne faut pas employer la méthode
OpenQuery
qui est dédié aux requêtes sélection/analyse croisée et tu peux utiliser
par exemple la méthode RunSQL de l'objet DoCmd.

Private Sub Form_AfterInsert()
Dim sSQL As String

MsgBox "Vous allez exécuter une requête qui va mettre à 0 les
cotisations des 5 denières années", vbQuestion
sSQL = "UUPDATE [T Adhérents] AS T " & _
"SET T.Du09 = 0, T.Du08 = 0, T.Du07 = 0, T.Du06 = 0, T.Du05 = 0,
T.Du04 = 0 " & _
"WHERE T.[N°Adherent]=" & [Formulaires]![F Adhérents]![N°Adherent] & ";"
DoCmd.SetWarnings False
DoCmd.RunSQL sSQL
DoCmd.SetWarnings True
End Sub


C15 a écrit :
Bonjour,

Ma table T adhérents comporte entre autres des champs [Cxx] concernant
les cotisations à payer de [Duxx] concernant les cotisations dues
(valeur par défaut 20).

Le principe est que l'on peut réclamer aux adhérents jusqu'aux 5
dernières années, sinon carton rouge.

J'ai un formulaire F adhérents pour entrer les données nominatives sur
lequel j'ai un bouton pour ouvrir un autre formulaire "F cotisations".
Sur celui-ci j'ai des cases à cocher Cxx sur lesquelles je clique
lorsque le paiement est effectué, mettant le Duxx à 0.
J'y ai aussi un contrôle pour calculer le montant du des 5 dernières
années.

Pour un adhérent "ancien", tout va bien, il me suffit de cocher les
Cxx et j'ai le montant des cotisations restantes dues.

Pour un nouvel adhérent, il est évident que l'on ne peut lui réclamer
le montant des 5 dernières années.

Grâce à toi et à d'autres idées que j'ai piquées sur le forum, j'ai
fait une requête mise à jour :
>>>
UPDATE [T Adhérents] SET [T Adhérents].Du09 = 0, [T Adhérents].Du08 =
0, [T Adhérents].Du07 = 0, [T Adhérents].Du06 = 0, [T Adhérents].Du05
= 0, [T Adhérents].Du04 = 0
WHERE ((([T Adhérents].N°Adherent)=[Formulaires]![F
Adhérents]![N°Adherent]));
>>>

J'ai voulu la déclencher, à partir de mon F Adhérents, soit le bouton
"créer une nouvelle fiche", soit sur le bouton "valider la saisie",
soit sur l'évènement "après insertion" donnant par exemple ceci :
>>>
Private Sub Form_AfterInsert()

Dim stDocName As String

MsgBox "Vous allez exécuter une requête qui va mettre à 0 les
cotisations des 5 denières années", vbQuestion
stDocName = "R mise à jour cotisation nouvel adhérent"
DoCmd.OpenQuery stDocName, acViewNormal, acEdit

End Sub
>>>

Cela ne marche pas, alors que si j'exécute la requête directement,
cela marche.

Merci de ton aide pour me dire quel est le meilleur moyen pour
exécuter cette requête.

A+

C15


Michel__D a écrit :
Bonjour,

On doit pas se comprendre, la valeur par défaut d'un champ d'une table
veut dire que pour tout nouvel enregistrement pour lequel la valeur
du champ n'est pas spécifié celui-ci prend la valeur par défaut car
sinon généralement c'est la valeur nulle qui est appliqué.

En y réfléchissant, j'ai de plus en plus de doute concernant la
structure
de la table.


C15 a écrit :
Bonsoir à tous et à toutes,

Si je paramètre les champs à 0 par défaut, il faut que je recalcule
à chaque fois ce que doivent les mauvais payeurs, et cela ne me
plait pas trop...
En ayant une valeur par défaut à 15, il me suffit de cliquer sur une
case à cocher pour avoir 0 en somme due dès que le paiement est
enregistré, et cela me parait plus simple pour le trésorier.

Merci de ton aide.

A+

C15


Michel__D a écrit :
Bonjour,

Il faut paramêtrer tes champs au niveau de ta table (valeur par
défaut = 0)


"C15" a écrit dans le message
de news:
Bonsoir à tous et à toutes,

J'ai fait l'essai avec un
DoCmd.Openquery... ma requête mise à jour de mes [duxx]
associé à mon bouton "créer un nouvel adhérent".

Cela ne marche pas car ma requête met à jour 0 ligne.
Il faudrait, je pense, faire en sorte que cette requête s'exécute
quand le nouveau numéro d'adhérent a été attribué, mais pas avant
(actuellement elle s'exécute dès qu'un formulaire vierge s'ouvre).

Un nouveau numéro d'adhérent est attribué quand une valeur
commence à être saisie (comme par exemple le titre ou la 1ère
lettre du nom).
Comment faire alors pour que la requête mette à jour les [Duxx]
seulement à ce moment là ?

Merci de votre aide.

A+

C15


C15 a écrit :
Bonjour à tous et à toutes,

Pour le moment je préfère avoir la valeur par défaut de mes
cotisations dues à 20 ¤ c'est plus facile de savoir ce que les
gens doivent.

Par contre j'ai pensé à faire une requête mise à jour des champs
[du09] à [du04] =0 avec en critère [F Adhérents]![N° Adhérent]
que j'exécute lorsque je saisis les coordonnées d'un nouvel
adhérent (par exemple sur Clic d'un bouton existant "créer un
nouvel adhérent").

A priori il n'y a pas d'interdiction de mettre à jour plusieurs
champs en même temps, n'est-il pas ?

Je ne sais si mon raisonnement est bon.
Je vais tester et vous dirais si cela tient la route.

Merci de votre aide.

A+

C15


Michel__D a écrit :
Bonjour,

Je ne sais pas si j'ai tout compris, mais si tu met la valeur
par défaut
de tes champs [DuXX] à 0 sauf pour le champ [DuXX] de l'année
en cours
cela ne te donnerait-il pas ce que tu recherche ?


C15 a écrit :
Bonjour à tous et à toutes,

J'ai un formulaire pour gérer des adhérents d'une assoc, basé
sur une table [T adhérents] dans lequel j'ai des champs liés
aux cotisations [Du09], [Du08],[Du07],[Du06],[Du05],[Du04]
concernant les cotisations des 5 dernières années que l'on peut
encore réclamer.

Quand je créé un nouvel adhérent on ne peut bien sur pas lui
réclamer les cotisations des années précédentes.

Dans un post précédent Michel_D (merci à lui) m'avait proposé
la solution suivante :
VraiFaux(Year([DateAdhesion])<Year(Date());[Du09]+[Du08]+[Du07]+[Du06]+[Du05]+[Du04];0)


Cela marche bien pour obtenir que le total soit égal à 0 ou à
la somme des cotisations réellement dues.
Mais comment faire pour que dans ma table les champs [Du09],
[Du08],[Du07],[Du06],[Du05],[Du04] soient remis à 0 (valeur par
défaut) ?

J'en ai effectivement besoin pour un publipostage "rappel des
cotisations"

Si l'année de la date d'adhésion est < l'année en cours, alors
le total du
[Du09]+[Du08]+[Du07]+[Du06]+[Du05]+[Du04]=0
sinon
[Du09]=0
[Du08]=0
[Du07]=0
[Du06]=0
[Du05]=0
[Du04]=0
et
le total du [Du09]+[Du08]+[Du07]+[Du06]+[Du05]+[Du04]=0

Je n'arrive pas à mettre cela en musique.

Merci de votre aide.

A+

C15



















Avatar
Michel__D
Bonjour,

C15 a écrit :
Bonjour,

Malgré tes explications particulièrement claires, cela ne marche
toujours pas.


J'ai fait 2 corrections mineures à ta formule (tes doigts ayant sans
doute glissé sur le clavier) :

sSQL = "UPDATE... et non UUPDATE...



Ok pour erreur lors du copier/coller.

& "[Formulaires]![F Adhérents]![N°Adherent]" & ";" et non
& [Formulaires]![F Adhérents]![N°Adherent] & ";"



Par contre ici il faut laisser :
& [Formulaires]![F Adhérents]![N°Adherent] & ";"

L'événement après insertion est-il le mieux adapté ?
De toute façon il faut exécuter cette instruction après que le
N°Adhérent ait été généré.



Heu, il faut bien évidemment qu'un [N°Adhérent] ai été sélectionné au
niveau du formulaire avant de clicker sur le bouton sinon modifie le code
afin de contrôler la valeur de [Formulaires]![F Adhérents]![N°Adherent]

Merci de ton aide.

A+

C15

Michel__D a écrit :
Bonjour,

1)
Donc il faudrait mettre la valeur par défaut sur les champs [Cxx] de
ta table
[T adhérents] sauf pour le champ [Cxx] correspondant à l'année en cours.

2)
Pour exécuter une requête action, il ne faut pas employer la méthode
OpenQuery
qui est dédié aux requêtes sélection/analyse croisée et tu peux utiliser
par exemple la méthode RunSQL de l'objet DoCmd.

Private Sub Form_AfterInsert()
Dim sSQL As String

MsgBox "Vous allez exécuter une requête qui va mettre à 0 les
cotisations des 5 denières années", vbQuestion
sSQL = "UUPDATE [T Adhérents] AS T " & _
"SET T.Du09 = 0, T.Du08 = 0, T.Du07 = 0, T.Du06 = 0, T.Du05 = 0,
T.Du04 = 0 " & _
"WHERE T.[N°Adherent]=" & [Formulaires]![F Adhérents]![N°Adherent]
& ";"
DoCmd.SetWarnings False
DoCmd.RunSQL sSQL
DoCmd.SetWarnings True
End Sub


C15 a écrit :
Bonjour,

Ma table T adhérents comporte entre autres des champs [Cxx]
concernant les cotisations à payer de [Duxx] concernant les
cotisations dues (valeur par défaut 20).

Le principe est que l'on peut réclamer aux adhérents jusqu'aux 5
dernières années, sinon carton rouge.

J'ai un formulaire F adhérents pour entrer les données nominatives
sur lequel j'ai un bouton pour ouvrir un autre formulaire "F
cotisations".
Sur celui-ci j'ai des cases à cocher Cxx sur lesquelles je clique
lorsque le paiement est effectué, mettant le Duxx à 0.
J'y ai aussi un contrôle pour calculer le montant du des 5 dernières
années.

Pour un adhérent "ancien", tout va bien, il me suffit de cocher les
Cxx et j'ai le montant des cotisations restantes dues.

Pour un nouvel adhérent, il est évident que l'on ne peut lui réclamer
le montant des 5 dernières années.

Grâce à toi et à d'autres idées que j'ai piquées sur le forum, j'ai
fait une requête mise à jour :
>>>
UPDATE [T Adhérents] SET [T Adhérents].Du09 = 0, [T Adhérents].Du08 =
0, [T Adhérents].Du07 = 0, [T Adhérents].Du06 = 0, [T Adhérents].Du05
= 0, [T Adhérents].Du04 = 0
WHERE ((([T Adhérents].N°Adherent)=[Formulaires]![F
Adhérents]![N°Adherent]));
>>>

J'ai voulu la déclencher, à partir de mon F Adhérents, soit le bouton
"créer une nouvelle fiche", soit sur le bouton "valider la saisie",
soit sur l'évènement "après insertion" donnant par exemple ceci :
>>>
Private Sub Form_AfterInsert()

Dim stDocName As String

MsgBox "Vous allez exécuter une requête qui va mettre à 0 les
cotisations des 5 denières années", vbQuestion
stDocName = "R mise à jour cotisation nouvel adhérent"
DoCmd.OpenQuery stDocName, acViewNormal, acEdit

End Sub
>>>

Cela ne marche pas, alors que si j'exécute la requête directement,
cela marche.

Merci de ton aide pour me dire quel est le meilleur moyen pour
exécuter cette requête.

A+

C15


Michel__D a écrit :
Bonjour,

On doit pas se comprendre, la valeur par défaut d'un champ d'une table
veut dire que pour tout nouvel enregistrement pour lequel la valeur
du champ n'est pas spécifié celui-ci prend la valeur par défaut car
sinon généralement c'est la valeur nulle qui est appliqué.

En y réfléchissant, j'ai de plus en plus de doute concernant la
structure
de la table.


C15 a écrit :
Bonsoir à tous et à toutes,

Si je paramètre les champs à 0 par défaut, il faut que je recalcule
à chaque fois ce que doivent les mauvais payeurs, et cela ne me
plait pas trop...
En ayant une valeur par défaut à 15, il me suffit de cliquer sur
une case à cocher pour avoir 0 en somme due dès que le paiement est
enregistré, et cela me parait plus simple pour le trésorier.

Merci de ton aide.

A+

C15


Michel__D a écrit :
Bonjour,

Il faut paramêtrer tes champs au niveau de ta table (valeur par
défaut = 0)


"C15" a écrit dans le
message de news:
Bonsoir à tous et à toutes,

J'ai fait l'essai avec un
DoCmd.Openquery... ma requête mise à jour de mes [duxx]
associé à mon bouton "créer un nouvel adhérent".

Cela ne marche pas car ma requête met à jour 0 ligne.
Il faudrait, je pense, faire en sorte que cette requête s'exécute
quand le nouveau numéro d'adhérent a été attribué, mais pas avant
(actuellement elle s'exécute dès qu'un formulaire vierge s'ouvre).

Un nouveau numéro d'adhérent est attribué quand une valeur
commence à être saisie (comme par exemple le titre ou la 1ère
lettre du nom).
Comment faire alors pour que la requête mette à jour les [Duxx]
seulement à ce moment là ?

Merci de votre aide.

A+

C15


C15 a écrit :
Bonjour à tous et à toutes,

Pour le moment je préfère avoir la valeur par défaut de mes
cotisations dues à 20 ¤ c'est plus facile de savoir ce que les
gens doivent.

Par contre j'ai pensé à faire une requête mise à jour des champs
[du09] à [du04] =0 avec en critère [F Adhérents]![N° Adhérent]
que j'exécute lorsque je saisis les coordonnées d'un nouvel
adhérent (par exemple sur Clic d'un bouton existant "créer un
nouvel adhérent").

A priori il n'y a pas d'interdiction de mettre à jour plusieurs
champs en même temps, n'est-il pas ?

Je ne sais si mon raisonnement est bon.
Je vais tester et vous dirais si cela tient la route.

Merci de votre aide.

A+

C15


Michel__D a écrit :
Bonjour,

Je ne sais pas si j'ai tout compris, mais si tu met la valeur
par défaut
de tes champs [DuXX] à 0 sauf pour le champ [DuXX] de l'année
en cours
cela ne te donnerait-il pas ce que tu recherche ?


C15 a écrit :
Bonjour à tous et à toutes,

J'ai un formulaire pour gérer des adhérents d'une assoc, basé
sur une table [T adhérents] dans lequel j'ai des champs liés
aux cotisations [Du09], [Du08],[Du07],[Du06],[Du05],[Du04]
concernant les cotisations des 5 dernières années que l'on
peut encore réclamer.

Quand je créé un nouvel adhérent on ne peut bien sur pas lui
réclamer les cotisations des années précédentes.

Dans un post précédent Michel_D (merci à lui) m'avait proposé
la solution suivante :
VraiFaux(Year([DateAdhesion])<Year(Date());[Du09]+[Du08]+[Du07]+[Du06]+[Du05]+[Du04];0)


Cela marche bien pour obtenir que le total soit égal à 0 ou à
la somme des cotisations réellement dues.
Mais comment faire pour que dans ma table les champs [Du09],
[Du08],[Du07],[Du06],[Du05],[Du04] soient remis à 0 (valeur
par défaut) ?

J'en ai effectivement besoin pour un publipostage "rappel des
cotisations"

Si l'année de la date d'adhésion est < l'année en cours, alors
le total du
[Du09]+[Du08]+[Du07]+[Du06]+[Du05]+[Du04]=0
sinon
[Du09]=0
[Du08]=0
[Du07]=0
[Du06]=0
[Du05]=0
[Du04]=0
et
le total du [Du09]+[Du08]+[Du07]+[Du06]+[Du05]+[Du04]=0

Je n'arrive pas à mettre cela en musique.

Merci de votre aide.

A+

C15





















Avatar
C15
Rebonjour,

Mon N°Adhérent est généré dès que je commence à saisir le nom.

Si le code que tu me proposes est sur "après insertion", c'est bien le
N°Adhérent de l'enregistrement actuel qui est pris en compte ou faut-il
d'abord sauvegarder l'enregistrement ?

Car pour le moment cela ne marche toujours pas, sauf si j'exécute le
code directement sans l'associer à un évènement du formulaire.

Merci de ton aide.

A+

C15

Michel__D a écrit :
Bonjour,

C15 a écrit :
Bonjour,

Malgré tes explications particulièrement claires, cela ne marche
toujours pas.


J'ai fait 2 corrections mineures à ta formule (tes doigts ayant sans
doute glissé sur le clavier) :

sSQL = "UPDATE... et non UUPDATE...



Ok pour erreur lors du copier/coller.

& "[Formulaires]![F Adhérents]![N°Adherent]" & ";" et non
& [Formulaires]![F Adhérents]![N°Adherent] & ";"



Par contre ici il faut laisser :
& [Formulaires]![F Adhérents]![N°Adherent] & ";"

L'événement après insertion est-il le mieux adapté ?
De toute façon il faut exécuter cette instruction après que le
N°Adhérent ait été généré.



Heu, il faut bien évidemment qu'un [N°Adhérent] ai été sélectionné au
niveau du formulaire avant de clicker sur le bouton sinon modifie le code
afin de contrôler la valeur de [Formulaires]![F Adhérents]![N°Adherent]

Merci de ton aide.

A+

C15

Michel__D a écrit :
Bonjour,

1)
Donc il faudrait mettre la valeur par défaut sur les champs [Cxx] de
ta table
[T adhérents] sauf pour le champ [Cxx] correspondant à l'année en
cours.

2)
Pour exécuter une requête action, il ne faut pas employer la méthode
OpenQuery
qui est dédié aux requêtes sélection/analyse croisée et tu peux
utiliser
par exemple la méthode RunSQL de l'objet DoCmd.

Private Sub Form_AfterInsert()
Dim sSQL As String

MsgBox "Vous allez exécuter une requête qui va mettre à 0 les
cotisations des 5 denières années", vbQuestion
sSQL = "UUPDATE [T Adhérents] AS T " & _
"SET T.Du09 = 0, T.Du08 = 0, T.Du07 = 0, T.Du06 = 0, T.Du05 = 0,
T.Du04 = 0 " & _
"WHERE T.[N°Adherent]=" & [Formulaires]![F Adhérents]![N°Adherent]
& ";"
DoCmd.SetWarnings False
DoCmd.RunSQL sSQL
DoCmd.SetWarnings True
End Sub


C15 a écrit :
Bonjour,

Ma table T adhérents comporte entre autres des champs [Cxx]
concernant les cotisations à payer de [Duxx] concernant les
cotisations dues (valeur par défaut 20).

Le principe est que l'on peut réclamer aux adhérents jusqu'aux 5
dernières années, sinon carton rouge.

J'ai un formulaire F adhérents pour entrer les données nominatives
sur lequel j'ai un bouton pour ouvrir un autre formulaire "F
cotisations".
Sur celui-ci j'ai des cases à cocher Cxx sur lesquelles je clique
lorsque le paiement est effectué, mettant le Duxx à 0.
J'y ai aussi un contrôle pour calculer le montant du des 5 dernières
années.

Pour un adhérent "ancien", tout va bien, il me suffit de cocher les
Cxx et j'ai le montant des cotisations restantes dues.

Pour un nouvel adhérent, il est évident que l'on ne peut lui
réclamer le montant des 5 dernières années.

Grâce à toi et à d'autres idées que j'ai piquées sur le forum, j'ai
fait une requête mise à jour :
>>>
UPDATE [T Adhérents] SET [T Adhérents].Du09 = 0, [T Adhérents].Du08
= 0, [T Adhérents].Du07 = 0, [T Adhérents].Du06 = 0, [T
Adhérents].Du05 = 0, [T Adhérents].Du04 = 0
WHERE ((([T Adhérents].N°Adherent)=[Formulaires]![F
Adhérents]![N°Adherent]));
>>>

J'ai voulu la déclencher, à partir de mon F Adhérents, soit le
bouton "créer une nouvelle fiche", soit sur le bouton "valider la
saisie", soit sur l'évènement "après insertion" donnant par exemple
ceci :
>>>
Private Sub Form_AfterInsert()

Dim stDocName As String

MsgBox "Vous allez exécuter une requête qui va mettre à 0 les
cotisations des 5 denières années", vbQuestion
stDocName = "R mise à jour cotisation nouvel adhérent"
DoCmd.OpenQuery stDocName, acViewNormal, acEdit

End Sub
>>>

Cela ne marche pas, alors que si j'exécute la requête directement,
cela marche.

Merci de ton aide pour me dire quel est le meilleur moyen pour
exécuter cette requête.

A+

C15


Michel__D a écrit :
Bonjour,

On doit pas se comprendre, la valeur par défaut d'un champ d'une table
veut dire que pour tout nouvel enregistrement pour lequel la valeur
du champ n'est pas spécifié celui-ci prend la valeur par défaut car
sinon généralement c'est la valeur nulle qui est appliqué.

En y réfléchissant, j'ai de plus en plus de doute concernant la
structure
de la table.


C15 a écrit :
Bonsoir à tous et à toutes,

Si je paramètre les champs à 0 par défaut, il faut que je
recalcule à chaque fois ce que doivent les mauvais payeurs, et
cela ne me plait pas trop...
En ayant une valeur par défaut à 15, il me suffit de cliquer sur
une case à cocher pour avoir 0 en somme due dès que le paiement
est enregistré, et cela me parait plus simple pour le trésorier.

Merci de ton aide.

A+

C15


Michel__D a écrit :
Bonjour,

Il faut paramêtrer tes champs au niveau de ta table (valeur par
défaut = 0)


"C15" a écrit dans le
message de news:
Bonsoir à tous et à toutes,

J'ai fait l'essai avec un
DoCmd.Openquery... ma requête mise à jour de mes [duxx]
associé à mon bouton "créer un nouvel adhérent".

Cela ne marche pas car ma requête met à jour 0 ligne.
Il faudrait, je pense, faire en sorte que cette requête
s'exécute quand le nouveau numéro d'adhérent a été attribué,
mais pas avant (actuellement elle s'exécute dès qu'un formulaire
vierge s'ouvre).

Un nouveau numéro d'adhérent est attribué quand une valeur
commence à être saisie (comme par exemple le titre ou la 1ère
lettre du nom).
Comment faire alors pour que la requête mette à jour les [Duxx]
seulement à ce moment là ?

Merci de votre aide.

A+

C15


C15 a écrit :
Bonjour à tous et à toutes,

Pour le moment je préfère avoir la valeur par défaut de mes
cotisations dues à 20 ¤ c'est plus facile de savoir ce que les
gens doivent.

Par contre j'ai pensé à faire une requête mise à jour des
champs [du09] à [du04] =0 avec en critère [F Adhérents]![N°
Adhérent] que j'exécute lorsque je saisis les coordonnées d'un
nouvel adhérent (par exemple sur Clic d'un bouton existant
"créer un nouvel adhérent").

A priori il n'y a pas d'interdiction de mettre à jour plusieurs
champs en même temps, n'est-il pas ?

Je ne sais si mon raisonnement est bon.
Je vais tester et vous dirais si cela tient la route.

Merci de votre aide.

A+

C15


Michel__D a écrit :
Bonjour,

Je ne sais pas si j'ai tout compris, mais si tu met la valeur
par défaut
de tes champs [DuXX] à 0 sauf pour le champ [DuXX] de l'année
en cours
cela ne te donnerait-il pas ce que tu recherche ?


C15 a écrit :
Bonjour à tous et à toutes,

J'ai un formulaire pour gérer des adhérents d'une assoc, basé
sur une table [T adhérents] dans lequel j'ai des champs liés
aux cotisations [Du09], [Du08],[Du07],[Du06],[Du05],[Du04]
concernant les cotisations des 5 dernières années que l'on
peut encore réclamer.

Quand je créé un nouvel adhérent on ne peut bien sur pas lui
réclamer les cotisations des années précédentes.

Dans un post précédent Michel_D (merci à lui) m'avait proposé
la solution suivante :
VraiFaux(Year([DateAdhesion])<Year(Date());[Du09]+[Du08]+[Du07]+[Du06]+[Du05]+[Du04];0)


Cela marche bien pour obtenir que le total soit égal à 0 ou à
la somme des cotisations réellement dues.
Mais comment faire pour que dans ma table les champs [Du09],
[Du08],[Du07],[Du06],[Du05],[Du04] soient remis à 0 (valeur
par défaut) ?

J'en ai effectivement besoin pour un publipostage "rappel des
cotisations"

Si l'année de la date d'adhésion est < l'année en cours,
alors le total du
[Du09]+[Du08]+[Du07]+[Du06]+[Du05]+[Du04]=0
sinon
[Du09]=0
[Du08]=0
[Du07]=0
[Du06]=0
[Du05]=0
[Du04]=0
et
le total du [Du09]+[Du08]+[Du07]+[Du06]+[Du05]+[Du04]=0

Je n'arrive pas à mettre cela en musique.

Merci de votre aide.

A+

C15























Avatar
Michel__D
Re,

Essaye d'abord la 1ère suggestion
1)
Donc il faudrait mettre la valeur par défaut sur les champs [Cxx] de ta table
[T adhérents] sauf pour le champ [Cxx] correspondant à l'année en cours.

Et théoriquement tu ne devrais pas avoir besoin de faire de requête de mise à jour
et si ce n'est pas le cas c'est qu'il y a quelque chose qui m'échappe.

Puisque si je comprends bien ton formulaire est basé sur la table
[T Adhérents] qui comporte les champs [Cxx] qui se retrouve dans ton
formulaire avec les contrôles [DuXX] et donc en appliquant le 1) cela
va automatiquement affecter la valeur 0 aux champs [Cxx] de la table
si rien n'est indiqué au niveau du contrôle [DuXX] correspondant.


C15 a écrit :
Rebonjour,

Mon N°Adhérent est généré dès que je commence à saisir le nom.

Si le code que tu me proposes est sur "après insertion", c'est bien le
N°Adhérent de l'enregistrement actuel qui est pris en compte ou faut-il
d'abord sauvegarder l'enregistrement ?

Car pour le moment cela ne marche toujours pas, sauf si j'exécute le
code directement sans l'associer à un évènement du formulaire.

Merci de ton aide.

A+

C15

Michel__D a écrit :
Bonjour,

C15 a écrit :
Bonjour,

Malgré tes explications particulièrement claires, cela ne marche
toujours pas.


J'ai fait 2 corrections mineures à ta formule (tes doigts ayant sans
doute glissé sur le clavier) :

sSQL = "UPDATE... et non UUPDATE...



Ok pour erreur lors du copier/coller.

& "[Formulaires]![F Adhérents]![N°Adherent]" & ";" et non
& [Formulaires]![F Adhérents]![N°Adherent] & ";"



Par contre ici il faut laisser :
& [Formulaires]![F Adhérents]![N°Adherent] & ";"

L'événement après insertion est-il le mieux adapté ?
De toute façon il faut exécuter cette instruction après que le
N°Adhérent ait été généré.



Heu, il faut bien évidemment qu'un [N°Adhérent] ai été sélectionné au
niveau du formulaire avant de clicker sur le bouton sinon modifie le
code
afin de contrôler la valeur de [Formulaires]![F Adhérents]![N°Adherent]

Merci de ton aide.

A+

C15

Michel__D a écrit :
Bonjour,

1)
Donc il faudrait mettre la valeur par défaut sur les champs [Cxx] de
ta table
[T adhérents] sauf pour le champ [Cxx] correspondant à l'année en
cours.

2)
Pour exécuter une requête action, il ne faut pas employer la méthode
OpenQuery
qui est dédié aux requêtes sélection/analyse croisée et tu peux
utiliser
par exemple la méthode RunSQL de l'objet DoCmd.

Private Sub Form_AfterInsert()
Dim sSQL As String

MsgBox "Vous allez exécuter une requête qui va mettre à 0 les
cotisations des 5 denières années", vbQuestion
sSQL = "UUPDATE [T Adhérents] AS T " & _
"SET T.Du09 = 0, T.Du08 = 0, T.Du07 = 0, T.Du06 = 0, T.Du05 = 0,
T.Du04 = 0 " & _
"WHERE T.[N°Adherent]=" & [Formulaires]![F
Adhérents]![N°Adherent] & ";"
DoCmd.SetWarnings False
DoCmd.RunSQL sSQL
DoCmd.SetWarnings True
End Sub


C15 a écrit :
Bonjour,

Ma table T adhérents comporte entre autres des champs [Cxx]
concernant les cotisations à payer de [Duxx] concernant les
cotisations dues (valeur par défaut 20).

Le principe est que l'on peut réclamer aux adhérents jusqu'aux 5
dernières années, sinon carton rouge.

J'ai un formulaire F adhérents pour entrer les données nominatives
sur lequel j'ai un bouton pour ouvrir un autre formulaire "F
cotisations".
Sur celui-ci j'ai des cases à cocher Cxx sur lesquelles je clique
lorsque le paiement est effectué, mettant le Duxx à 0.
J'y ai aussi un contrôle pour calculer le montant du des 5
dernières années.

Pour un adhérent "ancien", tout va bien, il me suffit de cocher les
Cxx et j'ai le montant des cotisations restantes dues.

Pour un nouvel adhérent, il est évident que l'on ne peut lui
réclamer le montant des 5 dernières années.

Grâce à toi et à d'autres idées que j'ai piquées sur le forum, j'ai
fait une requête mise à jour :
>>>
UPDATE [T Adhérents] SET [T Adhérents].Du09 = 0, [T Adhérents].Du08
= 0, [T Adhérents].Du07 = 0, [T Adhérents].Du06 = 0, [T
Adhérents].Du05 = 0, [T Adhérents].Du04 = 0
WHERE ((([T Adhérents].N°Adherent)=[Formulaires]![F
Adhérents]![N°Adherent]));
>>>

J'ai voulu la déclencher, à partir de mon F Adhérents, soit le
bouton "créer une nouvelle fiche", soit sur le bouton "valider la
saisie", soit sur l'évènement "après insertion" donnant par exemple
ceci :
>>>
Private Sub Form_AfterInsert()

Dim stDocName As String

MsgBox "Vous allez exécuter une requête qui va mettre à 0 les
cotisations des 5 denières années", vbQuestion
stDocName = "R mise à jour cotisation nouvel adhérent"
DoCmd.OpenQuery stDocName, acViewNormal, acEdit

End Sub
>>>

Cela ne marche pas, alors que si j'exécute la requête directement,
cela marche.

Merci de ton aide pour me dire quel est le meilleur moyen pour
exécuter cette requête.

A+

C15


Michel__D a écrit :
Bonjour,

On doit pas se comprendre, la valeur par défaut d'un champ d'une
table
veut dire que pour tout nouvel enregistrement pour lequel la valeur
du champ n'est pas spécifié celui-ci prend la valeur par défaut car
sinon généralement c'est la valeur nulle qui est appliqué.

En y réfléchissant, j'ai de plus en plus de doute concernant la
structure
de la table.


C15 a écrit :
Bonsoir à tous et à toutes,

Si je paramètre les champs à 0 par défaut, il faut que je
recalcule à chaque fois ce que doivent les mauvais payeurs, et
cela ne me plait pas trop...
En ayant une valeur par défaut à 15, il me suffit de cliquer sur
une case à cocher pour avoir 0 en somme due dès que le paiement
est enregistré, et cela me parait plus simple pour le trésorier.

Merci de ton aide.

A+

C15


Michel__D a écrit :
Bonjour,

Il faut paramêtrer tes champs au niveau de ta table (valeur par
défaut = 0)


"C15" a écrit dans le
message de news:
Bonsoir à tous et à toutes,

J'ai fait l'essai avec un
DoCmd.Openquery... ma requête mise à jour de mes [duxx]
associé à mon bouton "créer un nouvel adhérent".

Cela ne marche pas car ma requête met à jour 0 ligne.
Il faudrait, je pense, faire en sorte que cette requête
s'exécute quand le nouveau numéro d'adhérent a été attribué,
mais pas avant (actuellement elle s'exécute dès qu'un
formulaire vierge s'ouvre).

Un nouveau numéro d'adhérent est attribué quand une valeur
commence à être saisie (comme par exemple le titre ou la 1ère
lettre du nom).
Comment faire alors pour que la requête mette à jour les [Duxx]
seulement à ce moment là ?

Merci de votre aide.

A+

C15


C15 a écrit :
Bonjour à tous et à toutes,

Pour le moment je préfère avoir la valeur par défaut de mes
cotisations dues à 20 ¤ c'est plus facile de savoir ce que les
gens doivent.

Par contre j'ai pensé à faire une requête mise à jour des
champs [du09] à [du04] =0 avec en critère [F Adhérents]![N°
Adhérent] que j'exécute lorsque je saisis les coordonnées d'un
nouvel adhérent (par exemple sur Clic d'un bouton existant
"créer un nouvel adhérent").

A priori il n'y a pas d'interdiction de mettre à jour
plusieurs champs en même temps, n'est-il pas ?

Je ne sais si mon raisonnement est bon.
Je vais tester et vous dirais si cela tient la route.

Merci de votre aide.

A+

C15


Michel__D a écrit :
Bonjour,

Je ne sais pas si j'ai tout compris, mais si tu met la valeur
par défaut
de tes champs [DuXX] à 0 sauf pour le champ [DuXX] de
l'année en cours
cela ne te donnerait-il pas ce que tu recherche ?


C15 a écrit :
Bonjour à tous et à toutes,

J'ai un formulaire pour gérer des adhérents d'une assoc,
basé sur une table [T adhérents] dans lequel j'ai des champs
liés aux cotisations [Du09],
[Du08],[Du07],[Du06],[Du05],[Du04] concernant les
cotisations des 5 dernières années que l'on peut encore
réclamer.

Quand je créé un nouvel adhérent on ne peut bien sur pas lui
réclamer les cotisations des années précédentes.

Dans un post précédent Michel_D (merci à lui) m'avait
proposé la solution suivante :
VraiFaux(Year([DateAdhesion])<Year(Date());[Du09]+[Du08]+[Du07]+[Du06]+[Du05]+[Du04];0)


Cela marche bien pour obtenir que le total soit égal à 0 ou
à la somme des cotisations réellement dues.
Mais comment faire pour que dans ma table les champs [Du09],
[Du08],[Du07],[Du06],[Du05],[Du04] soient remis à 0 (valeur
par défaut) ?

J'en ai effectivement besoin pour un publipostage "rappel
des cotisations"

Si l'année de la date d'adhésion est < l'année en cours,
alors le total du
[Du09]+[Du08]+[Du07]+[Du06]+[Du05]+[Du04]=0
sinon
[Du09]=0
[Du08]=0
[Du07]=0
[Du06]=0
[Du05]=0
[Du04]=0
et
le total du [Du09]+[Du08]+[Du07]+[Du06]+[Du05]+[Du04]=0

Je n'arrive pas à mettre cela en musique.

Merci de votre aide.

A+

C15

























Avatar
Francis
Bonjour Michel,

J'ai voulu transposer ton code à mon propre besoin, et j'ai moi aussi
un problème.
Dans ma table des écritures, j'ai un champ avec des codes d'activité,
que je souhaite effacer quand je n'ai plus besoin de suivre certaines.
Supposons que ce soit l'activité AC005.
Si j'utilise le code suivant,

sSQL = "UPDATE [tbl écritures] As T SET T.code_activité = '' " & _
"WHERE T.code_activité = 'AC005';"
DoCmd.RunSQL sSQL

Ça marche au poil et les valeurs AC005 sont bien supprimées.

Par contre, si je fais le code suivant, inspiré du tien,
sSQL = "UPDATE [tbl écritures] As T SET T.code_activité = '' " & _
"WHERE T.code_activité =" & [Formulaires]![Récap des activités]![code]
& ";"
DoCmd.RunSQL sSQL

Là, ça ne marche pas, et je reçois le message box qui me dit:
"Impossible de trouver le champ '|' auquel il est fait référence etc..
alors que [Formulaires]![Récap des activités]![code] a bien pour valeur
AC005.

Alors, si tu peux me tirer cette énigme au clair, ça m'arrangera aussi.
Merci,

Francis



Dans son message précédent, Michel__D a écrit :
Re,

Essaye d'abord la 1ère suggestion
1)
Donc il faudrait mettre la valeur par défaut sur les champs [Cxx] de ta table
[T adhérents] sauf pour le champ [Cxx] correspondant à l'année en cours.

Et théoriquement tu ne devrais pas avoir besoin de faire de requête de mise à
jour
et si ce n'est pas le cas c'est qu'il y a quelque chose qui m'échappe.

Puisque si je comprends bien ton formulaire est basé sur la table
[T Adhérents] qui comporte les champs [Cxx] qui se retrouve dans ton
formulaire avec les contrôles [DuXX] et donc en appliquant le 1) cela
va automatiquement affecter la valeur 0 aux champs [Cxx] de la table
si rien n'est indiqué au niveau du contrôle [DuXX] correspondant.


C15 a écrit :
Rebonjour,

Mon N°Adhérent est généré dès que je commence à saisir le nom.

Si le code que tu me proposes est sur "après insertion", c'est bien le
N°Adhérent de l'enregistrement actuel qui est pris en compte ou faut-il
d'abord sauvegarder l'enregistrement ?

Car pour le moment cela ne marche toujours pas, sauf si j'exécute le code
directement sans l'associer à un évènement du formulaire.

Merci de ton aide.

A+

C15

Michel__D a écrit :
Bonjour,

C15 a écrit :
Bonjour,

Malgré tes explications particulièrement claires, cela ne marche toujours
pas.


J'ai fait 2 corrections mineures à ta formule (tes doigts ayant sans
doute glissé sur le clavier) :

sSQL = "UPDATE... et non UUPDATE...



Ok pour erreur lors du copier/coller.

& "[Formulaires]![F Adhérents]![N°Adherent]" & ";" et non
& [Formulaires]![F Adhérents]![N°Adherent] & ";"



Par contre ici il faut laisser :
& [Formulaires]![F Adhérents]![N°Adherent] & ";"

L'événement après insertion est-il le mieux adapté ?
De toute façon il faut exécuter cette instruction après que le N°Adhérent
ait été généré.



Heu, il faut bien évidemment qu'un [N°Adhérent] ai été sélectionné au
niveau du formulaire avant de clicker sur le bouton sinon modifie le code
afin de contrôler la valeur de [Formulaires]![F Adhérents]![N°Adherent]

Merci de ton aide.

A+

C15

Michel__D a écrit :
Bonjour,

1)
Donc il faudrait mettre la valeur par défaut sur les champs [Cxx] de ta
table
[T adhérents] sauf pour le champ [Cxx] correspondant à l'année en
cours.

2)
Pour exécuter une requête action, il ne faut pas employer la méthode
OpenQuery
qui est dédié aux requêtes sélection/analyse croisée et tu peux
utiliser
par exemple la méthode RunSQL de l'objet DoCmd.

Private Sub Form_AfterInsert()
Dim sSQL As String

MsgBox "Vous allez exécuter une requête qui va mettre à 0 les
cotisations des 5 denières années", vbQuestion
sSQL = "UUPDATE [T Adhérents] AS T " & _
"SET T.Du09 = 0, T.Du08 = 0, T.Du07 = 0, T.Du06 = 0, T.Du05 = 0,
T.Du04 = 0 " & _
"WHERE T.[N°Adherent]=" & [Formulaires]![F Adhérents]![N°Adherent] &
";"
DoCmd.SetWarnings False
DoCmd.RunSQL sSQL
DoCmd.SetWarnings True
End Sub


C15 a écrit :
Bonjour,

Ma table T adhérents comporte entre autres des champs [Cxx] concernant
les cotisations à payer de [Duxx] concernant les cotisations dues
(valeur par défaut 20).

Le principe est que l'on peut réclamer aux adhérents jusqu'aux 5
dernières années, sinon carton rouge.

J'ai un formulaire F adhérents pour entrer les données nominatives sur
lequel j'ai un bouton pour ouvrir un autre formulaire "F cotisations".
Sur celui-ci j'ai des cases à cocher Cxx sur lesquelles je clique
lorsque le paiement est effectué, mettant le Duxx à 0.
J'y ai aussi un contrôle pour calculer le montant du des 5 dernières
années.

Pour un adhérent "ancien", tout va bien, il me suffit de cocher les Cxx
et j'ai le montant des cotisations restantes dues.

Pour un nouvel adhérent, il est évident que l'on ne peut lui réclamer
le montant des 5 dernières années.

Grâce à toi et à d'autres idées que j'ai piquées sur le forum, j'ai
fait une requête mise à jour :
>>>
UPDATE [T Adhérents] SET [T Adhérents].Du09 = 0, [T Adhérents].Du08 =
0, [T Adhérents].Du07 = 0, [T Adhérents].Du06 = 0, [T Adhérents].Du05 =
0, [T Adhérents].Du04 = 0
WHERE ((([T Adhérents].N°Adherent)=[Formulaires]![F
Adhérents]![N°Adherent]));
>>>

J'ai voulu la déclencher, à partir de mon F Adhérents, soit le bouton
"créer une nouvelle fiche", soit sur le bouton "valider la saisie",
soit sur l'évènement "après insertion" donnant par exemple ceci :
>>>
Private Sub Form_AfterInsert()

Dim stDocName As String

MsgBox "Vous allez exécuter une requête qui va mettre à 0 les
cotisations des 5 denières années", vbQuestion
stDocName = "R mise à jour cotisation nouvel adhérent"
DoCmd.OpenQuery stDocName, acViewNormal, acEdit

End Sub
>>>

Cela ne marche pas, alors que si j'exécute la requête directement, cela
marche.

Merci de ton aide pour me dire quel est le meilleur moyen pour exécuter
cette requête.

A+

C15


Michel__D a écrit :
Bonjour,

On doit pas se comprendre, la valeur par défaut d'un champ d'une table
veut dire que pour tout nouvel enregistrement pour lequel la valeur
du champ n'est pas spécifié celui-ci prend la valeur par défaut car
sinon généralement c'est la valeur nulle qui est appliqué.

En y réfléchissant, j'ai de plus en plus de doute concernant la
structure
de la table.


C15 a écrit :
Bonsoir à tous et à toutes,

Si je paramètre les champs à 0 par défaut, il faut que je recalcule à
chaque fois ce que doivent les mauvais payeurs, et cela ne me plait
pas trop...
En ayant une valeur par défaut à 15, il me suffit de cliquer sur une
case à cocher pour avoir 0 en somme due dès que le paiement est
enregistré, et cela me parait plus simple pour le trésorier.

Merci de ton aide.

A+

C15


Michel__D a écrit :
Bonjour,

Il faut paramêtrer tes champs au niveau de ta table (valeur par
défaut = 0)


"C15" a écrit dans le message
de news:
Bonsoir à tous et à toutes,

J'ai fait l'essai avec un
DoCmd.Openquery... ma requête mise à jour de mes [duxx]
associé à mon bouton "créer un nouvel adhérent".

Cela ne marche pas car ma requête met à jour 0 ligne.
Il faudrait, je pense, faire en sorte que cette requête s'exécute
quand le nouveau numéro d'adhérent a été attribué, mais pas avant
(actuellement elle s'exécute dès qu'un formulaire vierge s'ouvre).

Un nouveau numéro d'adhérent est attribué quand une valeur commence
à être saisie (comme par exemple le titre ou la 1ère lettre du
nom).
Comment faire alors pour que la requête mette à jour les [Duxx]
seulement à ce moment là ?

Merci de votre aide.

A+

C15


C15 a écrit :
Bonjour à tous et à toutes,

Pour le moment je préfère avoir la valeur par défaut de mes
cotisations dues à 20 ¤ c'est plus facile de savoir ce que les
gens doivent.

Par contre j'ai pensé à faire une requête mise à jour des champs
[du09] à [du04] =0 avec en critère [F Adhérents]![N° Adhérent] que
j'exécute lorsque je saisis les coordonnées d'un nouvel adhérent
(par exemple sur Clic d'un bouton existant "créer un nouvel
adhérent").

A priori il n'y a pas d'interdiction de mettre à jour plusieurs
champs en même temps, n'est-il pas ?

Je ne sais si mon raisonnement est bon.
Je vais tester et vous dirais si cela tient la route.

Merci de votre aide.

A+

C15


Michel__D a écrit :
Bonjour,

Je ne sais pas si j'ai tout compris, mais si tu met la valeur par
défaut
de tes champs [DuXX] à 0 sauf pour le champ [DuXX] de l'année en
cours
cela ne te donnerait-il pas ce que tu recherche ?


C15 a écrit :
Bonjour à tous et à toutes,

J'ai un formulaire pour gérer des adhérents d'une assoc, basé
sur une table [T adhérents] dans lequel j'ai des champs liés aux
cotisations [Du09], [Du08],[Du07],[Du06],[Du05],[Du04]
concernant les cotisations des 5 dernières années que l'on peut
encore réclamer.

Quand je créé un nouvel adhérent on ne peut bien sur pas lui
réclamer les cotisations des années précédentes.

Dans un post précédent Michel_D (merci à lui) m'avait proposé la
solution suivante :
VraiFaux(Year([DateAdhesion])<Year(Date());[Du09]+[Du08]+[Du07]+[Du06]+[Du05]+[Du04];0)


Cela marche bien pour obtenir que le total soit égal à 0 ou à la
somme des cotisations réellement dues.
Mais comment faire pour que dans ma table les champs [Du09],
[Du08],[Du07],[Du06],[Du05],[Du04] soient remis à 0 (valeur par
défaut) ?

J'en ai effectivement besoin pour un publipostage "rappel des
cotisations"

Si l'année de la date d'adhésion est < l'année en cours, alors
le total du
[Du09]+[Du08]+[Du07]+[Du06]+[Du05]+[Du04]=0
sinon
[Du09]=0
[Du08]=0
[Du07]=0
[Du06]=0
[Du05]=0
[Du04]=0
et
le total du [Du09]+[Du08]+[Du07]+[Du06]+[Du05]+[Du04]=0

Je n'arrive pas à mettre cela en musique.

Merci de votre aide.

A+

C15



























--
Francis

THEOREME de la loi de MURPHY
Tout corps plongé dans une baignoire...déclenche systématiquement la
sonnerie du téléphone !
Avatar
Michel__D
Bonjour/bonsoir,

Francis a écrit :
Bonjour Michel,

J'ai voulu transposer ton code à mon propre besoin, et j'ai moi aussi un
problème.
Dans ma table des écritures, j'ai un champ avec des codes d'activité,
que je souhaite effacer quand je n'ai plus besoin de suivre certaines.
Supposons que ce soit l'activité AC005.
Si j'utilise le code suivant,

sSQL = "UPDATE [tbl écritures] As T SET T.code_activité = '' " & _
"WHERE T.code_activité = 'AC005';"
DoCmd.RunSQL sSQL

Ça marche au poil et les valeurs AC005 sont bien supprimées.

Par contre, si je fais le code suivant, inspiré du tien,
sSQL = "UPDATE [tbl écritures] As T SET T.code_activité = '' " & _
"WHERE T.code_activité =" & [Formulaires]![Récap des activités]![code] &
";"
DoCmd.RunSQL sSQL

Là, ça ne marche pas, et je reçois le message box qui me dit:
"Impossible de trouver le champ '|' auquel il est fait référence etc..
alors que [Formulaires]![Récap des activités]![code] a bien pour valeur
AC005.

Alors, si tu peux me tirer cette énigme au clair, ça m'arrangera aussi.
Merci,

Francis



Comme c'est une chaîne de caractères tu as oublier les apostrophes, donc :

sSQL = "UPDATE [tbl écritures] As T SET T.code_activité = '' " & _
"WHERE T.code_activité ='" & [Formulaires]![Récap des activités]![code] & "';"

MsgBox sSQL

DoCmd.RunSQL sSQL

PS:Le msgbox c'est pour s'assurer que la variable sSQL est correcte lors des tests.
Avatar
C15
Bonsoir,

Après mures réflexions concernant le point sur lequel tu insistais
(valeur par défaut=...), il semble qu'effectivement cette solution,
somme tout la plus simple, soit celle qu'il faut retenir.
Je vais bien sur valider cela avec le trésorier de l'association, mais
cela devrait lui aller.

Merci encore de ton aide précieuse.

A+

C15


Michel__D a écrit :
Re,

Essaye d'abord la 1ère suggestion
1)
Donc il faudrait mettre la valeur par défaut sur les champs [Cxx] de ta
table
[T adhérents] sauf pour le champ [Cxx] correspondant à l'année en cours.

Et théoriquement tu ne devrais pas avoir besoin de faire de requête de
mise à jour
et si ce n'est pas le cas c'est qu'il y a quelque chose qui m'échappe.

Puisque si je comprends bien ton formulaire est basé sur la table
[T Adhérents] qui comporte les champs [Cxx] qui se retrouve dans ton
formulaire avec les contrôles [DuXX] et donc en appliquant le 1) cela
va automatiquement affecter la valeur 0 aux champs [Cxx] de la table
si rien n'est indiqué au niveau du contrôle [DuXX] correspondant.


C15 a écrit :
Rebonjour,

Mon N°Adhérent est généré dès que je commence à saisir le nom.

Si le code que tu me proposes est sur "après insertion", c'est bien le
N°Adhérent de l'enregistrement actuel qui est pris en compte ou
faut-il d'abord sauvegarder l'enregistrement ?

Car pour le moment cela ne marche toujours pas, sauf si j'exécute le
code directement sans l'associer à un évènement du formulaire.

Merci de ton aide.

A+

C15

Michel__D a écrit :
Bonjour,

C15 a écrit :
Bonjour,

Malgré tes explications particulièrement claires, cela ne marche
toujours pas.


J'ai fait 2 corrections mineures à ta formule (tes doigts ayant sans
doute glissé sur le clavier) :

sSQL = "UPDATE... et non UUPDATE...



Ok pour erreur lors du copier/coller.

& "[Formulaires]![F Adhérents]![N°Adherent]" & ";" et non
& [Formulaires]![F Adhérents]![N°Adherent] & ";"



Par contre ici il faut laisser :
& [Formulaires]![F Adhérents]![N°Adherent] & ";"

L'événement après insertion est-il le mieux adapté ?
De toute façon il faut exécuter cette instruction après que le
N°Adhérent ait été généré.



Heu, il faut bien évidemment qu'un [N°Adhérent] ai été sélectionné au
niveau du formulaire avant de clicker sur le bouton sinon modifie le
code
afin de contrôler la valeur de [Formulaires]![F Adhérents]![N°Adherent]

Merci de ton aide.

A+

C15

Michel__D a écrit :
Bonjour,

1)
Donc il faudrait mettre la valeur par défaut sur les champs [Cxx]
de ta table
[T adhérents] sauf pour le champ [Cxx] correspondant à l'année en
cours.

2)
Pour exécuter une requête action, il ne faut pas employer la
méthode OpenQuery
qui est dédié aux requêtes sélection/analyse croisée et tu peux
utiliser
par exemple la méthode RunSQL de l'objet DoCmd.

Private Sub Form_AfterInsert()
Dim sSQL As String

MsgBox "Vous allez exécuter une requête qui va mettre à 0 les
cotisations des 5 denières années", vbQuestion
sSQL = "UUPDATE [T Adhérents] AS T " & _
"SET T.Du09 = 0, T.Du08 = 0, T.Du07 = 0, T.Du06 = 0, T.Du05 = 0,
T.Du04 = 0 " & _
"WHERE T.[N°Adherent]=" & [Formulaires]![F
Adhérents]![N°Adherent] & ";"
DoCmd.SetWarnings False
DoCmd.RunSQL sSQL
DoCmd.SetWarnings True
End Sub


C15 a écrit :
Bonjour,

Ma table T adhérents comporte entre autres des champs [Cxx]
concernant les cotisations à payer de [Duxx] concernant les
cotisations dues (valeur par défaut 20).

Le principe est que l'on peut réclamer aux adhérents jusqu'aux 5
dernières années, sinon carton rouge.

J'ai un formulaire F adhérents pour entrer les données nominatives
sur lequel j'ai un bouton pour ouvrir un autre formulaire "F
cotisations".
Sur celui-ci j'ai des cases à cocher Cxx sur lesquelles je clique
lorsque le paiement est effectué, mettant le Duxx à 0.
J'y ai aussi un contrôle pour calculer le montant du des 5
dernières années.

Pour un adhérent "ancien", tout va bien, il me suffit de cocher
les Cxx et j'ai le montant des cotisations restantes dues.

Pour un nouvel adhérent, il est évident que l'on ne peut lui
réclamer le montant des 5 dernières années.

Grâce à toi et à d'autres idées que j'ai piquées sur le forum,
j'ai fait une requête mise à jour :
>>>
UPDATE [T Adhérents] SET [T Adhérents].Du09 = 0, [T
Adhérents].Du08 = 0, [T Adhérents].Du07 = 0, [T Adhérents].Du06 =
0, [T Adhérents].Du05 = 0, [T Adhérents].Du04 = 0
WHERE ((([T Adhérents].N°Adherent)=[Formulaires]![F
Adhérents]![N°Adherent]));
>>>

J'ai voulu la déclencher, à partir de mon F Adhérents, soit le
bouton "créer une nouvelle fiche", soit sur le bouton "valider la
saisie", soit sur l'évènement "après insertion" donnant par
exemple ceci :
>>>
Private Sub Form_AfterInsert()

Dim stDocName As String

MsgBox "Vous allez exécuter une requête qui va mettre à 0 les
cotisations des 5 denières années", vbQuestion
stDocName = "R mise à jour cotisation nouvel adhérent"
DoCmd.OpenQuery stDocName, acViewNormal, acEdit

End Sub
>>>

Cela ne marche pas, alors que si j'exécute la requête directement,
cela marche.

Merci de ton aide pour me dire quel est le meilleur moyen pour
exécuter cette requête.

A+

C15


Michel__D a écrit :
Bonjour,

On doit pas se comprendre, la valeur par défaut d'un champ d'une
table
veut dire que pour tout nouvel enregistrement pour lequel la valeur
du champ n'est pas spécifié celui-ci prend la valeur par défaut car
sinon généralement c'est la valeur nulle qui est appliqué.

En y réfléchissant, j'ai de plus en plus de doute concernant la
structure
de la table.


C15 a écrit :
Bonsoir à tous et à toutes,

Si je paramètre les champs à 0 par défaut, il faut que je
recalcule à chaque fois ce que doivent les mauvais payeurs, et
cela ne me plait pas trop...
En ayant une valeur par défaut à 15, il me suffit de cliquer sur
une case à cocher pour avoir 0 en somme due dès que le paiement
est enregistré, et cela me parait plus simple pour le trésorier.

Merci de ton aide.

A+

C15


Michel__D a écrit :
Bonjour,

Il faut paramêtrer tes champs au niveau de ta table (valeur par
défaut = 0)


"C15" a écrit dans le
message de news:
Bonsoir à tous et à toutes,

J'ai fait l'essai avec un
DoCmd.Openquery... ma requête mise à jour de mes [duxx]
associé à mon bouton "créer un nouvel adhérent".

Cela ne marche pas car ma requête met à jour 0 ligne.
Il faudrait, je pense, faire en sorte que cette requête
s'exécute quand le nouveau numéro d'adhérent a été attribué,
mais pas avant (actuellement elle s'exécute dès qu'un
formulaire vierge s'ouvre).

Un nouveau numéro d'adhérent est attribué quand une valeur
commence à être saisie (comme par exemple le titre ou la 1ère
lettre du nom).
Comment faire alors pour que la requête mette à jour les
[Duxx] seulement à ce moment là ?

Merci de votre aide.

A+

C15


C15 a écrit :
Bonjour à tous et à toutes,

Pour le moment je préfère avoir la valeur par défaut de mes
cotisations dues à 20 ¤ c'est plus facile de savoir ce que
les gens doivent.

Par contre j'ai pensé à faire une requête mise à jour des
champs [du09] à [du04] =0 avec en critère [F Adhérents]![N°
Adhérent] que j'exécute lorsque je saisis les coordonnées
d'un nouvel adhérent (par exemple sur Clic d'un bouton
existant "créer un nouvel adhérent").

A priori il n'y a pas d'interdiction de mettre à jour
plusieurs champs en même temps, n'est-il pas ?

Je ne sais si mon raisonnement est bon.
Je vais tester et vous dirais si cela tient la route.

Merci de votre aide.

A+

C15


Michel__D a écrit :
Bonjour,

Je ne sais pas si j'ai tout compris, mais si tu met la
valeur par défaut
de tes champs [DuXX] à 0 sauf pour le champ [DuXX] de
l'année en cours
cela ne te donnerait-il pas ce que tu recherche ?


C15 a écrit :
Bonjour à tous et à toutes,

J'ai un formulaire pour gérer des adhérents d'une assoc,
basé sur une table [T adhérents] dans lequel j'ai des
champs liés aux cotisations [Du09],
[Du08],[Du07],[Du06],[Du05],[Du04] concernant les
cotisations des 5 dernières années que l'on peut encore
réclamer.

Quand je créé un nouvel adhérent on ne peut bien sur pas
lui réclamer les cotisations des années précédentes.

Dans un post précédent Michel_D (merci à lui) m'avait
proposé la solution suivante :
VraiFaux(Year([DateAdhesion])<Year(Date());[Du09]+[Du08]+[Du07]+[Du06]+[Du05]+[Du04];0)


Cela marche bien pour obtenir que le total soit égal à 0 ou
à la somme des cotisations réellement dues.
Mais comment faire pour que dans ma table les champs
[Du09], [Du08],[Du07],[Du06],[Du05],[Du04] soient remis à 0
(valeur par défaut) ?

J'en ai effectivement besoin pour un publipostage "rappel
des cotisations"

Si l'année de la date d'adhésion est < l'année en cours,
alors le total du
[Du09]+[Du08]+[Du07]+[Du06]+[Du05]+[Du04]=0
sinon
[Du09]=0
[Du08]=0
[Du07]=0
[Du06]=0
[Du05]=0
[Du04]=0
et
le total du [Du09]+[Du08]+[Du07]+[Du06]+[Du05]+[Du04]=0

Je n'arrive pas à mettre cela en musique.

Merci de votre aide.

A+

C15



























Avatar
Francis
Il se trouve que Michel__D a formulé :
Bonjour/bonsoir,

Francis a écrit :
Bonjour Michel,

J'ai voulu transposer ton code à mon propre besoin, et j'ai moi aussi un
problème.
Dans ma table des écritures, j'ai un champ avec des codes d'activité, que
je souhaite effacer quand je n'ai plus besoin de suivre certaines.
Supposons que ce soit l'activité AC005.
Si j'utilise le code suivant,

sSQL = "UPDATE [tbl écritures] As T SET T.code_activité = '' " & _
"WHERE T.code_activité = 'AC005';"
DoCmd.RunSQL sSQL

Ça marche au poil et les valeurs AC005 sont bien supprimées.

Par contre, si je fais le code suivant, inspiré du tien,
sSQL = "UPDATE [tbl écritures] As T SET T.code_activité = '' " & _
"WHERE T.code_activité =" & [Formulaires]![Récap des activités]![code] &
";"
DoCmd.RunSQL sSQL

Là, ça ne marche pas, et je reçois le message box qui me dit: "Impossible
de trouver le champ '|' auquel il est fait référence etc.. alors que
[Formulaires]![Récap des activités]![code] a bien pour valeur AC005.

Alors, si tu peux me tirer cette énigme au clair, ça m'arrangera aussi.
Merci,

Francis



Comme c'est une chaîne de caractères tu as oublier les apostrophes, donc :

sSQL = "UPDATE [tbl écritures] As T SET T.code_activité = '' " & _
"WHERE T.code_activité ='" & [Formulaires]![Récap des activités]![code] &
"';"

MsgBox sSQL

DoCmd.RunSQL sSQL

PS:Le msgbox c'est pour s'assurer que la variable sSQL est correcte lors des
tests.



Bonsoir Michel,

J'ai du mal à m'en expliquer la raison, mais ça ne marche toujours pas.
En effet, la valeur [Formulaires]![Récap des activités]![code] semble
ne pas exister car j'ai toujours le même message que ci-dessus, alors
que juste après j'ai cette instruction, qui ne pose aucun problème:

DoCmd.RunSQL "DELETE [tbl des activités].*, [tbl des activités].code
From [tbl des activités]" & _
"WHERE ((([tbl des activités].code)=[Formulaires]![Récap des
activités]![code]));"

Alors, j'ai tenté ceci:

code = "'" & Me![code] & "'"
sSQL = "UPDATE [tbl journal des opérations] As T SET T.code_activité =
''" & _
"WHERE (T.code_activité) = " & code & ";"
DoCmd.SetWarnings False
MsgBox sSQL
DoCmd.RunSQL sSQL
DoCmd.SetWarnings True

Et comme ça, ça marche :/

Mystère total en ce qui me concerne, mais je pense que tu pourras m'en
donner une explication.

@+
Francis

--
Francis

LOI DE MOSES
C'est quand on ne regarde pas que le but est marqué.
Avatar
Michel__D
Bonjour,

Francis a écrit :
Il se trouve que Michel__D a formulé :
Bonjour/bonsoir,

Francis a écrit :
Bonjour Michel,

J'ai voulu transposer ton code à mon propre besoin, et j'ai moi aussi
un problème.
Dans ma table des écritures, j'ai un champ avec des codes d'activité,
que je souhaite effacer quand je n'ai plus besoin de suivre
certaines. Supposons que ce soit l'activité AC005.
Si j'utilise le code suivant,

sSQL = "UPDATE [tbl écritures] As T SET T.code_activité = '' " & _
"WHERE T.code_activité = 'AC005';"
DoCmd.RunSQL sSQL

Ça marche au poil et les valeurs AC005 sont bien supprimées.

Par contre, si je fais le code suivant, inspiré du tien,
sSQL = "UPDATE [tbl écritures] As T SET T.code_activité = '' " & _
"WHERE T.code_activité =" & [Formulaires]![Récap des
activités]![code] & ";"
DoCmd.RunSQL sSQL

Là, ça ne marche pas, et je reçois le message box qui me dit:
"Impossible de trouver le champ '|' auquel il est fait référence
etc.. alors que [Formulaires]![Récap des activités]![code] a bien
pour valeur AC005.

Alors, si tu peux me tirer cette énigme au clair, ça m'arrangera aussi.
Merci,

Francis



Comme c'est une chaîne de caractères tu as oublier les apostrophes,
donc :

sSQL = "UPDATE [tbl écritures] As T SET T.code_activité = '' " & _
"WHERE T.code_activité ='" & [Formulaires]![Récap des
activités]![code] & "';"

MsgBox sSQL

DoCmd.RunSQL sSQL

PS:Le msgbox c'est pour s'assurer que la variable sSQL est correcte
lors des tests.



Bonsoir Michel,

J'ai du mal à m'en expliquer la raison, mais ça ne marche toujours pas.
En effet, la valeur [Formulaires]![Récap des activités]![code] semble ne
pas exister car j'ai toujours le même message que ci-dessus, alors que
juste après j'ai cette instruction, qui ne pose aucun problème:

DoCmd.RunSQL "DELETE [tbl des activités].*, [tbl des activités].code
From [tbl des activités]" & _
"WHERE ((([tbl des activités].code)=[Formulaires]![Récap des
activités]![code]));"

Alors, j'ai tenté ceci:

code = "'" & Me![code] & "'"
sSQL = "UPDATE [tbl journal des opérations] As T SET T.code_activité =
''" & _
"WHERE (T.code_activité) = " & code & ";"
DoCmd.SetWarnings False
MsgBox sSQL
DoCmd.RunSQL sSQL
DoCmd.SetWarnings True

Et comme ça, ça marche :/

Mystère total en ce qui me concerne, mais je pense que tu pourras m'en
donner une explication.

@+
Francis




Essaye avec ceci pour éviter l'emploie d'une variable inutile :

sSQL = "UPDATE [tbl journal des opérations] As T SET T.code_activité = ''" & _
"WHERE (T.code_activité) = '" & Me![code] & "';"
1 2