DIMINUER LE TEMPS D'EXECUTION

Signaler
Messages postés
15
Date d'inscription
vendredi 16 janvier 2009
Statut
Membre
Dernière intervention
2 janvier 2015
-
Messages postés
33016
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 juin 2021
-
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

Messages postés
33016
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 juin 2021
351
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