OVH Cloud OVH Cloud

Rafraîchir un formulaire.

10 réponses
Avatar
Christophe CAMPAIN
Bonjour à tous,

J'ai un formulaire avec un bouton "Toogle" assoicié au code joint en fin de
message :

En gros : bouton enclenché = remplissage de certains champs de mon
formulaire à partir des données d'un autre formulaire (Marche bien)
Bouton pas enclenché = remise "à zero" des champs de mon
formulaire ( une sorte de "Undo" qui marche à moité)

Le problème c'est que la remise à zéro, est éffective dans dans les faits,
mais elle ne l'est dans la forme : Il reste du texte résiduel sur les zones
de texte d'un ctrl onglets. Si je passe d'un onglet à l'autre, le ctrl est
redessiné et le texte résiduel disparait bien; mais c'est pas terrible
comme solution...

J'ai bien essayé la fonction REPAINT avec Me et même en nomant
explicitement le formulaire (voir code) , mais rien ne se passe.

Pourquoi mon ctrl onglet ne se rafraichi pas ? (Dans mon code on vois des
[ ] autour de certains nom de ctrl, serai ce l'origine du problèmes ?)
Y a t il une astuce pour que ça marche malgré tout ?

Par avance merci,

Kristof

-------------------------------
Private Sub Bascule_EngagerAction_Click()
If Bascule_EngagerAction.Value = True Then
With [Form_Saisie actions]
.[Libellé de l'action].Value = [Form_Saisie des
enregistrements].ZTxt_Constat.Value
.[Causes / Raisons].Value = [Form_Saisie des
enregistrements].Ctl2.Value
.[Action à entreprendre].Value = [Form_Saisie des
enregistrements].Ctl4.Value
.N°_de_rapport.Value = "RNC " & [Form_Saisie des
enregistrements].N°_de_RNC.Value
.N°_Action.Value = [Form_Saisie actions].Txt_DernièreAction.Value +
1
.Date.Value = [Form_Saisie des enregistrements].Date.Value
If [Form_Saisie des enregistrements].Cadre32.Value = 1 Then
.Origines_de_l_action.Value = "N. C. Interne"
ElseIf [Form_Saisie des enregistrements].Cadre32.Value = 2 Then
.Origines_de_l_action.Value = "N. C. Externe"
End If
End With
ElseIf Bascule_EngagerAction.Value = False Then
With [Form_Saisie actions]
.N°_Action.Value = 0
.[Libellé de l'action].Value = ""
.[Causes / Raisons].Value = ""
.[Action à entreprendre].Value = ""
.N°_de_rapport.Value = "-"
.Date.Value = ""
.Origines_de_l_action.Value = "-"
End With

[Form_Saisie actions].Repaint
Me.Repaint

End If
End Sub
------------------------------------

10 réponses

Avatar
Bonjour, au lieu d'utiliser la fonction repaint , essaie
la fonction .requery ca marchera mieux

-----Message d'origine-----
Bonjour à tous,

J'ai un formulaire avec un bouton "Toogle" assoicié au
code joint en fin de

message :

En gros : bouton enclenché = remplissage de certains
champs de mon

formulaire à partir des données d'un autre formulaire
(Marche bien)

Bouton pas enclenché = remise "à zero"
des champs de mon

formulaire ( une sorte de "Undo" qui marche à moité)

Le problème c'est que la remise à zéro, est éffective
dans dans les faits,

mais elle ne l'est dans la forme : Il reste du texte
résiduel sur les zones

de texte d'un ctrl onglets. Si je passe d'un onglet à
l'autre, le ctrl est

redessiné et le texte résiduel disparait bien; mais
c'est pas terrible

comme solution...

J'ai bien essayé la fonction REPAINT avec Me et même en
nomant

explicitement le formulaire (voir code) , mais rien ne
se passe.


Pourquoi mon ctrl onglet ne se rafraichi pas ? (Dans mon
code on vois des

[ ] autour de certains nom de ctrl, serai ce l'origine
du problèmes ?)

Y a t il une astuce pour que ça marche malgré tout ?

Par avance merci,

Kristof

-------------------------------
Private Sub Bascule_EngagerAction_Click()
If Bascule_EngagerAction.Value = True Then
With [Form_Saisie actions]
.[Libellé de l'action].Value = [Form_Saisie des
enregistrements].ZTxt_Constat.Value
.[Causes / Raisons].Value = [Form_Saisie des
enregistrements].Ctl2.Value
.[Action à entreprendre].Value = [Form_Saisie des
enregistrements].Ctl4.Value
.N°_de_rapport.Value = "RNC " & [Form_Saisie des
enregistrements].N°_de_RNC.Value
.N°_Action.Value = [Form_Saisie
actions].Txt_DernièreAction.Value +

1
.Date.Value = [Form_Saisie des
enregistrements].Date.Value

If [Form_Saisie des
enregistrements].Cadre32.Value = 1 Then

.Origines_de_l_action.Value = "N. C. Interne"
ElseIf [Form_Saisie des
enregistrements].Cadre32.Value = 2 Then

.Origines_de_l_action.Value = "N. C. Externe"
End If
End With
ElseIf Bascule_EngagerAction.Value = False Then
With [Form_Saisie actions]
.N°_Action.Value = 0
.[Libellé de l'action].Value = ""
.[Causes / Raisons].Value = ""
.[Action à entreprendre].Value = ""
.N°_de_rapport.Value = "-"
.Date.Value = ""
.Origines_de_l_action.Value = "-"
End With

[Form_Saisie actions].Repaint
Me.Repaint

End If
End Sub
------------------------------------



.



Avatar
Christophe CAMPAIN
Bonjour,

Je viens de tester, mais requery fait une mise à jour des champs, moi ce que
je veux c'est uniquement faire disparaître le texte "résiduel".

Kristof
a écrit dans le message de news:
356801c4010d$238296e0$
Bonjour, au lieu d'utiliser la fonction repaint , essaie
la fonction .requery ca marchera mieux

-----Message d'origine-----
Bonjour à tous,

J'ai un formulaire avec un bouton "Toogle" assoicié au
code joint en fin de

message :

En gros : bouton enclenché = remplissage de certains
champs de mon

formulaire à partir des données d'un autre formulaire
(Marche bien)

Bouton pas enclenché = remise "à zero"
des champs de mon

formulaire ( une sorte de "Undo" qui marche à moité)

Le problème c'est que la remise à zéro, est éffective
dans dans les faits,

mais elle ne l'est dans la forme : Il reste du texte
résiduel sur les zones

de texte d'un ctrl onglets. Si je passe d'un onglet à
l'autre, le ctrl est

redessiné et le texte résiduel disparait bien; mais
c'est pas terrible

comme solution...

J'ai bien essayé la fonction REPAINT avec Me et même en
nomant

explicitement le formulaire (voir code) , mais rien ne
se passe.


Pourquoi mon ctrl onglet ne se rafraichi pas ? (Dans mon
code on vois des

[ ] autour de certains nom de ctrl, serai ce l'origine
du problèmes ?)

Y a t il une astuce pour que ça marche malgré tout ?

Par avance merci,

Kristof

-------------------------------
Private Sub Bascule_EngagerAction_Click()
If Bascule_EngagerAction.Value = True Then
With [Form_Saisie actions]
.[Libellé de l'action].Value = [Form_Saisie des
enregistrements].ZTxt_Constat.Value
.[Causes / Raisons].Value = [Form_Saisie des
enregistrements].Ctl2.Value
.[Action à entreprendre].Value = [Form_Saisie des
enregistrements].Ctl4.Value
.N°_de_rapport.Value = "RNC " & [Form_Saisie des
enregistrements].N°_de_RNC.Value
.N°_Action.Value = [Form_Saisie
actions].Txt_DernièreAction.Value +

1
.Date.Value = [Form_Saisie des
enregistrements].Date.Value

If [Form_Saisie des
enregistrements].Cadre32.Value = 1 Then

.Origines_de_l_action.Value = "N. C. Interne"
ElseIf [Form_Saisie des
enregistrements].Cadre32.Value = 2 Then

.Origines_de_l_action.Value = "N. C. Externe"
End If
End With
ElseIf Bascule_EngagerAction.Value = False Then
With [Form_Saisie actions]
.N°_Action.Value = 0
.[Libellé de l'action].Value = ""
.[Causes / Raisons].Value = ""
.[Action à entreprendre].Value = ""
.N°_de_rapport.Value = "-"
.Date.Value = ""
.Origines_de_l_action.Value = "-"
End With

[Form_Saisie actions].Repaint
Me.Repaint

End If
End Sub
------------------------------------



.



Avatar
3stone
Salut,

"Christophe CAMPAIN"
Je viens de tester, mais requery fait une mise à jour des champs, moi ce que
je veux c'est uniquement faire disparaître le texte "résiduel".



résiduel ?? ;-)


Si les contrôles sont indépendants, le simple fait de dire:

[Mon champ] = ""

doit suffire... (a condition que l'adressage soit correct...)
Où est placé le code par rapport aux contrôles ?


S'ils ne sont pas indépendants, donc liés à la table source,
on ne peut les vider... cela équivaudrait à modifier la source!



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

Avatar
Christophe CAMPAIN
Bonjour Pierre,

Mon problème semble juste être un problème d'affichage ou de
rafraichissement de l'écran pour certaines zones du formulaire ou certains
contrôles (Onglet par exemple).
Par texte résiduel j'entends les caractères qui étaient affichés dans la ZdT
de l'onglet, mais qui reste affiché (et seulement affiché) lorsque cette ZdT
est vidée ( [Mon champ] = "")
Mes zones de texte standard affichent bien les changements immédiatement,
mais pas celles situées sur le contrôle onglet. Mais si je passe d'un onglet
à l'autre (l'onglet est donc redessiné) toute trace de texte "résiduel"
disparait.

C'est un problème difficile à décrire avec des mots...

Kristof

"3stone" a écrit dans le message de news:

Salut,

"Christophe CAMPAIN"
Je viens de tester, mais requery fait une mise à jour des champs, moi ce
que


je veux c'est uniquement faire disparaître le texte "résiduel".



résiduel ?? ;-)


Si les contrôles sont indépendants, le simple fait de dire:

[Mon champ] = ""

doit suffire... (a condition que l'adressage soit correct...)
Où est placé le code par rapport aux contrôles ?


S'ils ne sont pas indépendants, donc liés à la table source,
on ne peut les vider... cela équivaudrait à modifier la source!



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










Avatar
3stone
re,

"Christophe CAMPAIN"
[...]
mais pas celles situées sur le contrôle onglet. Mais si je passe d'un onglet
à l'autre (l'onglet est donc redessiné) toute trace de texte "résiduel"
disparait.



L'onglet ne doit pas avoir d'incidence...

mais, ce ne serait pas un sous-formulaire qui se trouverait sur cet onglet ?



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

Avatar
Xavier HUe
Bonjour Christophe, Bonjour Pierre

J'ai eu un problème similaire il y a quelque temps sur une
application au boulot.

J'avais constaté effectivement, que malgré l'affectation
d'une chaine vide par VBA sur une zone de liste, celle-ci
conservait "l'image" du texte. Il suffisait de masquer
cette zone de liste en faisant glisser une fenêtre par
dessus, ou même en glissant le formulaire contenant ce
controle en dehors de l'écran pour forcer le système a
redessiner correctement le controle.

Repaint, Refresh ne marchait pas.

J'ai contourner le problème en créant un
controle "rectangle" avec un font non transparent. Ce
rectangle étant invisible par defaut.
Lorsque je modifie la valeur de la liste par VBA, je place
le rectangle aux mêmes coordonnées que la liste, le rends
visible puis le masque aussitôt.
Trés lourd certe, mais ça marche.

Pierre et peut être sur une piste en demandant si par
hasard ton controle ne serait pas dans un sous-
formulaire... C'est mon cas.

Pierre? Si tu as des infos complémentaires, nous sommes
preneurs.

Merci d'avance.

Cordialement.
Avatar
Christophe CAMPAIN
Bonjour à tous,

Je ne sais pas bien ce qu'est un "sous-formulaire". Je ne crois pas que ce
soit le cas, mais je ne sais pas trop comment m'en assurer.
J'avais "dessiner" ce formulaire il y a 2ans et je n'ai pas travaillé dessus
trés souvent. Je pense que mon idée de départ était de "dessiner" une ZdT
par onglet ; comment j'y suis parvenu à l'époque...? Je ne sais pas.
Peut-être me faudrait-il re-dessiner ces ctrl...

@+
Kristof

"3stone" a écrit dans le message de news:

re,

"Christophe CAMPAIN"
[...]
mais pas celles situées sur le contrôle onglet. Mais si je passe d'un
onglet


à l'autre (l'onglet est donc redessiné) toute trace de texte "résiduel"
disparait.



L'onglet ne doit pas avoir d'incidence...

mais, ce ne serait pas un sous-formulaire qui se trouverait sur cet onglet
?




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







Avatar
Christophe CAMPAIN
Je viens de découvrir une solution à mon problème :
J'ai remplacé [Form_Saisie actions].Repaint
Par [Form_Saisie actions].CtlTab68.Pages(1).Enabled = True

Avec : [Form_Saisie actions] --> mon formulaire
CtlTab68 --> Mon contrôle à 3 onglets
Pages(1) --> La 1ère page de mon contrôle onglet

Ca me rafraîchi le contrôle onglet de manière impécable. Pourquoi ? Je n'en
sais absolument rien...

@+
kristof

"3stone" a écrit dans le message de news:

re,

"Christophe CAMPAIN"
[...]
mais pas celles situées sur le contrôle onglet. Mais si je passe d'un
onglet


à l'autre (l'onglet est donc redessiné) toute trace de texte "résiduel"
disparait.



L'onglet ne doit pas avoir d'incidence...

mais, ce ne serait pas un sous-formulaire qui se trouverait sur cet onglet
?




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







Avatar
3stone
Salut,

"Christophe CAMPAIN"
Je viens de découvrir une solution à mon problème :
J'ai remplacé [Form_Saisie actions].Repaint
Par [Form_Saisie actions].CtlTab68.Pages(1).Enabled = True



.Enabled = True active l'onglet....

s'il ne l'était pas avant, le repaint doit avoir du mal, en effet ;-)




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

Avatar
Christophe CAMPAIN
Salut,

Il était déjà activé, mais le fait de rappeller cette instruction redessine
le contrôle alors que "repaint" ne le fait pas.

J'espère que cette soluce marchera aussi pour Xavier.

@+

Kristof

"3stone" a écrit dans le message de
news:%
Salut,

"Christophe CAMPAIN"
Je viens de découvrir une solution à mon problème :
J'ai remplacé [Form_Saisie actions].Repaint
Par [Form_Saisie actions].CtlTab68.Pages(1).Enabled True



.Enabled = True active l'onglet....

s'il ne l'était pas avant, le repaint doit avoir du mal, en effet ;-)




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