Une petite aide svp pour un état d'avancement d'une macro!!!

matthieu7815 Messages postés 17 Date d'inscription jeudi 15 septembre 2005 Statut Membre Dernière intervention 5 novembre 2005 - 28 oct. 2005 à 17:20
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 - 1 nov. 2005 à 22:50
Bonjour,

Je souhaiterai savoir comment mettre en place une barre d'avancement.
En effet, ma macro est assez longue et je souhaiterai mettre en place une barre qui permette de voir l'execution de la macro.

Ce que je souhaite est en fait la même chose que lorsque l'on télécharge quelque chose. En effet, suivant l'avacement de la macro la barre doit par exemple se colorier pour signaler qu'elle tourne toujours et non pas qu'elle est bloquée.

Merci d'avance.

9 réponses

NicoSoftt Messages postés 106 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 28 octobre 2005
28 oct. 2005 à 19:57
Salut

t'es en VBA, VB ou Vb.net ?

Peux-tu donner ta macro en précisant les actions particulièrement longues
0
matthieu7815 Messages postés 17 Date d'inscription jeudi 15 septembre 2005 Statut Membre Dernière intervention 5 novembre 2005
28 oct. 2005 à 22:12
Bah écoute je suis en visual basic à partir d'excel donc VBA je pense.
Mais mon problème n'est pas lié au fait que la macro soit longue mais plus au fait que je désire mettre une barre qui montre l'avancement de la macro afin de savoir où en est son execution.
0
NicoSoftt Messages postés 106 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 28 octobre 2005
28 oct. 2005 à 22:16
ReSalut

Es-tu dans un classeur ou dans une UserForm ?

Est-ce que ta macro contient principalement une boucle ? (Do... Loop; For...Next)
0
matthieu7815 Messages postés 17 Date d'inscription jeudi 15 septembre 2005 Statut Membre Dernière intervention 5 novembre 2005
28 oct. 2005 à 22:48
dans un classeur. il y a plusieurs boucles do while and for next
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
galopin01 Messages postés 133 Date d'inscription lundi 4 octobre 2004 Statut Membre Dernière intervention 14 octobre 2011 1
29 oct. 2005 à 08:26
Bonjour,
la manière la plus simple :
Application.DisplayStatusBar = True
Application. StatusBar = "Avancement +++."

Et tu rajoutes un + au msg à chaque boucle (ou dizaine de boucles)
A+
0
galopin01 Messages postés 133 Date d'inscription lundi 4 octobre 2004 Statut Membre Dernière intervention 14 octobre 2011 1
29 oct. 2005 à 08:37
Exemple :

Sub test()
Application.DisplayStatusBar = True
For i = 1 To 100000000If i Mod (1000) 0 Then Application.StatusBar "Avancement " &
i / 10000
Next
End Sub
0
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
29 oct. 2005 à 12:11
Lut,
En cherchant bien sur la toile ...........
Function CreateProgressBar(Txt$) As Object
Dim BarForm As Object, Lbl As Object, btn As Object, X

'le userform
Set BarForm = ThisWorkbook.VBProject.VBComponents.Add(3)
With BarForm
.Properties("Caption") = Txt
.Properties("Width") = 267
.Properties("Height") = 100
.Properties("ShowModal") = False
End With

'le label pour afficher la progression
Set Lbl = BarForm.designer.Controls.Add("forms.Label.1")
With Lbl .Left 24: .Top 7: .Width = 215: .Height = 15 .BackColor &HFF8080: .SpecialEffect 2 .Font.Bold True: .TextAlign 2
End With

VBA.UserForms.Add (BarForm.Name)
Set CreateProgressBar = UserForms(UserForms.count - 1)

End Function 'fs


Sub MAJBarre(PB As Object, Inc, Compteur, Max)
If Compteur Mod Inc = 0 Then
With PB
.Label1.Width = CInt(Compteur * 215 / Max)
.Label1.Caption = Format(Compteur / Max, "0%")
.Repaint
End With
End If
End Sub 'fs


Sub DelProgressBar(Nom$)
With ThisWorkbook.VBProject.VBComponents
.Remove .Item(Nom)
End With
End Sub 'fs


'exemple d'utilisation simple :
'à adapter selon ta config
Sub TestPB()
Dim PB As String, i&, j&, Max&
Dim ufBar As Object


'crée la barre de progression et l'affecte à une variable objet
Set ufBar = CreateProgressBar("Test écriture")
ufBar.Show

Max = 5000
For i = 1 To 5000
For j = 1 To 10

'pour faire quelque chose
Cells(i, j).Value = i + j

'mise à jour de la barre de progression
MAJBarre ufBar, 10, i, Max

Next j
Next i

'détruit la barre de progression
'(il faut procéder dans cet ordre)
DelProgressBar ufBar.Name
Unload ufBar
Set ufBar = Nothing

'on efface tout
Cells.ClearContents
MsgBox "Terminé"

End Sub

Cordialement, Jean-Paul
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
0
matthieu7815 Messages postés 17 Date d'inscription jeudi 15 septembre 2005 Statut Membre Dernière intervention 5 novembre 2005
31 oct. 2005 à 20:50
Bonjour,

Je souhaiterai savoir comment donner les valeurs d'une plage range(cells(3,"A"),cells(x,"D")) dans un msgbox. Jusqu'à maintenant il me le refuse. De plus je souhaiterai savoir s'il est possible de rectifier la taille de la fenêtre du msg box et de mettre des termes en gras ou souligné dans un msgbox.

Merci d'avance
0
valtrase Messages postés 937 Date d'inscription lundi 19 janvier 2004 Statut Membre Dernière intervention 9 mai 2022 3
1 nov. 2005 à 22:50
Normal ta syntaxe est incorecte
si tu utilises Range tu doit lui passer une chaine dans le style "A1" ou "A1:J10"
pour Cells tu doit rentrer des entiers longs ex: Cells(1,15) et pour finir si tu utilises cells dans range tu doit donner une chaine a Range donc c'est dans le style
Range(Cells(1,1).Address,Cells(10,12).Address).
Pour ta deuxième question pour la taille la seule solution c'est de faire des retour de lignes avec vbCRLF.sinon pas de gras ni de souligné ou alors te construire ta prope msgBox avec une UserForm

Cordialement, Jean-Paul
______________________________________________________________________

Le Savoir n'a de valeur que s'il est partagé
0
Rejoignez-nous