Lenteur de code

Lenteur de code - VB/VBA/VBS - Programmation

Marsh Posté le 07-05-2004 à 20:02:28    

Bonjour, J'ai un gros problème
En effet mon code ci-après est très lent car il doit manipuler des données sur deux feuilles  sur environ 35 000 lignes et c'est là que ça coince. Mon code met au moins 30min pour s'exécuter.
Merci d'avance pour votre aide
Lire le code en question :
Sub MAJ_Saisie()
    Dim Z, M, DerLi, Loqp As Double
    DerLi = Sheets("OF" ).Cells.Find("*", , , , xlByRows, xlPrevious).Row
        With Sheets("Saisie Sacherie" )
        Loqp = .Cells.Find("*", , , , xlByRows, xlPrevious).Row
            For Z = 3 To Loqp
                For M = 3 To DerLi
                     If .Range("C" & Z).Value = Sheets("OF" ).Range("B" & M).Value Then
                        .Range("F" & Z).Value = Sheets("OF" ).Range("C" & M).Value
                        .Range("G" & Z).Value = Sheets("OF" ).Range("L" & M).Value
                        .Range("H" & Z).Value = IIf(Sheets("OF" ).Range("I" & M).Value = 0, _
                         Sheets("OF" ).Range("E" & M).Value, _
                           Sheets("OF" ).Range("E" & M).Value & "+ (2 x" & Sheets("OF" ).Range("I" & M).Value & " )" )
                        .Range("I" & Z).Value = Sheets("OF" ).Range("F" & M).Value
                        .Range("J" & Z).Value = Sheets("OF" ).Range("O" & M).Value * .Range("d" & Z).Value
                        .Range("K" & Z).Value = .Range("e" & Z).Value - .Range("J" & Z).Value
                        .Range("L" & Z).Value = IIf(IsNull(.Range("D" & Z).Value) Or Empty, Sheets("OF" ).Range("M" & M).Value, _
                          Sheets("OF" ).Range("M" & M).Value * .Range("D" & Z).Value)
                        .Range("M" & Z).Value = IIf(IsNull(.Range("D" & Z).Value) Or Empty, Sheets("OF" ).Range("N" & M).Value, _
                          Sheets("OF" ).Range("N" & M).Value * .Range("D" & Z).Value)
                    End If
                Next M :??:  :??:  
            Next Z
        End With
End Sub

Reply

Marsh Posté le 07-05-2004 à 20:02:28   

Reply

Marsh Posté le 08-05-2004 à 13:03:49    

blego a écrit :

Bonjour, J'ai un gros problème
En effet mon code ci-après est très lent car il doit manipuler des données sur deux feuilles  sur environ 35 000 lignes et c'est là que ça coince. Mon code met au moins 30min pour s'exécuter.
Merci d'avance pour votre aide
Lire le code en question :
Sub MAJ_Saisie()
    Dim Z, M, DerLi, Loqp As Double
    DerLi = Sheets("OF" ).Cells.Find("*", , , , xlByRows, xlPrevious).Row
        With Sheets("Saisie Sacherie" )
        Loqp = .Cells.Find("*", , , , xlByRows, xlPrevious).Row
            For Z = 3 To Loqp
                For M = 3 To DerLi
                     If .Range("C" & Z).Value = Sheets("OF" ).Range("B" & M).Value Then
                        .Range("F" & Z).Value = Sheets("OF" ).Range("C" & M).Value
                        .Range("G" & Z).Value = Sheets("OF" ).Range("L" & M).Value
                        .Range("H" & Z).Value = IIf(Sheets("OF" ).Range("I" & M).Value = 0, _
                         Sheets("OF" ).Range("E" & M).Value, _
                           Sheets("OF" ).Range("E" & M).Value & "+ (2 x" & Sheets("OF" ).Range("I" & M).Value & " )" )
                        .Range("I" & Z).Value = Sheets("OF" ).Range("F" & M).Value
                        .Range("J" & Z).Value = Sheets("OF" ).Range("O" & M).Value * .Range("d" & Z).Value
                        .Range("K" & Z).Value = .Range("e" & Z).Value - .Range("J" & Z).Value
                        .Range("L" & Z).Value = IIf(IsNull(.Range("D" & Z).Value) Or Empty, Sheets("OF" ).Range("M" & M).Value, _
                          Sheets("OF" ).Range("M" & M).Value * .Range("D" & Z).Value)
                        .Range("M" & Z).Value = IIf(IsNull(.Range("D" & Z).Value) Or Empty, Sheets("OF" ).Range("N" & M).Value, _
                          Sheets("OF" ).Range("N" & M).Value * .Range("D" & Z).Value)
                    End If
                Next M :??:  :??:  
            Next Z
        End With
End Sub


 
 
Tu ne peux pas l'ecrire directement ds tes feuilles excel ?

Reply

Marsh Posté le 08-05-2004 à 16:40:35    

Bien sûr je l'ai écrit dans un module.
a ton avis que devrais-je faire?
merci tout de même pour ta réaction

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed