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
Rechercher des sujets similaires à "texte defilant userform"