Bonjour,
j'ai un fichier qui me sert à réaliser des calculs.
Pour ce faire j'ai en premier lieu une feuille "base de données" qui contient un tableau (mode tableau) du même nom.
Je rentre l'ensemble de mes données (lignes les unes en dessous des autres) ce qui a pour effet de redimensionner mon tableau.
Ensuite je lance une macro afin que les autres tableaux (dans des feuilles différentes) se mettent à jour du même nombre de lignes avec tout ou partie des renseignements contenus dans les lignes.
Les calculs peuvent alors s'opérer.
Tout fonctionne correctement en injectant plus de 100 000 lignes mais:
- le temps de traitement est long
- parfois impossible de réouvrir le fichier si on le ferme (config : win7pro 64 et excel 2016 64 , 16 go ram et un i5)
cela me contraint à faire des copier coller valeur sur une autre feuille.
Par ailleurs je désactive aussi le calcul automatique du classeur que je ne lance en manuel qu'après mais ça n'a pas beaucoup d'effet.
Ma demande:
je souhaiterai savoir si la durée du traitement est lié à "l'architecture" de la macro et comme je ne suis pas spécialiste bien qu'elle fonctionne, peut-être qu'une optimisation est possible ?
je vous joins le code pour avoir vos avis, merci
j'ai un fichier qui me sert à réaliser des calculs.
Pour ce faire j'ai en premier lieu une feuille "base de données" qui contient un tableau (mode tableau) du même nom.
Je rentre l'ensemble de mes données (lignes les unes en dessous des autres) ce qui a pour effet de redimensionner mon tableau.
Ensuite je lance une macro afin que les autres tableaux (dans des feuilles différentes) se mettent à jour du même nombre de lignes avec tout ou partie des renseignements contenus dans les lignes.
Les calculs peuvent alors s'opérer.
Tout fonctionne correctement en injectant plus de 100 000 lignes mais:
- le temps de traitement est long
- parfois impossible de réouvrir le fichier si on le ferme (config : win7pro 64 et excel 2016 64 , 16 go ram et un i5)
cela me contraint à faire des copier coller valeur sur une autre feuille.
Par ailleurs je désactive aussi le calcul automatique du classeur que je ne lance en manuel qu'après mais ça n'a pas beaucoup d'effet.
Ma demande:
je souhaiterai savoir si la durée du traitement est lié à "l'architecture" de la macro et comme je ne suis pas spécialiste bien qu'elle fonctionne, peut-être qu'une optimisation est possible ?
je vous joins le code pour avoir vos avis, merci
Code:
Private Sub BoutonMàJDonnées_Click()
Application.ScreenUpdating = False
Dim NbLignes As Long
'Entrée manuelle du nouveau nombre de lignes que doit posséder l'onglet "Base de données"
NbLignes = Application.InputBox(prompt:="Entrez le nombre de N.", Type:=1)
If NbLignes > 0 Then
NbLignes = NbLignes + 3
'Mise à jour du nombre de lignes du tableau de l'onglet "Base de données"
Sheets("Base de données").Select
ActiveSheet.ListObjects("TableauBASEDEDONNEES").Resize Range(Cells(3, 1), Cells(NbLignes, 26))
'Mise à jour du nombre de lignes du tableau de l'onglet "M_Seg"
Sheets("M_Seg").Select
ActiveSheet.ListObjects("TableauMSEG").Resize Range(Cells(3, 1), Cells(NbLignes, 15))
'Mise à jour du nombre de lignes du tableau de l'onglet "M_Pré"
Sheets("M_Pré").Select
ActiveSheet.ListObjects("TableauMPRE").Resize Range(Cells(3, 1), Cells(NbLignes, 34))
'Mise à jour du nombre de lignes du tableau de l'onglet "M_Séc"
Sheets("M_Séc").Select
ActiveSheet.ListObjects("TableauMSEC").Resize Range(Cells(3, 1), Cells(NbLignes, 14))
'Mise à jour du nombre de lignes du tableau de l'onglet "M_Pla"
Sheets("M_Pla").Select
ActiveSheet.ListObjects("TableauMPLA").Resize Range(Cells(3, 1), Cells(NbLignes, 65))