Une petite aide svp pour un état d'avancement d'une macro!!!
matthieu7815
Messages postés17Date d'inscriptionjeudi 15 septembre 2005StatutMembreDernière intervention 5 novembre 2005
-
28 oct. 2005 à 17:20
valtrase
Messages postés937Date d'inscriptionlundi 19 janvier 2004StatutMembreDerniè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.
matthieu7815
Messages postés17Date d'inscriptionjeudi 15 septembre 2005StatutMembreDerniè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.
galopin01
Messages postés133Date d'inscriptionlundi 4 octobre 2004StatutMembreDernière intervention14 octobre 20111 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
valtrase
Messages postés937Date d'inscriptionlundi 19 janvier 2004StatutMembreDernière intervention 9 mai 20223 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é"
matthieu7815
Messages postés17Date d'inscriptionjeudi 15 septembre 2005StatutMembreDerniè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.
valtrase
Messages postés937Date d'inscriptionlundi 19 janvier 2004StatutMembreDernière intervention 9 mai 20223 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