OVH Cloud OVH Cloud

Calcul avec conditons

13 réponses
Avatar
Emilie
Bonjour,

Je dispose de 2 tables
1- Table liste des docs : avec les champs N° / Ref / Titre / Indice
2 - Table suivi doc : avec les Champs refdoc (lié à N° de la table
précédente) / En application (case à cocher) / en cours de modif (case à
cocher) / supprimé (case à cocher).

J'ai fait un formulaire sur le quel je sélectionne un doc (via liste
déroulante) ce qui ouvre 2 sous formulaires correspondant à mes 2 tables.
Je veux à présent que : lorsque j'active la case à cocher "en cours de
modif" puis je la désactive : il apparaissent une boite de dialogue pour
confirmer cette action et si OK : mon indice de la table "liste des docs"
s'incrémente de 1 pour le document sélectionné.

Je pense qu'une macro se cache derrière cela mais je sais pas comment faire.
Merci de votre aide

3 réponses

1 2
Avatar
Gafish
Le fait qu'il soit dans un sous form n'a pas d'importance, les update
travaille en direct sur la table. En revanche il faudra sans doute si tu le
souhaites rafraichir ton sous form pour que l'incrément du compteur soit
visible "en direct" sur le sous form.
Tu bosses sur quelle version d'access ? Si ta base n'est pas trop lourde,
envoie moi la par mail (tu vires les - et le nospam dans l'adresse que j'ai
ici)

"Emilie" a écrit dans le message news:

Je sais pas si on va y arriver : Mon champ [ind] est de type numérique
(entier long)
Par contre ce champ est dans un sous formulaire (SF_1) tout comme mon
champ

[modif] qui est dans un autre sous formulaire (SF_2) : Est ce que celà à
de

l'importance ?????



Je ne comprends pas je viens encore de tester en reproduisant ton cas,
le 1


est bien interprété chez moi comme un nombre et non comme un champ.
De quel type est ton champ ind ?

"Emilie" a écrit dans le message
news:



J'avance à petits pas :
J'ai fait ce que tu m'as dit et maintenant il me met le message
suivant :



"Erreur d'execution 2465 - Impossible de trouver le champ 'l' auquel
il



fait référence dans votre expression."
Puis il surligne la ligne suivante dans visual basic :
dbscurrent.Execute "UPDATE [T_Listedocuments] set
[ind]=[T_Listedocuments].[ind]+1 WHERE [N°]=" & Me.[Lstdocument] & ";"



En fait tu veux que le code se déclenche quand tu décoches la case
non ?




En ce cas tu le mets sur l'evenement sur clic, et tu peux rajouter
les




deux
lignes suivantes dans le code :

If Me.TaCase.Value = -1 then
'tu mets là le code que je t'ai donné tout à l'heure
End If

En revanche l'erreur que tu as est plus inquiétante. Essaie de
compacter




ta
base voir si le problème subsiste.

"Emilie" a écrit dans le message
news:



Il me dit : "erreur d'éxecution 3343 - Unrecognized
database..."





Lorsque je clique sur "Débogage" il m'ouvre la fenêtre Visual
basic et





surligne en jaune la ligne que je te disais

En fait, j'ai créer le code sur la cache à cocher "sur sortie" :
peut





être
que c'est pas judicieux ?


Qu'est ce qu'il te dit exactement ?

"Emilie" a écrit dans le
message






news:

Je suis en version ACCESS 2002
Je viens de cocher Microsoft DAO 2.5/3.5 compatibility library
ET ....
Il bug à présent sur la ligne suivante : set dbscurrent > > > > > > > opendatabase(currentdb.name)



Tu es en quelle version d'Access ?
Dans ton module, va dans le menu outils...reférence
et coche la réference qui s'appele Microsoft DAO ....

"Emilie" a écrit dans le
message






news:

Merci de ton aide mais je suis nul en visual basic : j'ai
donc









recopier ce
que tu m'avais écrit et il met un message d'erreur dès le
départ







sur
"DIM
dbscurrent as database" : ERREUR DE COMPILATION ???



Re :)

Il faut que tu utilises la fonction MsgBox (regarde dans
l'aide








pour
plus de
précisions)
Mais ce serait du style :

Dim dbsCurrent as database
set dbscurrent = opendatabase(currentdb.name)
Dim RepMsg
RepMsg = MsgBox("Vous etes sur ?", 4)
If RepMsg = 6 then
'ici la valeur 6 correspond au oui
'il faut que tu fasses un update sur ton indice pour
incrémenter






dbscurrent.execute "UPDATE [ListeDocs] SET
[Indice]=[ListeDocs].[Indice]+1 WHERE [N°]=" &
Me.TaListe &










";"
Else
'sinon
End If
set dbscurrent = nothing

pour la condition where de l'update, j'ai supposé que ta
liste








renvoyait
le
numéro.
Ici tu remplaces par le nom de tes vrais objets.

Arnaud

"Emilie" a écrit dans
le










message
news:

Bonjour,

Je dispose de 2 tables
1- Table liste des docs : avec les champs N° / Ref /
Titre /









Indice
2 - Table suivi doc : avec les Champs refdoc (lié à












de la
table
précédente) / En application (case à cocher) / en
cours











de
modif
(case à
cocher) / supprimé (case à cocher).

J'ai fait un formulaire sur le quel je sélectionne un
doc











(via
liste
déroulante) ce qui ouvre 2 sous formulaires
correspondant











à
mes 2
tables.
Je veux à présent que : lorsque j'active la case à
cocher











"en
cours de
modif" puis je la désactive : il apparaissent une
boite de











dialogue
pour
confirmer cette action et si OK : mon indice de la
table











"liste
des
docs"
s'incrémente de 1 pour le document sélectionné.

Je pense qu'une macro se cache derrière cela mais je
sais











pas
comment
faire.
Merci de votre aide






































Avatar
Gafish
Bonjour,

J'ai modifié le code portant sur le clic de la case "en cours de modif"
comme suit, j'ai testé chez moi ca fonctionne.

- Première modification
tu veux incrémenter quand tu coches ou quand tu décoches ?
Si c'est quand tu coches il faut :
If Me.[Modif].Value = -1 Then
sinon c'est comme tu avais mis, à savoir :
If Me.[Modif].Value = 0 Then

- deuxieme modification
WHERE [N°]=" & Forms![F_PresentationDoc]![Lstdocument] & ";"
tu avais mis :
WHERE [N°]=" & Me.[Lstdocument] & ";"

Me en Access fait réference à l'objet contenant en cours. Dans ton cas Me
c'est le sous-formulaire. Or ta case à cocher se trouve dans le formulaires
principal, il faut donc entrer tout le chemin (forms c'est la collection
formulaires, ensuite le nom du form et la zone).
Je n'ai pas eu le souci dont tu m'as parlé, sur le 1 interprété comme champ.

"Gafish" a écrit dans le message de news:

Le fait qu'il soit dans un sous form n'a pas d'importance, les update
travaille en direct sur la table. En revanche il faudra sans doute si tu
le
souhaites rafraichir ton sous form pour que l'incrément du compteur soit
visible "en direct" sur le sous form.
Tu bosses sur quelle version d'access ? Si ta base n'est pas trop lourde,
envoie moi la par mail (tu vires les - et le nospam dans l'adresse que
j'ai
ici)

"Emilie" a écrit dans le message news:

Je sais pas si on va y arriver : Mon champ [ind] est de type numérique
(entier long)
Par contre ce champ est dans un sous formulaire (SF_1) tout comme mon
champ

[modif] qui est dans un autre sous formulaire (SF_2) : Est ce que celà à
de

l'importance ?????



Je ne comprends pas je viens encore de tester en reproduisant ton cas,
le 1


est bien interprété chez moi comme un nombre et non comme un champ.
De quel type est ton champ ind ?

"Emilie" a écrit dans le message
news:



J'avance à petits pas :
J'ai fait ce que tu m'as dit et maintenant il me met le message
suivant :



"Erreur d'execution 2465 - Impossible de trouver le champ 'l' auquel
il



fait référence dans votre expression."
Puis il surligne la ligne suivante dans visual basic :
dbscurrent.Execute "UPDATE [T_Listedocuments] set
[ind]=[T_Listedocuments].[ind]+1 WHERE [N°]=" & Me.[Lstdocument] &
";"



En fait tu veux que le code se déclenche quand tu décoches la case
non ?




En ce cas tu le mets sur l'evenement sur clic, et tu peux rajouter
les




deux
lignes suivantes dans le code :

If Me.TaCase.Value = -1 then
'tu mets là le code que je t'ai donné tout à l'heure
End If

En revanche l'erreur que tu as est plus inquiétante. Essaie de
compacter




ta
base voir si le problème subsiste.

"Emilie" a écrit dans le message
news:



Il me dit : "erreur d'éxecution 3343 - Unrecognized
database..."





Lorsque je clique sur "Débogage" il m'ouvre la fenêtre Visual
basic et





surligne en jaune la ligne que je te disais

En fait, j'ai créer le code sur la cache à cocher "sur sortie" :
peut





être
que c'est pas judicieux ?


Qu'est ce qu'il te dit exactement ?

"Emilie" a écrit dans le
message






news:

Je suis en version ACCESS 2002
Je viens de cocher Microsoft DAO 2.5/3.5 compatibility
library
ET ....
Il bug à présent sur la ligne suivante : set dbscurrent >> > > > > > > opendatabase(currentdb.name)



Tu es en quelle version d'Access ?
Dans ton module, va dans le menu outils...reférence
et coche la réference qui s'appele Microsoft DAO ....

"Emilie" a écrit dans le
message






news:

Merci de ton aide mais je suis nul en visual basic : j'ai
donc









recopier ce
que tu m'avais écrit et il met un message d'erreur dès le
départ







sur
"DIM
dbscurrent as database" : ERREUR DE COMPILATION ???



Re :)

Il faut que tu utilises la fonction MsgBox (regarde
dans
l'aide








pour
plus de
précisions)
Mais ce serait du style :

Dim dbsCurrent as database
set dbscurrent = opendatabase(currentdb.name)
Dim RepMsg
RepMsg = MsgBox("Vous etes sur ?", 4)
If RepMsg = 6 then
'ici la valeur 6 correspond au oui
'il faut que tu fasses un update sur ton indice
pour
incrémenter






dbscurrent.execute "UPDATE [ListeDocs] SET
[Indice]=[ListeDocs].[Indice]+1 WHERE [N°]=" &
Me.TaListe &










";"
Else
'sinon
End If
set dbscurrent = nothing

pour la condition where de l'update, j'ai supposé que
ta
liste








renvoyait
le
numéro.
Ici tu remplaces par le nom de tes vrais objets.

Arnaud

"Emilie" a écrit
dans
le










message
news:

Bonjour,

Je dispose de 2 tables
1- Table liste des docs : avec les champs N° / Ref
/
Titre /









Indice
2 - Table suivi doc : avec les Champs refdoc (lié à












de la
table
précédente) / En application (case à cocher) / en
cours











de
modif
(case à
cocher) / supprimé (case à cocher).

J'ai fait un formulaire sur le quel je sélectionne un
doc











(via
liste
déroulante) ce qui ouvre 2 sous formulaires
correspondant











à
mes 2
tables.
Je veux à présent que : lorsque j'active la case à
cocher











"en
cours de
modif" puis je la désactive : il apparaissent une
boite de











dialogue
pour
confirmer cette action et si OK : mon indice de la
table











"liste
des
docs"
s'incrémente de 1 pour le document sélectionné.

Je pense qu'une macro se cache derrière cela mais je
sais











pas
comment
faire.
Merci de votre aide










































Avatar
3stone
Salut,

"Gafish"
[...]
Me en Access fait réference à l'objet contenant en cours. Dans ton cas Me
c'est le sous-formulaire. Or ta case à cocher se trouve dans le formulaires
principal, il faut donc entrer tout le chemin (forms c'est la collection
formulaires, ensuite le nom du form et la zone).



Ou, plus "générique" et sans faire un appel complet...

"... Where [N°]=" & Me.Parent.LstDocument & ";"


--
A+
Pierre (3stone) Access MVP
~~~~~~~~~~~~~~~~~~~~~~~
http://users.skynet.be/mpfa
http://users.skynet.be/accesshome

1 2