Texte défilant dans Userform
salut le Forum
je voudrais afficher un userform a l'ouverture de mon classeur qui devra indiquer à l'utilisateur de patienter quelques secondes le temps qu'une macro s'exécute et se refermer après .
-J'ai conçu le userform
Label1 Message d'attente
Label2 Un texte que je voudrais faire défiler pendant le temps d'attente
J'ai essayé de bricoler quelque chose Mais ça fonctionne mal. Un coup de main?
Bonsoir KTM, le forum,
Un exemple ici:..........http://boisgontierjacques.free.fr/fichiers/Formulaire/FormMessageDefilant.xls
Cordialement,
Merci xorsankukai pour le tuyau
J'ai pu faire un pas en avant mais quelques inquiétudes
- A l'ouverture du classeur le Userform s'affiche mais la macro s'exécute pas tant qu'on ne le ferme pas
- Le texte défilant ne s'affiche pas sur toute la largeur du label
Mon souhait est que :
-A l'ouverture le Userform s'affiche et tout en restant affiché la macro S'exécute et quand elle est finie le Userform se ferme seul
-Qu'il soit impossible de fermer le Userform quand la macro s'exécute
Je joint le fichier avec ce qui est déjà fait Merci
Re,
Tout d'abord, une petite question: pourquoi un message d'attente à l'ouverture ?
L'exécution de ta macro est trop lente ?
Pour ce point:
Le texte défilant ne s'affiche pas sur toute la largeur du label
Il faut rajouter des .
dans la ligne
Me.Label2.Caption = " . . . . . . . . . . . . . . . . . . . Texte Defilant . . . . . . . . . . . . "
Tu peux également diminuer la taille de l'USF et des labels, une petite fenêtre suffit.
Cordialement,
Besoin d'un message d'attente ? .Je dois protéger plusieurs feuilles a l'ouverture du classeur et cela mets un petit temps de latence
Bonjour,
(KTM, motard en Super Duke 1290 ?)
Il te faut savoir que VBA est un code interprété donc, si tu veux avoir un UserForm avec un message d'attente, il te faut l'intégrer dans ton code mais à mon sens, le plus simple est de créer deux Labels sur la feuille a et d'intégrer la progression dans le code. Attention, ça fait scintiller l'écran donc, par forcément très agréable pour l'utilisateur :
Private Sub Workbook_Open()
Dim sh As Worksheet
Dim Ctrl As OLEObject
Dim LblProgress As MSForms.Label
Dim LblFond As MSForms.Label
Dim LargeurLabel As Integer
Dim HauteurLabel As Integer
Dim Max As Long
Dim R As Single
Dim I As Long
Dim J As Long
Set sh = Worksheets("a")
'défini les dimensions
LargeurLabel = 500
HauteurLabel = 20
Max = ThisWorkbook.Worksheets.Count
With sh
On Error Resume Next
.OLEObjects("LblProgress").Delete
.OLEObjects("LblFond").Delete
Application.ScreenUpdating = False
'crée le label servant de fond
Set Ctrl = .OLEObjects.Add("Forms.Label.1")
'passe l'objet à la variable afin d'utiliser les propriétés des labels
Set LblFond = Ctrl.Object
'défini certaines de ces dernières
With LblFond
.Name = "LblFond"
.Caption = ""
.BackColor = &HC0FFFF
.BorderStyle = fmBorderStyleSingle
.Left = Application.UsableWidth / 2 - LargeurLabel / 2
.Top = Application.UsableHeight / 2
.Width = LargeurLabel
.Height = HauteurLabel
End With
'crée le label servant de barre de progression
Set Ctrl = .OLEObjects.Add("Forms.Label.1")
'idem que plus haut
Set LblProgress = Ctrl.Object
With LblProgress
.Name = "LblProgress"
.Caption = ""
.BorderStyle = fmBorderStyleSingle
.BackColor = &H800000
.ForeColor = &HFFFFFF
.Left = Application.UsableWidth / 2 - LargeurLabel / 2
.Top = Application.UsableHeight / 2
.Width = 0
.Height = HauteurLabel
.TextAlign = fmTextAlignCenter
End With
Application.ScreenUpdating = True
'rapport
R = LargeurLabel / Max
For Each sh In ThisWorkbook.Worksheets
J = J + 1
LblProgress.Width = J * R
LblProgress.Caption = Format(J / Max, "#0%")
For I = 1 To 10000: DoEvents: Next I
With sh
.Visible = xlSheetVisible
.Unprotect Password:=""
.EnableAutoFilter = True
.EnableOutlining = True
.Cells.Locked = False
On Error Resume Next
.Cells.SpecialCells(xlCellTypeFormulas, 23).Locked = True
.Cells.SpecialCells(xlCellTypeConstants, 2).Locked = False
On Error GoTo 0
.Protect Password:="", _
AllowFormattingCells:=True, _
AllowFormattingColumns:=True, _
AllowFormattingRows:=True, _
AllowInsertingColumns:=True, _
AllowInsertingRows:=True, _
AllowInsertingHyperlinks:=True, _
AllowDeletingColumns:=True, _
AllowDeletingRows:=True, _
AllowSorting:=True, _
AllowFiltering:=True, _
AllowUsingPivotTables:=True, _
UserInterfaceOnly:=True
End With
Next sh
Sheets("a").Select
On Error Resume Next
.OLEObjects("LblProgress").Delete
.OLEObjects("LblFond").Delete
End With
End Sub
Merci Theze je viens d'appliquer votre méthode . C'est Très intéressant mais l'ouverture du fichier est ralentie. Comment peut on optimiser ? je l'ai appliquer à un autre fichier plus lourd et c'est très très lent
Bonjour,
J'ai oublié de préciser que j'ai intégrer une boucle inutile pour l'utilisation réelle mais je l'ai fait pour voir la progression dans le fichier que tu as posté, il te faut la supprimer :
For I = 1 To 10000: DoEvents: Next I
elle se trouve ici :
For Each sh In ThisWorkbook.Worksheets
J = J + 1
LblProgress.Width = J * R
LblProgress.Caption = Format(J / Max, "#0%")
--------> For I = 1 To 10000: DoEvents: Next I
With sh