Vba boucle for dure 2O minutes

Fermé
usdy Messages postés 243 Date d'inscription lundi 4 août 2008 Statut Membre Dernière intervention 20 mai 2018 - 16 juil. 2009 à 15:17
usdy Messages postés 243 Date d'inscription lundi 4 août 2008 Statut Membre Dernière intervention 20 mai 2018 - 17 juil. 2009 à 13:59
Bonjour tout le monde,

Encore une fois, j'ai un p'tit souci en vba :
j'ai une procédure dans laquelle j'imbrique 3 boucles for dans lesquelles j'ai mis plusieurs conditions if.
Cette procédure travaille sur un fichier de 20 000 lignes environ, elle fonctionne bien mais met environ 15 minutes pour se terminer.
Existe-t-il une autre façon de faire mes boucles for pour aller beaucoup plus vite?
Voici ma fonction ci-dessous :
merci à ceux et celles qui se pencheront sur mon problème !
Mes boucles for sont de la forme :
p,p2, p3, p4 sont des plages
Public Sub Remp()
For Each o In p
If Rows(o.Row).Hidden = False Then
code = Worksheets("m").Range("C" & o.Row).Value
For Each n In p2
If (n.Value = code And (Worksheets("F").Range("F" & n.Row).Value)) Then
Worksheets("m").Range("M" & o.Row).Value = Worksheets("F").Range("F" & n.Row).Value
Worksheets("m").Range("N" & o.Row).Value = Worksheets("F").Range("A" & n.Row).Value
Worksheets("m").Range("O" & o.Row).Value = Worksheets("F").Range("E" & n.Row).Value) / (Worksheets("F").Range("E" & n.Row).Value)
For Each j In p4
If (Worksheets("m").Range("M" & o.Row).Value) = j.Value Then
Worksheets("m").Range("Z" & o.Row).Value = (Worksheets("pro").Range("C" & j.Row).Value)
Exit For
End If
Next
Exit For
ElseIf (n.Value = code And (Worksheets("F").Range("F" & n.Row).Value = "")) Then
prof = Worksheets("F").Range("A" & o.Row).Value
For Each z In p3
If (prof= z.Value) Then
Worksheets("m").Range("Z" & o.Row).Value = Worksheets("prof").Range("E" & z.Row).Value
wbk_flux.Worksheets("m").Range("N" & o.Row).Value = prof
wbk_flux.Worksheets("m").Range("O" & o.Row).Value = (Worksheets("F").Range("EH" & n.Row).Value) / (wbk_fg04.Worksheets("F").Range("EI" & n.Row).Value)
Exit For
End If
Next
End If
Next
End If
Next
End Sub

3 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
17 juil. 2009 à 09:17
onjour,

Ton code est construit pour qu'il soit incompréhensible et illisible....
Or la 1° qualité d'une procédure est la facilité de maintenance...

1/abus de variable de feuille à un caractère: on doit pouvoir changer le nom d'une variable rapidement avec la fonction remplacer;

2/tendance à l'ambiguïté avec le numéro de colonnes avec 1 caractère
tendance à l'ambiguïté avec le nom des feuilles (éviter aussi 1 caractère pour des noms de feuilles)

3/ nom de variable identique à nom de feuille comme prof, par ex.

4/Pas d'indentation de ton code: utilise les balises "code" fournies dans les onglets en haut des message

5/aucun commentaire explicatif

6/ aucune déclaration de variable

Dans ces conditions, ne t'étonne pas d'avoir aucune réponse

revoie donc la conception de ta procédure en pensant que quelqu'un autre qui ne connait pas ce que tu veux faire puisse dépanner ou modifier rapidement:
Bref, ce que tu nous demandes.
c'est le B.A.BA de la programmation

après reviens nous voir et quelqu'un essaiera de t'aider
2
usdy Messages postés 243 Date d'inscription lundi 4 août 2008 Statut Membre Dernière intervention 20 mai 2018 6
17 juil. 2009 à 08:34
SVP !!! help me :-(
0
usdy Messages postés 243 Date d'inscription lundi 4 août 2008 Statut Membre Dernière intervention 20 mai 2018 6
17 juil. 2009 à 13:59
merci de ton aide (très) constructive
mais j'ai réussi à trouver une solution à mon problème !!!!
0