Vba boucle for dure 2O minutes

usdy Messages postés 243 Date d'inscription   Statut Membre Dernière intervention   -  
usdy Messages postés 243 Date d'inscription   Statut Membre Dernière intervention   -
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
A voir également:

3 réponses

michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
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   Statut Membre Dernière intervention   6
 
SVP !!! help me :-(
0
usdy Messages postés 243 Date d'inscription   Statut Membre Dernière intervention   6
 
merci de ton aide (très) constructive
mais j'ai réussi à trouver une solution à mon problème !!!!
0