cs_oxygene2
Messages postés15Date d'inscriptionjeudi 30 septembre 2010StatutMembreDernière intervention26 août 2011
-
30 sept. 2010 à 00:44
nathansecret
Messages postés63Date d'inscriptionmardi 11 novembre 2008StatutMembreDernière intervention31 octobre 2011
-
16 oct. 2010 à 15:23
Bonjour à tous !!
Faisant un programme pour exécuter entre autre une mise à jour j'ai besoin de lancer une progressbar le temps du téléchargement.
J'aimerais lancer ma progress bar sur une 2eme userform après un click sur un bouton de ma 1ere userfom.
Ma 2eme userform s'affiche bien mais elle reste "inactive" (la progress bar ne défile pas)
Voici mon code (ce n'est qu'un test pour le moment)
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub Form2_activate()
ProgressBar.Value = 0
ProgressBar.Visible = True
For j = 1 To 500
ProgressBar.Value = ProgressBar.Value + 0.2
Sleep 1
Next j
ProgressBar.Visible = False
m$ = MsgBox("Mise à jour terminée", vbOKOnly, "Etat")
End Sub
Private Sub Maj_Click()
Form2.Show
End Sub
Au niveau de la progression de la barre que me conseillez vous entre :
Faire progresser la barre en fonction de la vitesse de téléchargement (ce qui me parait compliqué)
Faire progresser la barre en fonction du nombre de fichier restant à télécharger (Dans ce cas quelle est la fonction permettant de savoir quand un téléchargement est terminé??)
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 30 sept. 2010 à 09:07
Salut
Sleep fige le programme VB et laisse Windows gérer les autres applications, certes, mais ta propre application ne profite pas de cette fausse pause.
Il faut mettre au moins un DoEvents après ou avant ton Sleep pour que ton application ait le temps de se rafraichir.
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
nathansecret
Messages postés63Date d'inscriptionmardi 11 novembre 2008StatutMembreDernière intervention31 octobre 2011 16 oct. 2010 à 15:23
Sois sûr que la feuille soit bien visible, par ailleurs, je ne sais pas si la valeur d'une ProgressBar peut être décimale.
Aussi, surtout ne jamais faire :
m$ = MsgBox("...", OkOnly ,"...")
1) Le résultat d'un MsgBox est "As MsgBoxResult" (et non pas "As String")
2) OkOnly, c'est forcément Ok, pourquoi enregistrer la réponse de l'utilisateur ?
Sinon, tu peux toujours faire :
Dim Resultat As MsgBoxResult
Resultat = MsgBox("...",vbYesNoCancel,"Attention !")
Select Case Resultat
Case vbYes
'Oui
Case vbNo
'Non
Case vbCancel
'Annuler
End Select
... ou alors :
MsgBox "...",vbOkOnly,"..."
Enfin bref, voilà ton code :
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Sub Form2_activate()
ProgressBar.Value = 0
ProgressBar.Visible = True
Form2.Visible = True
For j = 1 To 100
ProgressBar.Value = ProgressBar.Value + 1
DoEvents
Sleep 5
Next j
ProgressBar.Visible = False
MsgBox "Mise à jour terminée", vbOKOnly, "Etat"
End Sub