Bonjour,
Je me permets de vous solliciter sur l'usage des dictionnaires.
Je finis par tout penser en dictionnaire car cela me facilite énormément la tâche et évite des ralentissements exponentielles dés qu'une taille est atteinte et d'éviter d'avoir des doubles boucles for ou plus inutiles.
La question que je me pose est la suivante : comment optimiser au mieux (au plus vite) le chargement en mémoire d'un dictionnaire sur la base de cellules d'un fichier excel ?
Pour info il y a en pièce jointe un fichier Excel à ce sujet mettant en évidence au final que la procédure "LoadindDataM1" est plus rapide que "LoadindDataM2" car à priori l'evaluation s'effectue sur une plage de la cellule et non cellule par cellule. Est-ce bien interpreté de ma part ?
Par contre je constate le chargement à la chaîne par la ligne "TableauxTMP = Range("A1:A100000").Value" est beaucoup beaucoup plus rapide que d'effectuer un chargement en dictionaire élement par élément (via ".Add")
La question que je me pose : est-il possible d'effectuer un chargement de dictionnaire "presque à la même vitesse" que le chargement d'un tableau sur la base d'une plage de cellules ?
En effet on peut tranférer tres rapidement de Dico à Dico via "Set" à priori. En fait je cherche une astuce qui me permettrait d'effectuer un ".Add" sur une plage de cellule et non de réaliser une boucle "élément par élément" chargeant les données.
En regardant de prêt je constate qu'au niveau de l'écriture (et non chargement en mémoire) il est possible de "pluger" le contenu total du dico en jouant avec ".Items" ("Transpose" eventuellement) et un Range de cellule.
Auriez-vous une petite idée à ce sujet ?
En pièce jointe j'ai fait exprès de raccourcir la taille du fichier et ne traiter que 10 000 lignes (limitation de la taille du fichier) mais histoire de constater la différence, il est mieux d'entendre l'étude à 100 000 lignes en générant par formules puis en figeant les données et étendant en VBA l'étude à 100 000 lignes.
Désolé de la gêne occasionnée.
Merci d'avance,
Cordialement.
ElGringo123456
Je me permets de vous solliciter sur l'usage des dictionnaires.
Je finis par tout penser en dictionnaire car cela me facilite énormément la tâche et évite des ralentissements exponentielles dés qu'une taille est atteinte et d'éviter d'avoir des doubles boucles for ou plus inutiles.
La question que je me pose est la suivante : comment optimiser au mieux (au plus vite) le chargement en mémoire d'un dictionnaire sur la base de cellules d'un fichier excel ?
Pour info il y a en pièce jointe un fichier Excel à ce sujet mettant en évidence au final que la procédure "LoadindDataM1" est plus rapide que "LoadindDataM2" car à priori l'evaluation s'effectue sur une plage de la cellule et non cellule par cellule. Est-ce bien interpreté de ma part ?
Par contre je constate le chargement à la chaîne par la ligne "TableauxTMP = Range("A1:A100000").Value" est beaucoup beaucoup plus rapide que d'effectuer un chargement en dictionaire élement par élément (via ".Add")
La question que je me pose : est-il possible d'effectuer un chargement de dictionnaire "presque à la même vitesse" que le chargement d'un tableau sur la base d'une plage de cellules ?
En effet on peut tranférer tres rapidement de Dico à Dico via "Set" à priori. En fait je cherche une astuce qui me permettrait d'effectuer un ".Add" sur une plage de cellule et non de réaliser une boucle "élément par élément" chargeant les données.
En regardant de prêt je constate qu'au niveau de l'écriture (et non chargement en mémoire) il est possible de "pluger" le contenu total du dico en jouant avec ".Items" ("Transpose" eventuellement) et un Range de cellule.
Auriez-vous une petite idée à ce sujet ?
En pièce jointe j'ai fait exprès de raccourcir la taille du fichier et ne traiter que 10 000 lignes (limitation de la taille du fichier) mais histoire de constater la différence, il est mieux d'entendre l'étude à 100 000 lignes en générant par formules puis en figeant les données et étendant en VBA l'étude à 100 000 lignes.
Désolé de la gêne occasionnée.
Merci d'avance,
Cordialement.
ElGringo123456