Optimisation execution code tableau

  • Initiateur de la discussion Initiateur de la discussion anber
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

anber

XLDnaute Occasionnel
Bonjour le Forum,

Peut-on faire mieux en temps d'exécution en améliorant ce code ?
j'ai plus de 50000 lignes à traiter, l'exécution du code ci-dessous est très longue

Sub ReportDonnees()
Dim tabRef() As String
Dim i As Integer, j As Integer
Dim Lig1 As Integer, Lig2 As Integer, N As Integer

Application.ScreenUpdating = False
With Sheets("analyse")
Lig1 = .Range("A65536").End(xlUp).Row + 1
.Range("A2:I" & Lig1).ClearContents
End With

With Sheets("import")
Lig2 = .Range("A65536").End(xlUp).Row
ReDim tabRef(Lig2, 7)
For i = 1 To Lig2 - 1
tabRef(i, 1) = CStr(.Cells(i + 1, 3))
tabRef(i, 2) = CStr(.Cells(i + 1, 4))
tabRef(i, 3) = CStr(.Cells(i + 1, 5))
tabRef(i, 4) = CStr(.Cells(i + 1, 7))
tabRef(i, 5) = CStr(.Cells(i + 1, 8))
tabRef(i, 6) = CStr(.Cells(i + 1, 9))
tabRef(i, 7) = CStr(.Cells(i + 1, 10))
Next i
End With

With Sheets("analyse")
For i = 1 To Lig2 - 1
If Application.CountIf(Range(.Cells(2, 1), .Cells(Lig2, 1)), tabRef(i, 1)) = 0 Then
.Cells(i + 1 - N, 1) = tabRef(i, 1)
.Cells(i + 1 - N, 2) = tabRef(i, 2)
.Cells(i + 1 - N, 3).Value = CDbl(tabRef(i, 3))
.Cells(i + 1 - N, 4).Value = CDbl(tabRef(i, 4))
.Cells(i + 1 - N, 5) = tabRef(i, 5)
.Cells(i + 1 - N, 6) = tabRef(i, 6)
.Cells(i + 1 - N, 7) = tabRef(i, 7)
Else
For j = 2 To i
If .Cells(j, 1) = tabRef(i, 1) Then
.Cells(j, 3) = CDbl(.Cells(j, 3)) + CDbl(tabRef(i, 3))
.Cells(j, 4) = CDbl(.Cells(j, 4)) + CDbl(tabRef(i, 4))
N = N + 1
End If
Next j
End If
Next i
End With

Application.ScreenUpdating = True
End Sub
 
Re : Optimisation execution code tableau

Bonjour Anber,

fais une essai avec ceci: les ...... représentent les lignes de code montrées ci-dessus
Code:
Sub ReportDonnees()
Application.Calculation = xlCalculationManual
.............................................
.............................................
.............................................
Application.Calculation = xlCalculationAutomatic
End Sub
à+
Philippe
 
Re : Optimisation execution code tableau

Bonjour.
En déclarant: tabRef() As Variant
Vous pouvez faire
VB:
With WorkSheets("import"): TabRef = .Range("C2:I" & .[A65536].End(xlUp).Row).Value: End With
Le chargement serait quasi instantané.
Ce transfert marche aussi dans l'autre sens. Alors remaniez le tableau à renvoyer dans d'autres cellules et décharger le aussi en entier. Le temps d'exécution est en gros proportionnel au nombre de fois qu'est utilisé Cells ou Range, que ce soit pour une seule cellule ou pour des milliers. Donc puisqu'il n'y aura plus que 2 Range, un pour l'entrée et lautre pour la sortie, le temps d'exécution sera à peu près divisé par la moitié du nombre de lignes.
Cordialement.
 
Dernière édition:
Re : Optimisation execution code tableau

La propriété Value d'une plage de plusieurs cellules est un tableau de Variant à 2 dimensions. Est-ce plus évident comme ça ? Il le faudrait si vous tenez à gagner du temps, parce que les méthodes Range et Cells sont très pénalisantes. Parce que le transfert de l'information n'est qu'une infime partie du traitement exécuté. Tous le reste se passe à repérer le classeur impliqué, la feuille, la localisation en mémoire de la plage. Et tout ça est effectué à chaque fois, aussi bien pour une seul cellule que pour des milliers d'un coup.
À +
 
Dernière édition:
Re : Optimisation execution code tableau

Comme tu l'a fait: tabRef(Ligne, Colonne)
Ligne et colonne commencent à 1
Ubound(TabRef, 1) permet de connaitre le nombre de lignes et
Ubound(TabRef, 2) le nombre de colonnes.
Pas besoin de Redim avant d'y affecter une Value de plage: il est automatiquement redimensionné conformément au nombre de lignes et de colonnes de la plage.
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
910
Réponses
15
Affichages
784
Réponses
4
Affichages
281
Réponses
8
Affichages
780
Réponses
4
Affichages
732
Retour