Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Barre de progression

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Re : Barre de progression

Bonjour,

Tu place un Label de la longueur que tu veux pour ta barre de progression et à l'endroit où tu veux qu'il se trouve et tu le nomme LblFond puis tu pose un second Label que tu nomme LblProress (sa position et taille importe peu, il sera dimensionné à l'ouverture de la form, mais il doit être posé sur la form en second !) et ensuite, tu rajoute ce code :
Code:
Private Sub UserForm_Initialize()

    With LblFond
    
        .Visible = False
        .BorderStyle = fmBorderStyleSingle
        .BackColor = &H80FFFF
    End With
    
    With LblProgress
        
        .Visible = False
        .BackColor = &H8000&
        .Height = LblFond.Height
        .Width = 0
        .Top = LblFond.Top
        .Left = LblFond.Left
        
    End With

End Sub

Sub Progression(ByVal Valeur As Double, _
                ByVal Maxi As Double)
       
    Dim R As Double
    
    R = LblFond.Width / Maxi
    
    With LblProgress
    
        .Width = Valeur * R
        .Caption = Format(Valeur / Maxi, "#%")
        
        If Valeur = Maxi Then
        
                .Width = 0
                .Visible = False
                LblFond.Visible = False
                
        End If
    
    End With
    
    DoEvents

End Sub

Et enfin, tu remplace :
Code:
For I = 4 To a

par :
Code:
LblProgress.Visible = True
LblFond.Visible = True

For I = 4 To a

Progression I, a
dans ta proc "Private Sub CommandButton1_Click()" et une fois testé, tu pourras modifier les valeurs que j'ai attribuées pour le test.

Hervé.
 
Re : Barre de progression

Je n'obtiens pas de résultats Theze, j'ai une erreur sur la ligne
R = LblFond.Width / Maxi

On peut pas repartir de l'userform dans l'exemple de Pascal plutôt???
 
Dernière édition:
Re : Barre de progression

Re,

Si tu n'as pas renommé le label "LblFond" ou que tu ne l'a pas mis sur ta form c'est normal que tu ais une erreur.
C'est quasiment identique à l'exemple de Pascal, un label pour le fond à la place d'un frame.

Hervé.
 
Re : Barre de progression

Ci-joint le fichier avec l'erreur (fichier crit2)!!!

J'ai également mis le fichier (fichier crit3) avec la solution adaptée de l'exemple de Pascal. La userform a une réaction bizarre que je n'explique pas!!!
 
Dernière édition:
Re : Barre de progression

Bonjour,

Comme la proc Progression est dans un module standard, il faut indiquer à quel formulaire font référence les Labels :
Code:
Sub Progression(ByVal Valeur As Double, _
                ByVal Maxi As Double)
       
    Dim R As Double
    
    R = UserForm6.LblFond.Width / Maxi
    
    With UserForm6.LblProgress
    
        .Width = Valeur * R
        .Caption = Format(Valeur / Maxi, "#%")
        
        If Valeur = Maxi Then
        
                .Width = 0
                .Visible = False
                UserForm6.LblFond.Visible = False
                
        End If
    
    End With
    
    DoEvents

End Sub

Afin d'avoir le pourcentage d'avancement centré dans le label, ajouter .TextAlign = fmTextAlignCenter dans UserForm_Initialize :
Code:
Private Sub UserForm_Initialize()

    With LblFond
    
        .Visible = False
        .BorderStyle = fmBorderStyleSingle
        .BackColor = &H80FFFF
    End With
    
    With LblProgress
        
        .Visible = False
        .BackColor = &H8000&
        .Height = LblFond.Height
        .Width = 0
        .Top = LblFond.Top
        .Left = LblFond.Left
        .TextAlign = fmTextAlignCenter
        
    End With

End Sub

Hervé.
 
Re : Barre de progression

Super ça fonctionne bien là. Allez je t’embête encore un peu. Et si je veux que cette barre de chargement s'affiche dans une autre userform dès que je clique sur mon commandbutton1, je fais comment???

Et enfin (j'arrête après 🙂), as-tu regardé le fichier crit3 et est ce que tu comprends ce qui se passe????

Merci en tout cas Theze
 
Re : Barre de progression

Progression I, a

tu peux m'expliquer la syntaxe. On appel la procédure progression, et après I,a ca veut dire??

Plus simplement, tu peux m'expliquer ce qui se passe ligne par ligne

Code:
Sub Progression(ByVal Valeur As Double, ByVal Maxi As Double)
       
Dim R As Double
    
    
    R = UserForm6.LblFond.Width / Maxi
    
    With UserForm6.LblProgress
    
        .Width = Valeur * R
        .Caption = Format(Valeur / Maxi, "#%")
        
        If Valeur = Maxi Then
        
                .Width = 0
                .Visible = False
                UserForm6.LblFond.Visible = False
                
        End If
    
    End With
    
    DoEvents

End Sub

j'ai notamment du mal à comprendre comme la variable valeur et maxi prennent leur valeur???
 
Dernière édition:
Re : Barre de progression

Bonjour,

Voici ton classeur avec un formulaire de progression.
Pour les explications :
Code:
Sub Progression(ByVal Valeur As Double, ByVal Maxi As Double)
       
    Dim R As Double
   
    
    'calcule le rapport entre la longueur du label et le maximum d'itérations
    R = UserForm6.LblFond.Width / Maxi
   
    With UserForm6.LblProgress
        
        'défini la largeur du label servant à montrer la progression
        .Width = Valeur * R
        
        'affiche le pourcentage de progression
        .Caption = Format(Valeur / Maxi, "#%")
        
        'si on est arrivé au maxi alors fin
        If Valeur = Maxi Then
       
                .Width = 0
                .Visible = False
                UserForm6.LblFond.Visible = False
               
        End If
   
    End With
    
    'laisse la main à d'autres processus
    DoEvents

End Sub

Hervé.
 

Pièces jointes

Re : Barre de progression

Super bien cette barre de chargement, mais là ou je comprends rien, c'est ici :

Code:
Option Explicit

'Recup du handle
Private Declare Function RecupFenetre _
                Lib "user32" _
                Alias "FindWindowA" ( _
                ByVal lpClassName As String, _
                ByVal lpWindowName _
                As String) As Long
                
'récup du style
Private Declare Function RecupStyleFenetre _
                Lib "user32" _
                Alias "GetWindowLongA" ( _
                ByVal hwnd As Long, _
                ByVal nIndex As Long) As Long
                
'défini le nouveau style
Private Declare Function DefStyleFenetre _
                Lib "user32" _
                Alias "SetWindowLongA" ( _
                ByVal hwnd As Long, _
                ByVal nIndex As Long, _
                ByVal dwNewLong As Long) As Long

Const GSTYLE = -16
Const SYSMENU = &H80000

Ainsi que cette partie là :

Code:
'récupère le handle de la Form
    Identifiant = RecupFenetre("thunderdframe", Me.Caption)
    
    'récupère le style actuel de la Form
    Style = RecupStyleFenetre(Identifiant, GSTYLE)
    
    'supprime la croix de fermeture
    Style = (Style And Not SYSMENU)
    
    'Défini le nouveau style
    DefStyleFenetre Identifiant, GSTYLE, Style

Si tu as encore quelques minutes à m'accorder pour m'expliquer bien qu'il y ait déjà des commentaires, je suis preneur!!!
Si je comprends vaguement le langage, le code permet de mettre en forme la userform, c'est ça???
Et si tu as une source sur le net qui explique cette partie du langage VBA, je suis aussi preneur.

😕 J'ai l'impression d'en demander beaucoup...

Merci encore 🙂

NB : En fait, tu auras compris que je ne suis pas expert en VBA. Je me débrouille sur de la programmation simple et assez intuitive une fois que tu as pris l'habitude. Mais ces bouts de code que je t'ai copié au-dessus sont moins clairs...
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
415
Réponses
1
Affichages
285
W
  • Question Question
Microsoft 365 Liste de choix...
Réponses
8
Affichages
326
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…