OVH Cloud OVH Cloud

Aide deroulement macro

1 réponse
Avatar
Michael BAS
Bonjour,

J'ai un code qui ressemble à ça (trouvé sur le net)

Sub GrosCalcul()
Dim i As Long
For i = 1 To 1000000
' fais des trucs
' plein de trucs
' une quantité impressionnante de trucs
' ça y est, les trucs sont finis pour ce i
If i Mod 10000 = 0 Then
Application.StatusBar = Int(i / 10000) & "% effectués"
End If
Next i
Application.StatusBar = False
End Sub

Mon probleme c'est que je ne sais pas quelle partie mettre pour marquer
differentes étapes.
si je met tout mon code a la place des commentaires il est traité 10000 fois
!!!

Merci d'avance de me guider un peu
Bye

1 réponse

Avatar
Jean-Marc
"Michael BAS" a écrit dans le message de
news:
Bonjour,

J'ai un code qui ressemble à ça (trouvé sur le net)

Sub GrosCalcul()
Dim i As Long
For i = 1 To 1000000
' fais des trucs
' plein de trucs
' une quantité impressionnante de trucs
' ça y est, les trucs sont finis pour ce i
If i Mod 10000 = 0 Then
Application.StatusBar = Int(i / 10000) & "% effectués"
End If
Next i
Application.StatusBar = False
End Sub

Mon probleme c'est que je ne sais pas quelle partie mettre pour marquer
differentes étapes.
si je met tout mon code a la place des commentaires il est traité 10000


fois
!!!



Hello,

on utilise ce genre de code pour permettre à l'utilisateur de
savoir "ou il en est". Ce type de code est utile quand tu fais
un traitement qui est un ensemble ou une itération de traitements
élémentaires.
Par exemple:
- Lecture d'un fichier ligne par ligne
- Insertion de records (un par un) dans une DB
- Tout type de traitement long MAIS décomposable en
traitements unitaires

Voici un bout de code illustrant ceci. C'est un exemple
de traitement long (remplissage d'un gros tableau).
NB: ce n'est qu'un exemple stupide illustrant un processus
qui prend du temps. Voici la bête:

' 8<--------------------------------------------

Option Explicit
Const N_ELEM As Long = 1000000
Private Sub Command1_Click()
Dim i As Long
Dim j As Long
Dim tablo(N_ELEM) As Double
Dim n As Double

For i = 1 To N_ELEM

' le truc unitaire qui prend du temps
n = 1
For j = 1 To 10
n = n * Rnd * 10
Next j
tablo(i) = n
DoEvents
' fin du truc unitaire qui prend du temps

' affichage de l'avancement
If (i Mod 100) = 0 Then
Text1.Text = Str$(Int(i / N_ELEM * 100)) & "% effectué"
Text1.Refresh
DoEvents
End If
Next i
Text1.Text = "100 % effectué"
End Sub

' 8<--------------------------------------------

Cette méthode n'est pas applicable (du moins pas aussi
facilement) si ton traitement n'est pas ou pas aisément
découpable en petites unités.

Espérant que ça t'aide.

--
Jean-marc
"There are only 10 kind of people
those who understand binary and those who don't."
mailto: remove '_no_spam_' ;