Problème de durée de copie de données dans un tableau Excel

Bonjour à tous,

J'ai réalisé une macro qui copie des données d'une feuille et qui les copie dans un tableau excel se trouvant sur une autre feuille.

Le problème se situe dans l'ajout des données dans le tableau. Je pense que le tableau se redimensionne à chaque fois que la macro copie une donnée dans une cellule. Du coups, le temps d'éxécution est déraisonnable. Je suis presque sûre de ce que j'avance puisse que j'ai essayé de copier les mêmes données sur une feuille vierge (sans tableau excel) et là la macro s'exécute en quelques secondes.

Ma question est la suivante: comment faire pour copier une quantité importante de données dans un tableau excel sans que cela prenne une éternité? Y a-t-il une astuce? Est-il possible d'empêcher la tableau excel de se redimensionner durant l'exécution de la macro?

Merci à vous et bonne journée à tous.

mets au debut de ta macro juste en dessous de ton sub:

application.calculation =xlCalculationManual 
application.screenupdating = false

Et en fin de macro, juste en dessus de ton end sub:

application.calculation = xlCalculationAutomatic
application.screenupdating = true

Apparemment, application.calculation =xlCalculationManual n'a pas d'effet sur les tableaux. Du moins c'est ce que j'en déduis suite à mes essais. Le problème reste le même.

Voici mon code:

Sub UnionBis()

Application.Calculation = xlCalculationManual

Application.ScreenUpdating = False

If Sheets("SSRS_SL1104").Cells(2, 1) = Empty Then

If MsgBox("Please fill in the SSRS_SL1104 table!", vbCritical + vbOKOnly, "Data update missing!") = vbOK Then

Exit Sub

End If

End If

m = 7

l = 36

x = 1

u = 1

'-------------------------------------------

LineCount.SSRS_SL1104_lineCount

ReDim TAB_SL1104(1 To Last_SSRS_SL1104 + 1, 1 To 36)

'Saving of the content of SSRS_SL1104's columns in TAB_SL1104

'Indicate the number and the order of the column selected in Backlog Table to be screen in TAB_SL1104

For Col_Sheets = 1 To 35

'Loop to save the content of each column

If k = 0 Then

k = 1

Else: k = k + 1

End If

Col_TAB = k

'Use of a function.

Saving.SavingSheetsInTAB_SL1104

Next

For i = 1 To UBound(TAB_SL1104, 1)

TAB_SL1104(i, 36) = "CRM"

Next

Col_TAB = Empty

'----------------------------------------------

LineCount.SalesDetails_lineCount

Screening.Screening_TAB_SL1401_Bis

'---------------------------------------------

Erase TAB_SL1104

i = 0

j = 0

k = 0

Sheets("SSRS_SL1104").Select

Range("Table1").Select

Selection.ClearContents

Application.Calculation = xlCalculationAutomatic

Application.ScreenUpdating = True

End Sub

Je ne comprends pas ton code...

Combien de temps dure ta macro.

Que fait Saving.SavingSheetsInTAB_SL1104

Que fait LineCount.SalesDetails_lineCount

Que fait Screening.Screening_TAB_SL1401_Bis

Essaie de commenter chacune des lignes et executer ta macro.. Tu veras ce qui prend du temps

As tu des macros évenementielles dans ton classeur ?

Des connexions externes ?

Il n'y a pas de connexions externes ni de macro événementielle.

Le code ci-dessus fait référence à des modules dont le module Screening. dans lequel se trouve la fonction qui pose problème.

Voici le code la fonction Screening_TAB_SL1401_Bis:

Function Screening_TAB_SL1401_Bis()

For j = 1 To 36

For i = 1 To UBound(TAB_SL1104, 1)

Sheets("SalesDetails").Cells(i + Last_SalesDetails, j) = TAB_SL1104(i, j)

Next

Next

End Function

Last_SalesDetails est une variable qui correspond au nombre de ligne de mon tableau.

C'est cette boucle qui prend un temps dingue. Je l'ai testée sur une feuille vierge (sans tableau excel) et ca fonctionne très bien. Donc je suis sûre que mon code ne comporte aucune erreur.

Tu fais des boucles inutiles pour remplir ta feuille...

Pour mettre un range dans un tableau :

Tblo = .Range("A1:D" & Cells(Rows.Count, 1).End(xlUp).Row).Value

Pour mettre un tableau dans un range:

Range("A1").Resize(UBound(Tblo, 1), UBound(Tblo, 2)).Value = Tblo

Super merci pour ces infos!!! J'adore apprendre des trucs qui me résumé 10 lignes de code en une seule

Voici mon fichier en pièce jointe. Est-ce que la raison de la lenteur peut être, malgré l'instruction "Application.Calculation = xlCalculationManual", que la quantité d'information traitée est trop grande (930 lignes sur 30 colonnes)?

Merci encore

930*30*36*2 opérations c'est beaucoip si tu le fais en boucle.. si tu le fais en tableaux ça ira vite

Ok j'ai essayé avec les astuces et ca fonctionne super bien.

Un tout grand merci pour ton aide

Rechercher des sujets similaires à "probleme duree copie donnees tableau"