OVH Cloud OVH Cloud

Msgbox "Fiche N° 1 / 4500 traitée" "Fiche N° 2 / 4500 traitée" ......

2 réponses
Avatar
Vital
A priori il n'y a pas avec Msgbox le moyen d'envoyer
dans le cadre du déroulement d'une boucle l'état du compteur
de suivi de traitement des fiches ( sinon il faut qu'à chaque alerte
l'utilisateur clique sur OK).


Pourtant je voudrai y arriver simplement en faisant quelque chose comme :

for i = 1 to 4500
..... mon traitement
msgbox "Fiche numéro " & Cstr(i) & " traitée sur un total de ...
next


Si tu peux me dépanner, ce serait avec un grand plaisir que j'écouterai tes
conseils


A bientot

2 réponses

Avatar
Joël GARBE
Bonsoir,

à la place de msgbox, tu peux utiliser :
application.statusbar = "etc..."

qui enverra l'info dans la barre d'état

pense à :

application.statusbarúlse

à la fin de la sub...

--

Bien cordialement,

Joël GARBE
www.joelgarbe.fr
"Vital" a écrit dans le message de news:
41a0d192$0$8204$
A priori il n'y a pas avec Msgbox le moyen d'envoyer
dans le cadre du déroulement d'une boucle l'état du compteur
de suivi de traitement des fiches ( sinon il faut qu'à chaque alerte
l'utilisateur clique sur OK).


Pourtant je voudrai y arriver simplement en faisant quelque chose comme :

for i = 1 to 4500
..... mon traitement
msgbox "Fiche numéro " & Cstr(i) & " traitée sur un total de ...
next


Si tu peux me dépanner, ce serait avec un grand plaisir que j'écouterai
tes
conseils


A bientot




Avatar
Frédéric Sigonneau
Bonsoir,

Une solution compliquée, mais qui fonctionne (en principe avec toutes les
versions d'Excel depuis Excel 97) et que tu peux sans doute adapter à ton besoin.
Selon le message à afficher, joue sur les propriétés Height et Width de
l'userform comme du label pour qu'il soit entièrement visible.
Le plus petit temps d'affichage possible du message est de 1 seconde. Si tu
l'affiches à chaque tour de boucle, ça va être interminable avec 4500
passages... Affiche l'état d'avancement des travaux seulement tous les 100 ou
200 tours, ça suffira sans doute amplement.
Tu peux copier le code dans un module standard, ensuite il te suffit d'appeler
la procédure AfficheMsg dans ta boucle, avec en paramètres le texte à afficher
et la durée d'affichage en secondes.

'====================== Sub test()
AfficheMsg "test message", 1
End Sub


Sub AfficheMsg(Msg$, Delai&)
Dim ufMsg As Object, i&

Set ufMsg = CreatePopupMsg("")
ufMsg.Show
ufMsg.Label1.Caption = Msg
Application.Wait (Now + (Delai / 86400))
DelPopupMsg ufMsg.Name
Unload ufMsg
Set ufMsg = Nothing

End Sub

Function CreatePopupMsg(Txt$) As Object
Dim BarForm As Object, Lbl As Object

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

' label
Set Lbl = BarForm.Designer.Controls.Add("forms.Label.1")
With Lbl
.Left = 10: .Top = 12: .Width = 70: .Height = 50
.ForeColor = 2036353
.Font.Bold = True: .TextAlign = 2: .Font.Size = 12
End With

VBA.UserForms.Add (BarForm.Name)
Set CreatePopupMsg = UserForms(UserForms.Count - 1)

End Function 'fs

Sub DelPopupMsg(Nom$)
With ThisWorkbook.VBProject.VBComponents
.Remove .Item(Nom)
End With
End Sub 'fs
'======================
FS
---
Frédéric Sigonneau [MVP Excel - né un sans-culottide]
Gestions de temps, VBA pour Excel :
http://frederic.sigonneau.free.fr
Si votre question sur Excel est urgente, évitez ma bal !

A priori il n'y a pas avec Msgbox le moyen d'envoyer
dans le cadre du déroulement d'une boucle l'état du compteur
de suivi de traitement des fiches ( sinon il faut qu'à chaque alerte
l'utilisateur clique sur OK).


Pourtant je voudrai y arriver simplement en faisant quelque chose comme :

for i = 1 to 4500
..... mon traitement
msgbox "Fiche numéro " & Cstr(i) & " traitée sur un total de ...
next


Si tu peux me dépanner, ce serait avec un grand plaisir que j'écouterai tes
conseils


A bientot