XL 2016 Rafraîchissement de userform

KTM

XLDnaute Impliqué
Bonsoir chers tous
Toutes mes excuses si je m'explique mal mais voici mon problème.
Depuis mon userform je dois réinitialiser mon fichier en utilisant le code ci dessous qui fait appel à la macro "Reinitialiser_Fichier"
Mais il se trouve qu'a un moment donné de l’exécution, mon userform devient tout blanc jusque à la fin du processus.
Comment y remédier ? Je signale que ma macro est très longue
Merci

Private Sub reinit_Fichier_Click()
If MsgBox(" Voulez-vous Reinitialiser ce Fichier ? ", vbYesNo + 32) = vbYes Then
Me.Label6.BackColor = RGB(255, 255, 255)
Me.Label6.Caption = " Veuillez Patienter SVP : Reinitialisation des Données en cours.......... "
Application.Wait (Now + TimeValue("00:00:01"))

Application.ScreenUpdating = False


Call Reinitialiser_Fichier

Me.Label6.BackColor = &HFFFFC0
Me.Label6.Caption = ""
Application.ScreenUpdating = True
End sub



End If
 

patricktoulon

XLDnaute Barbatruc
re
Bonjour
il faudrait me dire a quoi set le "Wait" ???
si c'est pour attendre que la sub Reinitialiser_Fichier ai fait son job tu te plante de procédé
car la tu execute la sub Reinitialiser_Fichier 1 seconde en retard
VB:
Private Sub UserForm_Click()
Private Sub reinit_Fichier_Click()
If MsgBox(" Voulez-vous Reinitialiser ce Fichier ? ", vbYesNo + 32) = vbYes Then
Me.Label6.BackColor = RGB(255, 255, 255)
Me.Label6.Caption = " Veuillez Patienter SVP : Reinitialisation des Données en cours.......... "
Application.Wait (Now + TimeValue("00:00:01"))

'Application.ScreenUpdating = False' ne fonctionne pas pour les userforms
Me.Repaint

Call Reinitialiser_Fichier

Me.Label6.BackColor = &HFFFFC0
Me.Label6.Caption = ""
Application.ScreenUpdating = True
End Sub
perso j'ai pris une mani systematique pour gerer ses attentes
quand j'appelle une sub qui doit prendre un moment avant de continuer d’exécuter le code et bien je la transforme tout bonnement en fonction
et donc ceci
Call Reinitialiser_Fichier
se transforme en cela
x=Reinitialiser_Fichier

ainsi tant que la fonction n'a pas fini elle ne retourne pas le résultat a "x" donc le code est en suspens

ce qui donnerait

VB:
Private Sub reinit_Fichier_Click()
Dim x
If MsgBox(" Voulez-vous Reinitialiser ce Fichier ? ", vbYesNo + 32) = vbYes Then
Me.Label6.BackColor = RGB(255, 255, 255)
Me.Label6.Caption = " Veuillez Patienter SVP : Reinitialisation des Données en cours.......... "

x = Reinitialiser_Fichier

Me.Label6.BackColor = &HFFFFC0
Me.Label6.Caption = ""
End If
End Sub

et dans ton module c'est plus sub Reinitialiser_Fichier( )mais function Reinitialiser_Fichier()
avant le end function tu met "Reinitialiser_Fichier=true" si tu veux exploiter le retour
mais tu peux tout aussi bien rien mettre
le but étant d'utiliser le temps d’exécution de la fonction comme gestion d'attente qui sera lui en temps reel et pas estimé

wagadougou! c'est réglé ;)
 
Dernière édition:

jmfmarques

XLDnaute Accro
Bonjour KTM
Impossible de te répondre sans :
1) connaître le code de ta procédure Reinitialiser_Fichier, seule impliquée dans ce problème graphique.
2) savoir par quelle procédure est affiché ce userform (juste pour le cas - sait-on jamais - où ta procédure modifierait maladroitement une cellule dont l'évènement Change activerait l'userform ....).
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Depuis mon userform je dois réinitialiser mon fichier en utilisant le code ci dessous qui fait appel à la macro "Reinitialiser_Fichier"
Mais il se trouve qu'a un moment donné de l’exécution, mon userform devient tout blanc jusque à la fin du processus.
Comment y remédier ? Je signale que ma macro est très longue
Dans ta macro Reinitialiser_Fichier il faut mettre un Repaint.

Il faut le mettre au bon endroit. ;)
Par exemple juste avant la fin d'une boucle si tu as une boucle dans ta macro, ou au début de chaque étape de ta macro si elle se déroule en plusieurs étapes.


[edit]
Donc, comme le dit @jmfmarques, il faudrait donner cette macro si tu veux une aide plus précise.
[/edit]
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour le fil, et ses intervenants

[userform ou pas userform?]
Pour réinitialiser, est-ce nécessaire d'utiliser un userform?
Je me pose la question
Et si j'étais moi, je dirai: non
(PS: trois précautions valent mieux qu'une ;))
VB:
Sub RAZ(Optional Total_Annihilation_byCaveDog)
'''Dim ws As Worksheet
'''For Each ws In Worksheets
'''ws.Cells.Clear
'''ws.Pictures.Delete
'''ws.DrawingObjects.Delete
'''Next
End Sub
[/userform ou pas userform?]
 

TooFatBoy

XLDnaute Barbatruc
re
non le repaint c'est avant la macro pour afficher le texte dans le label
une fois la macro fini la mémoire est libérée donc le clear des captions se fait
J'avais cru qu'il voulait que le Userform se rafraîchisse pendant l'exécution de la macro appelée (qui prend du temps pour s'exécuter) avec affichage d'informations indiquant l'avancée du travail.

Et je pensais que c'était pendant le déroulement de la macro appelée que le UserForm s'effaçait, ce qui rendait le Repaint avant l'appel de ladite macro totalement inutile.
Mais il se trouve qu'a un moment donné de l’exécution, mon userform devient tout blanc jusque à la fin du processus.
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Moi aussi j'ai une macro qui s'exécute sans besoin de rafraîchissement :
VB:
Sub LaMienneEstMieux()
    ' Exit Sub
End sub

En revanche, je ne peux pas garantir à 100 % que nos deux macros fassent exactement la même chose que la sienne... ;)
 

Staple1600

XLDnaute Barbatruc
Re

Je m'offusque!
Le nom de ma macro est :Sub RAZ(Optional Total_Annihilation_byCaveDog)
Et j'ai point dit qu'elle était mieux mais qu'elle n'avait pas besoin d'userform pour l’encombrer à faire un full tabula rasa ;)
(Mais un gars de la bande est trop "vieux" pour saisir la référence;) située dans l'Optional)
PS: je me permets puisque on a le même stylo: Umûr by Bic ;)
 

KTM

XLDnaute Impliqué
re
Bonjour
il faudrait me dire a quoi set le "Wait" ???
si c'est pour attendre que la sub Reinitialiser_Fichier ai fait son job tu te plante de procédé
car la tu execute la sub Reinitialiser_Fichier 1 seconde en retard
VB:
Private Sub UserForm_Click()
Private Sub reinit_Fichier_Click()
If MsgBox(" Voulez-vous Reinitialiser ce Fichier ? ", vbYesNo + 32) = vbYes Then
Me.Label6.BackColor = RGB(255, 255, 255)
Me.Label6.Caption = " Veuillez Patienter SVP : Reinitialisation des Données en cours.......... "
Application.Wait (Now + TimeValue("00:00:01"))

'Application.ScreenUpdating = False' ne fonctionne pas pour les userforms
Me.Repaint

Call Reinitialiser_Fichier

Me.Label6.BackColor = &HFFFFC0
Me.Label6.Caption = ""
Application.ScreenUpdating = True
End Sub
perso j'ai pris une mani systematique pour gerer ses attentes
quand j'appelle une sub qui doit prendre un moment avant de continuer d’exécuter le code et bien je la transforme tout bonnement en fonction
et donc ceci
Call Reinitialiser_Fichier
se transforme en cela
x=Reinitialiser_Fichier

ainsi tant que la fonction n'a pas fini elle ne retourne pas le résultat a "x" donc le code est en suspens

ce qui donnerait

VB:
Private Sub reinit_Fichier_Click()
Dim x
If MsgBox(" Voulez-vous Reinitialiser ce Fichier ? ", vbYesNo + 32) = vbYes Then
Me.Label6.BackColor = RGB(255, 255, 255)
Me.Label6.Caption = " Veuillez Patienter SVP : Reinitialisation des Données en cours.......... "

x = Reinitialiser_Fichier

Me.Label6.BackColor = &HFFFFC0
Me.Label6.Caption = ""
End If
End Sub

et dans ton module c'est plus sub Reinitialiser_Fichier( )mais function Reinitialiser_Fichier()
avant le end function tu met "Reinitialiser_Fichier=true" si tu veux exploiter le retour
mais tu peux tout aussi bien rien mettre
le but étant d'utiliser le temps d’exécution de la fonction comme gestion d'attente qui sera lui en temps reel et pas estimé

wagadougou! c'est réglé ;)
merci pour le tuyau
 

Membres actuellement en ligne

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16