XL 2016 Synthétiser tableau de données

YOUYOU25

XLDnaute Junior
Bonsoir à tous,

Je reviens vers vous car je n'arrive pas à trouver la solution pour augmenter la rapidité d'exécution d'une macro (macro 5 du fichier en PJ) pour synthétiser des données à partir d'un tableau exporté en Feuil 1 pour ma part suffisamment complexe (pas encore assez d'expérience). Pouvez-vous svp me proposer une solution ou peut-êtrebune autre approche mais en conclusion cette macro fonctionne bien mais est trop lente, dans la PJ je n'ai mis que quelques lignes mais en en réalité j'ai environ 100 lignes à traiter. Je viens donc voir les pros. (bouton macro en E1-Feuil1 rectangle bleu).

Merci d'avance à vs pour votre aide.

Bonne soirée
 

Pièces jointes

  • PREVI 2024 EXPORT 26.xlsm
    548.7 KB · Affichages: 7

Dranreb

XLDnaute Barbatruc
Bonsoir.
Chargez toute votre plage de données dans un tableau dynamique d'entrée en une seule instruction,
dimensionnez un autre tableau dynamique de sortie,
versez les éléments du tableau d'entrée dans ceux du tableau de sortie,
enfin affectez tout votre tableau de sortie à la Value de votre plage destinatrice.
Vous verrez, ça sera devenu extrêmement rapide …
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonsoir Youyou, Dranreb,
Un truc moins rapide que la solution de Dranreb, mais qui ne requiert presqu'aucune modif, ajoutez la ligne "Application.ScreenUpdating = False" juste après vos deux sub :
VB:
Sub ExporterCommentairesAvecEtoileRouge()
    Application.ScreenUpdating = False
    ...
    
et

Sub RegrouperSemaines()
    Application.ScreenUpdating = False
    ...
Sur mon vieux PC je passe de 1.81s à 0.59s soit plus de 3 fois plus rapide.
Si c'est encore trop lent, voir post ci dessus. 🤣
 

YOUYOU25

XLDnaute Junior
Bonsoir Dranreb, sylvanu,

Merci à ts les 2 pour votre réactivité. J'ai fais des essais avec Application.ScreenUpdating = False et avec 63 lignes je suis presque à 2 mn (beaucoup trop long) et j'avoue ne pas tout avoir compris votre message Dranreb car je ne suis pas suffisamment caler, mais si vous pouviez m'éclaircir un peu plus ce serait super.

Encore merci à vs deux
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
avec 63 lignes je suis presque à 2 mn
Avec 17 lignes dans le pire des cas je suis à moins de 2 secondes.
Mais votre fichier est vraiment complexe, en PN6 j'ai compté 57 MFC, et 112 pour DO6, et ce sur 135 colonnes.
Votre fichier ramera de toute façon, il sera peut être plus rapide mais ramera.
Avec 120 lignes et sans MFC j'en suis à 5s. Votre problème est surtout à ce niveau. :)
 

Dranreb

XLDnaute Barbatruc
Il faut accéder le moins souvent possible aux plages de cellules car c'est pénalisant.
Donc qu'est-ce que vous voulez savoir ?
Pour déclarer un tableau dynamique appelé TDon : Dim TDon()
Pour le charger d'après les valeurs d'une plage: TDon = ExpressionRange.Value
Pour en redimensionner un : Redim TRésu(1 To NbLignes, 1 To NbColonnes)
Pour transférer un élément : TRésu(LR, CR) = TDon(LD, CD)
Pour le décharger dans un plage : ExpressionRange.Value = TRésu
 

Discussions similaires

Statistiques des forums

Discussions
314 730
Messages
2 112 275
Membres
111 486
dernier inscrit
fanchon30