Récupération donnée d'un grand fichier

Bonjour à tous,

J'ai un fichier avec une centaine de colonnes et plusieurs dizaines de milliers de lignes, et je souhaite récupérer simplement certaines colonnes, avec des conditions.

J'ai fait le code suivant :

Sub Tri()

Application.ScreenUpdating = False
val1 = 2
val2 = 2
val3 = 2
ligne = 2

For ligne = 2 To Range("A" & Rows.Count).End(xlUp).Row
'ou bien Do While ligne < Range("A" & Rows.Count).End(xlUp).Row

    If Worksheets(1).Cells(ligne, 41) Like "Valeur 1" Then

        Worksheets(2).Cells(val1, 2) = Worksheets(1).Cells(ligne, 45)
        Worksheets(2).Cells(val1, 3) = Worksheets(1).Cells(ligne, 32)
        Worksheets(2).Cells(val1, 7) = Worksheets(1).Cells(ligne, 81)
        Worksheets(2).Cells(val1, 8) = Worksheets(1).Cells(ligne, 82)
        Worksheets(2).Cells(val1, 9) = Worksheets(1).Cells(ligne, 83)
        val1 = val1 + 1

    ElseIf Worksheets(1).Cells(ligne, 41) Like "Valeur 2" Then

        Worksheets(4).Cells(val2, 2) = Worksheets(1).Cells(ligne, 45)
        Worksheets(4).Cells(val2, 3) = Worksheets(1).Cells(ligne, 32)
        Worksheets(4).Cells(val2, 7) = Worksheets(1).Cells(ligne, 81)
        Worksheets(4).Cells(val2, 8) = Worksheets(1).Cells(ligne, 82)
        Worksheets(4).Cells(val2, 9) = Worksheets(1).Cells(ligne, 83)
        val2 = val2 + 1

    ElseIf Worksheets(1).Cells(ligne, 41) Like "Valeur 3" Then

        Worksheets(6).Cells(val3, 2) = Worksheets(1).Cells(ligne, 45)
        Worksheets(6).Cells(val3, 3) = Worksheets(1).Cells(ligne, 32)
        Worksheets(6).Cells(val3, 7) = Worksheets(1).Cells(ligne, 81)
        Worksheets(6).Cells(val3, 8) = Worksheets(1).Cells(ligne, 82)
        Worksheets(6).Cells(val3, 9) = Worksheets(1).Cells(ligne, 83)
        val3 = val3 + 1

    End If

    ligne = ligne + 1
Next
'ou Loop

End Sub

Ce code rempli parfaitement sa fonction, en copiant les colonnes qui m'intéressent sur différentes feuilles, par contre il est très lent lorsque le nombre de ligne est important (Sachant que je n'ai pas terminé le tri, j'aurai d'autres colonnes à récupérer, ce qui ralentira encore plus le code...).

Ma question est donc : Existe t'il un moyen ou des fonctions pour accélérer le tri ?

Merci d'avance pour votre aide !

Bonjour Alex_br le forum

bah oui il faut utiliser des tableaux virtuels et là tu vas aller au moins 20 fois plus vite

je te ferai en rentrant demain la macro que tu testes

a+

papou

Bonjour paritec !

Merci pour ta réponse, je ne connaissais pas l'utilisation des tableaux croisés, je les avais déjà croisés lors d'un dernier appel à l'aide, mais je n'avais pas réussi à comprendre leur fonctionnement... J'ai été perdu par les LBound, UBound, ReDim, etc

Si tu arrives à me faire un petit code rapide, pourrais tu mettre quelques commentaires expliquant comment fonctionnent les fonctions utilisées ?

Comme ça je pourrai essayer de le compléter une fois la fonction comprise

Bonne journée,

Alexis

Re bonjour Alex br le forum

est-ce que tu peux me mettre un bout de ton fichier une centaine de lignes STP pour tester mon code une fois terminé et aussi me donner le nom des feuilles car tu as un code avec des index et cela est très mauvais !!! En cas de déplacement de feuille plus rien ne fonctionne

dans l'attente du bout de fichier

je parle de tableaux virtuels et non de tableaux croisés

a+

Papou

Tiens, tu trouveras ci joint un fichier qui peut servir de test (je ne peux pas envoyer le fichier de base, ce sont des informations perso ^^).

La première feuille contient un modèle réduit de ce que je peux trouver, et le but est d'extraire les deux colonnes indiquées sur les feuilles suivantes, en réalisant un tri selon le code (les lignes "Code 1" sur l'onglet Tr1 etc). J'ai déjà fait le tri comme il faudrait le trouver sur la feuille Tr1 !

J'ai essayé de faire un code en utilisant les tableaux virtuels, mais je n'ai pas réussi à faire des liens entre les onglets

Merci encore !

Alexis

EDIT : Autre question aussi qui pourrait simplifier mon fichier, est-il possible d'extraire les colonnes utiles vers un autre fichier ?

J'aurais par exemple un fichier Excel "Extraction", avec les dizaines de milliers de lignes, et en lançant la macro, les quelques colonnes à garder se mettraient sur un autre fichier "Propre", qui contiendrait les feuilles Tr1, Tr2 etc ?

5test-tri.xlsx (21.07 Ko)

Bonjour tout le monde,

je m'incruste un petit essai via tableau vba pour voir la différence de vitesse de traitement.

Bonne journée à tous

9test-tri.xlsm (29.62 Ko)

Merci bigdaddy !

Ça fonctionne super bien et très rapidement, mais j'ai un peu de mal à comprendre le fonctionnement

Est ce que tu aurais le temps pour commenter le rôle de chaque variable, et je devrais pouvoir me débrouiller pour comprendre la logique derrière ?

A plus !

Re,

voilà le code commenté en espérant que ça t'aide.

9test-tri.xlsm (29.08 Ko)

C'est PARFAIT

Merci beaucoup pour ta rapidité de réponse, je suis toujours épaté par la réactivité et les compétences des membres du forum

Bonsoir alex br Grand Daddy 154 le forum,

Bon bah j'arrive après la guerre, mais je bosse alors pas là la journée.

En tout cas maintenant tu as un résultat avec des tableaux et tu as vu la différence!!!

Par contre là tu retournes une seule colonne alors que dans ta demande initiale tu en retournais 5??? il faut savoir ce que tu veux alex !!!!

Bonne soirée a tous

a+

Papou

Bonjour paritec,

Oui ça change tout avec les tableaux, ça devrait bien me servir !

C'est pour ça que je demandais un code expliqué, afin de pouvoir comprendre son fonctionnement et l'adapter ensuite, et pour ça pas besoin de faire 5 colonnes ou plus (j'ai précisé dans mon premier message que j'allais probablement ajouter d'autres colonnes ).

Je préfère comprendre ce que je fais plutôt que de coller bêtement un code sans pouvoir l'adapter en cas de changement ^^

Et grâce au code détaillé de bigdaddy je n'aurai (peut-être ) pas besoin de vous demander si je dois faire d'autres fonctions avec des tableaux...

Bon week-end,

Alexis

Bonjour Alex br le forum

oui tu as raison c'est ce qu'il faut faire, mais aussi quand tu poses un problème, il faut aller jusqu'au bout c'est mieux!!

juste pour que tes interlocuteurs puisse te suivre

le travail avec des tableaux est 100 fois plus rapide et c'est exactement comme le travail sur une feuille sauf que tu ne vois le résultat qu'a la fin.

bon weekend

Papou

Rechercher des sujets similaires à "recuperation donnee grand fichier"