DIMINUER LE TEMPS D'EXECUTION

cs_dior2009 Messages postés 14 Date d'inscription vendredi 16 janvier 2009 Statut Membre Dernière intervention 2 janvier 2015 - 20 juil. 2012 à 14:46
jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 - 20 juil. 2012 à 17:57
BONJOUR,

POUVEZ-VOUS M AIDER A REDUIRE LE TEMPS D'EX2CUTION DE CE MACRO.

MERCI D'AVANCE.

Sub remplirfeuille()

Dim Lst() As String
Dim j As Integer
Dim I As Integer
Dim N As Variant 'Integer
Dim l As Integer
Dim p As Integer
Dim temp1 As String
ReDim Lst(Sheets.Count - 1)
Dim debut As Date, temps As Date, fin As Date
debut = Time


Application.ScreenUpdating = False
Application.DisplayAlerts = False

N = Sheets("donnees").Range("A1").End(xlDown).Row

For I = 1 To Worksheets.Count
Lst(I) = Worksheets(I).Name
temp1 = Lst(I)

For j = 2 To N
If (Sheets("donnees").Cells(j, 1).Value = temp1) Then
For p = 5 To 306
If (Sheets(I).Cells(p, 1).Value = Sheets("donnees").Cells(j, 4).Value) Then
Sheets(I).Cells(p, 3).Value = -Sheets("donnees").Cells(j, 6).Value
ElseIf (Sheets(I).Cells(p, 6).Value = Sheets("donnees").Cells(j, 4).Value) Then
Sheets(I).Cells(p, 4).Value = Sheets("donnees").Cells(j, 6).Value
End If
Next p
End If
Next j
Next I
fin = Time
temps = fin - debut
MsgBox ("C'est fini !" & Chr(10) & "temps de traitement " & temps)

End Sub

1 réponse

jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 344
20 juil. 2012 à 17:57
Bonjour,

Lorsque tu postes du code sur le forum...utilises les balises de code (3° icone en partant de la droite ).
Merci.

Donnes nous aussi une explication sur le code.. a quoi sert-il ?

Bien que nous puissions le découvrir en lisant le code...il sertait bien que nous n'ayions pas cette démarche à réaliser.

En ce qui concerne le temps d'execution de ton code ( en gardant sa structure actuelle) je ne suis pas sur que tu puisse vraiement l'améliorer.

A la rigueur tu pourrais passer par des "collections" plutot que des for I=1 to .. (pour parcourir tes feuilles)
Sub test()
    Dim FEUILLE As Worksheet
    For Each FEUILLE In ThisWorkbook.Worksheets
        Debug.Print FEUILLE.Name
    Next
End Sub 


Ensuite, plutot que de parcourir tes lignes à la recherche des valeurs identique à ton "temp1", tu pourrais éventuellement utiliser des fonctions "FIND" -- recherche 'VBA findall' sur internet.
Plutot que d'utiliser de IF/elseIf.. perso j'utiliserai du Select Case. (pas sur que ce soit plus rapide par contre )

Enfin voila quelques pistes .. ne serait-ce que pour amliorer la structure de ton code.



Cordialement,
Jordane,
______________________________________________________
Règles du forum à lire avant de poster une question : ICI
0
Rejoignez-nous