OVH Cloud OVH Cloud

MAJ Label

7 réponses
Avatar
Emcy
Salut,

J'ai un UserForm avec pleins de Label (+ de 600). A=20
chaque fois que j'appuye sur un bouton, je rafraichis=20
tous les "caption" et "backcolor" de mes Lablels.

Je voudrais savoir comment faire pour bloquer le=20
rafraichissement de l'useform pour ne pas qu'on ne vois=20
les Labels se mettrent =E0 jour les uns apr=E8s les autres.

Remarque : suite =E0 un conseille de MP, j'ai ajout=E9 la=20
commande DoEvents mais =E7a ne suiffit pas.=20
La Commande Application.screenUpdating =3D False ne bloque=20
pas le rafraichissement de l'userform.

7 réponses

Avatar
Michel HOLDERITH
Salut,
si tu faisait un :
userform1.hide
unload userform1
load userform1
userform1.show ?
@+
Michel.


"Emcy" wrote in message
news:085701c3a506$e52463e0$
Salut,

J'ai un UserForm avec pleins de Label (+ de 600). A
chaque fois que j'appuye sur un bouton, je rafraichis
tous les "caption" et "backcolor" de mes Lablels.

Je voudrais savoir comment faire pour bloquer le
rafraichissement de l'useform pour ne pas qu'on ne vois
les Labels se mettrent à jour les uns après les autres.

Remarque : suite à un conseille de MP, j'ai ajouté la
commande DoEvents mais ça ne suiffit pas.
La Commande Application.screenUpdating = False ne bloque
pas le rafraichissement de l'userform.
Avatar
Michel HOLDERITH
Salut,
A moins de passer par des variables qui prennent en compte ce que
l'utilisateur entre comme donnees (c'est ce que je fais ...)
Pour la disparition du userform, ce n'est pas un probleme tu peux toujours
faire appel a un autre userform ou une progrssebarre pour informer
l'utilisateur que la mise a jour prend un petit instant, ce que je fais
aussi mais bon je ne vais non plus re-ecrire la macro.... tout en ne sachant
pas ce qu'il y a derrire son userform.
@+
Michel.


"Michel Gaboly" wrote in message
news:
Bonjour Michel,

L'idée de cacher le UserForm est bonne, mais il ne faut surtout pas le
décharger (Unload) sous peine de perdre les données entrées par
l'utilisateur.

Me.Hide
Ton traitement de mise à jour
Me.Show

Le défaut de cette approche est que si le traitement n'est pas extrêmement
court (fraction de seconde), l'utilisateur va être désorienté par la
dispa-

rition temporaire du UserForm à l'écran.

Emcy, peux-tu en dire un peu plus sur le raffraichissement de tes Labels.
Est-il nécessaire de raffraichir tous les labels à la fois, ou serait-il
possible

de le faire par tranche : chaque fois qu'un Contrôle est modifié et pas
seulement

un bouton, n'est-il pas possible de mettre à jour une série plus réduite
de La-

bels directement concernés ?


Par ailleurs, il ne faut JAMAIS utiliser le nom de l'Userform pour le
masquer

(Hide), le décharger (Unload) ou l'afficher (Show), alors qu'il est déjà
chargé

(Load). La raison est que si on renomme le UserForm, il faut adapter le
code,

tandis qu'avec "Me", cela continue à fonctionner.

La seule exception est quand 2 UserForms (ou +)sont chargés en même temps
et que tu veux en masquer un et en afficher un autre

Me.Hide
Userform2.Show

C'est le même principe que pour ActiveWorkbook ou ActiveSheet, qui doivent
toujours être préférés à Workbooks("Toto") ou Sheets("Feuil1") chaque fois
que c'est possible.


Salut,
si tu faisait un :
userform1.hide
unload userform1
load userform1
userform1.show ?
@+
Michel.

"Emcy" wrote in message
news:085701c3a506$e52463e0$
Salut,

J'ai un UserForm avec pleins de Label (+ de 600). A
chaque fois que j'appuye sur un bouton, je rafraichis
tous les "caption" et "backcolor" de mes Lablels.

Je voudrais savoir comment faire pour bloquer le
rafraichissement de l'useform pour ne pas qu'on ne vois
les Labels se mettrent à jour les uns après les autres.

Remarque : suite à un conseille de MP, j'ai ajouté la
commande DoEvents mais ça ne suiffit pas.
La Commande Application.screenUpdating = False ne bloque
pas le rafraichissement de l'userform.


--
Cordialement,

Michel Gaboly
http://www.gaboly.com





Avatar
Michel Gaboly
Bonjour Michel,

L'idée de cacher le UserForm est bonne, mais il ne faut surtout pas le
décharger (Unload) sous peine de perdre les données entrées par
l'utilisateur.

Me.Hide
Ton traitement de mise à jour
Me.Show

Le défaut de cette approche est que si le traitement n'est pas extrêmement
court (fraction de seconde), l'utilisateur va être désorienté par la dispa-
rition temporaire du UserForm à l'écran.

Emcy, peux-tu en dire un peu plus sur le raffraichissement de tes Labels.
Est-il nécessaire de raffraichir tous les labels à la fois, ou serait-il possible
de le faire par tranche : chaque fois qu'un Contrôle est modifié et pas seulement
un bouton, n'est-il pas possible de mettre à jour une série plus réduite de La-
bels directement concernés ?


Par ailleurs, il ne faut JAMAIS utiliser le nom de l'Userform pour le masquer
(Hide), le décharger (Unload) ou l'afficher (Show), alors qu'il est déjà chargé
(Load). La raison est que si on renomme le UserForm, il faut adapter le code,
tandis qu'avec "Me", cela continue à fonctionner.

La seule exception est quand 2 UserForms (ou +)sont chargés en même temps
et que tu veux en masquer un et en afficher un autre

Me.Hide
Userform2.Show

C'est le même principe que pour ActiveWorkbook ou ActiveSheet, qui doivent
toujours être préférés à Workbooks("Toto") ou Sheets("Feuil1") chaque fois
que c'est possible.


Salut,
si tu faisait un :
userform1.hide
unload userform1
load userform1
userform1.show ?
@+
Michel.

"Emcy" wrote in message
news:085701c3a506$e52463e0$
Salut,

J'ai un UserForm avec pleins de Label (+ de 600). A
chaque fois que j'appuye sur un bouton, je rafraichis
tous les "caption" et "backcolor" de mes Lablels.

Je voudrais savoir comment faire pour bloquer le
rafraichissement de l'useform pour ne pas qu'on ne vois
les Labels se mettrent à jour les uns après les autres.

Remarque : suite à un conseille de MP, j'ai ajouté la
commande DoEvents mais ça ne suiffit pas.
La Commande Application.screenUpdating = False ne bloque
pas le rafraichissement de l'userform.


--
Cordialement,

Michel Gaboly
http://www.gaboly.com

Avatar
Emcy
Salut,

cette solution ne me conviens pas : ça fait moche (on
voit bien que la fenêtre disparait puis réapparait)

Il faudrait freezer l'écran, mettre à jour les Labels
puis défreezer l'écran.

-----Message d'origine-----
Salut,
A moins de passer par des variables qui prennent en
compte ce que

l'utilisateur entre comme donnees (c'est ce que je
fais ...)

Pour la disparition du userform, ce n'est pas un
probleme tu peux toujours

faire appel a un autre userform ou une progrssebarre
pour informer

l'utilisateur que la mise a jour prend un petit instant,
ce que je fais

aussi mais bon je ne vais non plus re-ecrire la
macro.... tout en ne sachant

pas ce qu'il y a derrire son userform.
@+
Michel.


"Michel Gaboly" wrote in message
news:
Bonjour Michel,

L'idée de cacher le UserForm est bonne, mais il ne
faut surtout pas le


décharger (Unload) sous peine de perdre les données
entrées par


l'utilisateur.

Me.Hide
Ton traitement de mise à jour
Me.Show

Le défaut de cette approche est que si le traitement
n'est pas extrêmement


court (fraction de seconde), l'utilisateur va être
désorienté par la


dispa-
rition temporaire du UserForm à l'écran.

Emcy, peux-tu en dire un peu plus sur le
raffraichissement de tes Labels.


Est-il nécessaire de raffraichir tous les labels à la
fois, ou serait-il


possible
de le faire par tranche : chaque fois qu'un Contrôle
est modifié et pas


seulement
un bouton, n'est-il pas possible de mettre à jour une
série plus réduite


de La-
bels directement concernés ?


Par ailleurs, il ne faut JAMAIS utiliser le nom de
l'Userform pour le


masquer
(Hide), le décharger (Unload) ou l'afficher (Show),
alors qu'il est déjà


chargé
(Load). La raison est que si on renomme le UserForm,
il faut adapter le


code,
tandis qu'avec "Me", cela continue à fonctionner.

La seule exception est quand 2 UserForms (ou +)sont
chargés en même temps


et que tu veux en masquer un et en afficher un autre

Me.Hide
Userform2.Show

C'est le même principe que pour ActiveWorkbook ou
ActiveSheet, qui doivent


toujours être préférés à Workbooks("Toto") ou Sheets
("Feuil1") chaque fois


que c'est possible.


Salut,
si tu faisait un :
userform1.hide
unload userform1
load userform1
userform1.show ?
@+
Michel.

"Emcy" wrote
in message



news:085701c3a506$e52463e0$
Salut,

J'ai un UserForm avec pleins de Label (+ de 600). A
chaque fois que j'appuye sur un bouton, je rafraichis
tous les "caption" et "backcolor" de mes Lablels.

Je voudrais savoir comment faire pour bloquer le
rafraichissement de l'useform pour ne pas qu'on ne
vois



les Labels se mettrent à jour les uns après les
autres.




Remarque : suite à un conseille de MP, j'ai ajouté la
commande DoEvents mais ça ne suiffit pas.
La Commande Application.screenUpdating = False ne
bloque



pas le rafraichissement de l'userform.


--
Cordialement,

Michel Gaboly
http://www.gaboly.com





.





Avatar
Michel Gaboly
Re,

Quel est l'intérêt de ces variables ? Elles paraissent redondantes, puisque
l'information est déjà disponible grâce aux contrôles du UserForm.

A priori, elles ont pour effet principal d'alourdir inutilement le code,
surtout dans le cas d'Emcy ou le nombre de contrôles est très important.


Salut,
A moins de passer par des variables qui prennent en compte ce que
l'utilisateur entre comme donnees (c'est ce que je fais ...)
Pour la disparition du userform, ce n'est pas un probleme tu peux toujours
faire appel a un autre userform ou une progrssebarre pour informer
l'utilisateur que la mise a jour prend un petit instant, ce que je fais
aussi mais bon je ne vais non plus re-ecrire la macro.... tout en ne sachant
pas ce qu'il y a derrire son userform.
@+
Michel.

"Michel Gaboly" wrote in message
news:
Bonjour Michel,

L'idée de cacher le UserForm est bonne, mais il ne faut surtout pas le
décharger (Unload) sous peine de perdre les données entrées par
l'utilisateur.

Me.Hide
Ton traitement de mise à jour
Me.Show

Le défaut de cette approche est que si le traitement n'est pas extrêmement
court (fraction de seconde), l'utilisateur va être désorienté par la
dispa-

rition temporaire du UserForm à l'écran.

Emcy, peux-tu en dire un peu plus sur le raffraichissement de tes Labels.
Est-il nécessaire de raffraichir tous les labels à la fois, ou serait-il
possible

de le faire par tranche : chaque fois qu'un Contrôle est modifié et pas
seulement

un bouton, n'est-il pas possible de mettre à jour une série plus réduite
de La-

bels directement concernés ?


Par ailleurs, il ne faut JAMAIS utiliser le nom de l'Userform pour le
masquer

(Hide), le décharger (Unload) ou l'afficher (Show), alors qu'il est déjà
chargé

(Load). La raison est que si on renomme le UserForm, il faut adapter le
code,

tandis qu'avec "Me", cela continue à fonctionner.

La seule exception est quand 2 UserForms (ou +)sont chargés en même temps
et que tu veux en masquer un et en afficher un autre

Me.Hide
Userform2.Show

C'est le même principe que pour ActiveWorkbook ou ActiveSheet, qui doivent
toujours être préférés à Workbooks("Toto") ou Sheets("Feuil1") chaque fois
que c'est possible.


Salut,
si tu faisait un :
userform1.hide
unload userform1
load userform1
userform1.show ?
@+
Michel.

"Emcy" wrote in message
news:085701c3a506$e52463e0$
Salut,

J'ai un UserForm avec pleins de Label (+ de 600). A
chaque fois que j'appuye sur un bouton, je rafraichis
tous les "caption" et "backcolor" de mes Lablels.

Je voudrais savoir comment faire pour bloquer le
rafraichissement de l'useform pour ne pas qu'on ne vois
les Labels se mettrent à jour les uns après les autres.

Remarque : suite à un conseille de MP, j'ai ajouté la
commande DoEvents mais ça ne suiffit pas.
La Commande Application.screenUpdating = False ne bloque
pas le rafraichissement de l'userform.


--
Cordialement,

Michel Gaboly
http://www.gaboly.com





--
Cordialement,

Michel Gaboly
http://www.gaboly.com



Avatar
Michel HOLDERITH
Salut,
Quels sont les rafraichissements apportes ?
c'est un flou......
Comme dit michel gaboly, n'y a t-il pas un moyen pour qu'a chaque entree de
l'utilisateur certaines cases se rafraichissent automatiquement ?
Sans visualiser ton userform c'est assez dur d'apporter une reonse claire et
satisfaisante pour toi.
@+
Michel.

"Michel Gaboly" wrote in message
news:
Re,

Quel est l'intérêt de ces variables ? Elles paraissent redondantes,
puisque

l'information est déjà disponible grâce aux contrôles du UserForm.

A priori, elles ont pour effet principal d'alourdir inutilement le code,
surtout dans le cas d'Emcy ou le nombre de contrôles est très important.


Salut,
A moins de passer par des variables qui prennent en compte ce que
l'utilisateur entre comme donnees (c'est ce que je fais ...)
Pour la disparition du userform, ce n'est pas un probleme tu peux
toujours


faire appel a un autre userform ou une progrssebarre pour informer
l'utilisateur que la mise a jour prend un petit instant, ce que je fais
aussi mais bon je ne vais non plus re-ecrire la macro.... tout en ne
sachant


pas ce qu'il y a derrire son userform.
@+
Michel.

"Michel Gaboly" wrote in message
news:
Bonjour Michel,

L'idée de cacher le UserForm est bonne, mais il ne faut surtout pas le
décharger (Unload) sous peine de perdre les données entrées par
l'utilisateur.

Me.Hide
Ton traitement de mise à jour
Me.Show

Le défaut de cette approche est que si le traitement n'est pas
extrêmement



court (fraction de seconde), l'utilisateur va être désorienté par la
dispa-

rition temporaire du UserForm à l'écran.

Emcy, peux-tu en dire un peu plus sur le raffraichissement de tes
Labels.



Est-il nécessaire de raffraichir tous les labels à la fois, ou
serait-il



possible
de le faire par tranche : chaque fois qu'un Contrôle est modifié et
pas



seulement
un bouton, n'est-il pas possible de mettre à jour une série plus
réduite



de La-
bels directement concernés ?


Par ailleurs, il ne faut JAMAIS utiliser le nom de l'Userform pour le
masquer

(Hide), le décharger (Unload) ou l'afficher (Show), alors qu'il est
déjà



chargé
(Load). La raison est que si on renomme le UserForm, il faut adapter
le



code,
tandis qu'avec "Me", cela continue à fonctionner.

La seule exception est quand 2 UserForms (ou +)sont chargés en même
temps



et que tu veux en masquer un et en afficher un autre

Me.Hide
Userform2.Show

C'est le même principe que pour ActiveWorkbook ou ActiveSheet, qui
doivent



toujours être préférés à Workbooks("Toto") ou Sheets("Feuil1") chaque
fois



que c'est possible.


Salut,
si tu faisait un :
userform1.hide
unload userform1
load userform1
userform1.show ?
@+
Michel.

"Emcy" wrote in message
news:085701c3a506$e52463e0$
Salut,

J'ai un UserForm avec pleins de Label (+ de 600). A
chaque fois que j'appuye sur un bouton, je rafraichis
tous les "caption" et "backcolor" de mes Lablels.

Je voudrais savoir comment faire pour bloquer le
rafraichissement de l'useform pour ne pas qu'on ne vois
les Labels se mettrent à jour les uns après les autres.

Remarque : suite à un conseille de MP, j'ai ajouté la
commande DoEvents mais ça ne suiffit pas.
La Commande Application.screenUpdating = False ne bloque
pas le rafraichissement de l'userform.


--
Cordialement,

Michel Gaboly
http://www.gaboly.com





--
Cordialement,

Michel Gaboly
http://www.gaboly.com







Avatar
Hervé
Salut Emcy,
Je t'ai déjà répondu sur ce sujet mais je n'ai pas vu mon post par la suite
donc j'en déduit que toi non plus car tu redemande alors, voici à nouveau ma
réponse :
Cette proc (avec Api) fige la form, si ta MàJ est assez longue, tu devrais
faire apparaître un message informant ton utilisateur. Fait un test avec une
form et 2 labels, ouvre ta form et clique dessus pour voir le résultat, puis
récupère les bout de code et adapte :

Private Declare Function LockWindowUpdate _
Lib "user32" ( _
ByVal HwndLock As Long) As Long
Private Declare Function FindWindow _
Lib "user32" Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long

Sub MaJ()
Dim I As Integer
Dim J As Integer
Label2 = "Mise à jour du formulaire, veuillez patientez !"
DoEvents
LockWindowUpdate FindWindow(vbNullString, Me.Caption)
For I = 1 To 1000
Label1 = I
For J = 1 To 100
DoEvents
Next J
Next I
Label2 = ""
LockWindowUpdate 0&
End Sub

Private Sub UserForm_Click()
MaJ
End Sub

Hervé.

"Emcy" a écrit dans le message news:
085701c3a506$e52463e0$
Salut,

J'ai un UserForm avec pleins de Label (+ de 600). A
chaque fois que j'appuye sur un bouton, je rafraichis
tous les "caption" et "backcolor" de mes Lablels.

Je voudrais savoir comment faire pour bloquer le
rafraichissement de l'useform pour ne pas qu'on ne vois
les Labels se mettrent à jour les uns après les autres.

Remarque : suite à un conseille de MP, j'ai ajouté la
commande DoEvents mais ça ne suiffit pas.
La Commande Application.screenUpdating = False ne bloque
pas le rafraichissement de l'userform.