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
4
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
4
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