1 pièce(s) jointe(s)
Ecriture multiple dans cellule
Bonjour, je cherche à optimiser un code qui me prends près d'une heure à exécuter
Il s'agit de multiples boucles dans lesquels s'effectuent des calculs.
J'ai identifié le bout de code qui me posait problème : L'écriture du résultat de la macro dans les cellules. Voici bout de code modifié pour le besoins :
Voici le fichier d'exemple : Pièce jointe 143877
Et voici le code, si cela est suffisant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| Sub EcriredansCell()
Dim TablEssai
Dim i As Integer, j As Integer
Dim sw As StopWatch
Set sw = New StopWatch
sw.StartTimer
For i = 1 To 50
TablEssai = Array(Int((20 * Rnd) + 1), Int((40 * Rnd) + 1), Int((60 * Rnd) + 1), Int((80 * Rnd) + 1), Int((100 * Rnd) + 1))
For j = LBound(TablEssai) To UBound(TablEssai)
Range("A1").Offset(i, j).Value = TablEssai(j)
Next j
Next i
Debug.Print "Ce code s'exécute en : " & sw.EndTimer & "milliseconds"
End Sub |
Pour mesurer la durée d'exécution : il faut 50 millisecondes au code pour s'exécuter.
Le problème, c'est que mon tableau fait 2000 lignes et 60 colonnes, avec des formules, etc, et il lui faut, pour cet exemple de 50 lignes : 42 secondes... Et même en utilisant le fichier d'exemple, lorsque le fichier original (9Mo) est ouvert, cela prends 42 secondes. Je pense donc que c'est un problème de ressource PC.
Le fichier original contiens des données confidentielles que je ne peux pas partager, mais je cherche un moyen d'écrire moins souvent dans les cases, peut-être en copiant les données lignes par ligne (5 à la fois) ? Cependant, je ne connais pas le code...
PS : Je précise que
Code:
Application.ScreenUpdate = False
ne modifie pas la durée d'exécution.
Merci de votre aide.
Korleone.