Modifier le texte d'un userform pendant l'exécution d'un prg vba

  • Initiateur de la discussion Initiateur de la discussion guainflo
  • Date de début Date de début

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 !

G

guainflo

Guest
Bonjour,

J'ai un programme avec une durée de calcul de 30s à 1 min, je voudrais afficher pendant que le prg calcul, une petite fenêtre indiquant le poucentage de progression.
Le prg est composé principalement d'une boucle allant de 0 à 200 (for i=0 to 200).
Je veut prendre i/2 pour afficher le pourcentage.

J'ai pensé à un userform que j'affiche avant la boucle (.show) et que je cache après la boucle (.hide).

Mon pb est que je n'arrive pas à modifier le texte.

Mon userform (FRM_progression) est composé de 3 intitulés (caption) : "Progression:" ; "%" ; "0".
Le nom de l'intitulé "0" est : Label_progression

Voici le prg qui ne marche pas, l'userform s'affiche mais le "0" reste et le prg s'arrete à Label_progression.Caption = "i".


FRM_progression.show
for i=0 to 200
Label_progression.Caption = "i"
instruction 1
function 1
instruction 2
instruction 3
...
next i
FRM_progression.hide

Quelqu'un à une idée?
 
Re : Modifier le texte d'un userform pendant l'exécution d'un prg vba

Bonjour,

Il y a tjs une erreur : erreur d'exécution '424', Objet requis.

La ligne de code ne doit-elle pas se trouver obligatoirement dans le code de l'userform (ici elle se trouve dans la feuil1)?

Voici une partie du prg (le prg même zippé dépasse 50ko) :

Code:
FRM_progression.Show
For i = 0 To 200
Label_progression.Caption = i
If i = 0 Then q = R2 Else q = t2(i - 1, 1) * 10 ^ 6
P1 = t1(i, 2) * 10 ^ 6
ifpo = Istn
testcarac = 0
While ifpo > Ifn
'MsgBox ("nouveauwhileifposupIfn")
q = q - 0.0001 * q
If q < 1 Then GoTo line1
S = Sqr(P1 ^ 2 + q ^ 2)
Isp = S / (Sqr(3) * U)
If P1 = 0 Then phi = PI / 2 Else phi = Atn(q / P1)
E = Sqr((U + lambda * Isp * w * Sin(phi)) ^ 2 + (lambda * Isp * w * Cos(phi)) ^ 2)  ' force éléctromotrice
Dim Etest
Etest = Sheets("Graphecaract").Cells(4, 8)
Etest = Etest * Un * 1000
If E > Etest Then
    A1 = coeffloga1
    B1 = coeffloga0
    Y = E / (Un * 1000)
    ifr = Exp((Y - B1) / A1)
Else
    Ap = coeffpoly3
    Bp = coeffpoly2
    Cp = coeffpoly1
    Dp = coeffpoly0
    Dp = Dp - (E / (Un * 1000))
    ifr = resolvequation(Ap, Bp, Cp, Dp)
End If
ai = Atn(lambda * Isp * w * Cos(phi) / (U + lambda * Isp * w * Sin(phi)))           ' angle interne
ifpo = Sqr((ifr + alpha * Isp * Sin(ai + phi)) ^ 2 + (alpha * Isp * Cos(ai + phi)) ^ 2)      ' courant inducteur réel
Q1 = q
'Sheets("Graphecaract").Cells(5, 9) = ifpo
'Sheets("Graphecaract").Cells(6, 9) = Ifn
Wend
t1(i, 1) = Q1 * 10 ^ -6
t1(i, 2) = P1 * 10 ^ -6
Next i
FRM_progression.Hide
 
Re : Modifier le texte d'un userform pendant l'exécution d'un prg vba

Re

Rapidement, un petit exemple qui fonctionne.

Dans un module :
Code:
Sub test()
UserForm1.Show   'nom de l'USF à modifier
End Sub

Sub test_usf()
For i = 1 To 10   'la boucle ne se voit que au "pas à pas"
UserForm1.Label1.Caption = i   'nom de l'USF à modifier, attention mettre le nom de l'USF avant Label.... qui a forcément un indice Label1, 2 ou .....
Next i
End Sub
dans l'USF :
Code:
Private Sub UserForm_Activate()
test_usf
End Sub
Tu n'as plus qu'à adapter

Eric
 
Re : Modifier le texte d'un userform pendant l'exécution d'un prg vba

Re,

Ca ne marche tjs pas, le prg s'effectue mais il faut que j'efface l'userform avec la croix à chaque apparition (elle apparait à chaque nouveau passage dans la boucle), et la valeur de i n'est pas affichée.
En fait, je pense que le prg ne va pas à la ligne de code " FRM_test.Label_progression.Caption = i", le prg montre l'USF mais n'effectue pas le prg associé à l'USF.
Ensuite pour continuer le prg, je dois à chaque fois fermer la fenêtre de l'USF.

Une partie du prg principale

Code:
Public i
[COLOR="Red"]Private Sub CommandButton1_Click()[/COLOR]
Instruction 1
....
For i = 0 To 200
Sheets("Graphecaract").Cells(2, 5) = i
[COLOR="blue"]FRM_progression.Show[/COLOR]
If i = 0 Then q = R2 Else q = t2(i - 1, 1) * 10 ^ 6
'Sheets("Graphecaract").Cells(1, 6) = i
P1 = t1(i, 2) * 10 ^ 6
ifpo = Istn
testcarac = 0
While ifpo > Ifn
'MsgBox ("nouveauwhileifposupIfn")
q = q - 0.0001 * q
If q < 1 Then GoTo line1
S = Sqr(P1 ^ 2 + q ^ 2)
Isp = S / (Sqr(3) * U)
If P1 = 0 Then phi = PI / 2 Else phi = Atn(q / P1)
E = Sqr((U + lambda * Isp * w * Sin(phi)) ^ 2 + (lambda * Isp * w * Cos(phi)) ^ 2)  ' force éléctromotrice
Dim Etest
Etest = Sheets("Graphecaract").Cells(4, 8)
Etest = Etest * Un * 1000
If E > Etest Then
    A1 = coeffloga1
    B1 = coeffloga0
    Y = E / (Un * 1000)
    ifr = Exp((Y - B1) / A1)
Else
    Ap = coeffpoly3
    Bp = coeffpoly2
    Cp = coeffpoly1
    Dp = coeffpoly0
    Dp = Dp - (E / (Un * 1000))
    ifr = resolvequation(Ap, Bp, Cp, Dp)
    'Sheets("Graphecaract").Cells(3, 6) = Dp
    'Sheets("Graphecaract").Cells(4, 6) = E
    'Sheets("Graphecaract").Cells(5, 6) = Un
    'Sheets("Graphecaract").Cells(2, 6) = ifr
    'MsgBox ("courbenom")
End If


ai = Atn(lambda * Isp * w * Cos(phi) / (U + lambda * Isp * w * Sin(phi)))           ' angle interne
ifpo = Sqr((ifr + alpha * Isp * Sin(ai + phi)) ^ 2 + (alpha * Isp * Cos(ai + phi)) ^ 2)      ' courant inducteur réel
Q1 = q
'Sheets("Graphecaract").Cells(5, 9) = ifpo
'Sheets("Graphecaract").Cells(6, 9) = Ifn
Wend
t1(i, 1) = Q1 * 10 ^ -6
t1(i, 2) = P1 * 10 ^ -6
Next i
[COLOR="Blue"]FRM_progression.Hide[/COLOR]
...
[COLOR="red"]End Sub[/COLOR]

Code dans l'userform :

Code:
Private Sub FRM_test_Activate()
    FRM_test.Label_progression.Caption = i
End Sub
 
Re : Modifier le texte d'un userform pendant l'exécution d'un prg vba

Re,

J'ai tapé un programme simple (voir pièce jointe) qui résume mon programme.

Quand je le lance, l'USF s'affiche et le prg ne tourne pas, quand tu supprime l'USF avec la croix, le prg se lance et l'USF reviens mais le prg s'effectue intégralement et l'USF part.

Mais la valeur affichée dans l'USF n'est pas modifiée. Je veux me servir de "i" pour afficher le pourcentage de progression dans l'USF (i de 0 à 20, pourcentage = i*5).


Voici le code dans la feuil1 :
Code:
Public i As Integer

Private Sub CommandButton1_Click()
    Dim a As Integer
    Dim n As Integer
    UserForm1.Show
    For i = 0 To 20
    Range("C3") = i
    For a = 0 To 1000
        B = 10
        C = 20
        D = 30
        E = B + C + D
        F = E - B
        G = B * C * D
        For n = 0 To 1000
            M = 30
            P = 15
            Z = M * P + G
            Z = Z / D
        Next n
    Next a
    Next i
    UserForm1.Hide
End Sub

Et le code associé à l'USF :
Code:
Private Sub UserForm1_Activate()
    UserForm1.Label3.Caption = i * 5
End Sub

Si quelqu'un a une idée et peut modifier mon prg.
 

Pièces jointes

Re : Modifier le texte d'un userform pendant l'exécution d'un prg vba

J'ai trouvé une solution :


Voici le programme de la "feuil1", il n'y a pas de prg associé à l'USF :
Apparement, la ligne "UserForm1.Show False" permet d'afficher l'USF mais de ne pas stopper le programme, et la ligne "UserForm1.Repaint" permet de rafraichir l'USF.


Code:
Public i As Integer

Private Sub CommandButton1_Click()
    Dim a As Integer
    Dim n As Integer
    UserForm1.Show False
    For i = 0 To 5
    UserForm1.Label3.Caption = i * 5
    UserForm1.Repaint
    Range("C3") = i
    For a = 0 To 1000
        B = 10
        C = 20
        D = 30
        E = B + C + D
        F = E - B
        G = B * C * D
        For n = 0 To 1000
            M = 30
            P = 15
            Z = M * P + G
            Z = Z / D
        Next n
    Next a
    Next i
    UserForm1.Hide
End Sub
 
Re : Modifier le texte d'un userform pendant l'exécution d'un prg vba

Re,

J'ai un autre problème, je souhaite afficher un bouton pendant qu'il affiche le pourcentage permettant d'arrêter le programme (en cliquant dessus on va à la fin directement du prg, par exemple, goto finprg).
J'ai essayé d'ajouter un bouton sur l'USF mais ca ne marche pas (à cause :UserForm1.Show False je pense).

Quelqu'un a une idée?
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

N
Réponses
6
Affichages
2 K
K
Réponses
0
Affichages
676
kheiro31
K
S
  • Question Question
Réponses
10
Affichages
5 K
S
Réponses
4
Affichages
2 K
stage_ferrit
S
S
Réponses
2
Affichages
1 K
N
Réponses
1
Affichages
963
N
Réponses
17
Affichages
3 K
ninajams
N
M
Réponses
19
Affichages
5 K
M
Retour