Comment récupérer certaines lignes d'un tableau structuré en VBA
Bonjour
Je viens de lire cette discussion qui est des plus enrichissante pour mon apprentissage.
J'ai bien compris, en tout cas "saisie" le principe pour récupérer le numéro d'une ligne, mais est il possible de récupérer tous les numéros de lignes trouvés,
si oui, quelle fonction utiliser. Je vais aller me renseigner par la suite avec les informations que vous me donnerez.
Bien à vous.
Un grand merci pour cette explication.
Je fais une présentation anonyme de ce que je souhaite réaliser et je la poste.
Merci à toi.
3 pièce(s) jointe(s)
Pour cette agrégation, quelle fonction utiliser? Pas de ligne de code, pour l'instant un nom et j'étudierai
Je n'ai pas Power query au travail, alors je vais travailler en vba.
Je vais faire des représentations des tableaux à utiliser car je n'ai pas le droit de mettre les données en lignes. Les tableaux feront au minimum 50.000 lignes.
Voici les trois TS sources :
Pièce jointe 582964
Pièce jointe 582965
Le but final est d’avoir toutes les données dans un seul tableau, il y a deux étapes qui peuvent être faites en même temps, ou l’une après l’autre. Vous me conseillerez sur le temps gagné ou perdu dans les deux cas.
Pour l’explication j’ai créé un tableau nommé « tableau explicatif » qui n’est pas un TS mais qui sera traité bien entendu en TS dans la programmation. L'explication en elle même est ensuite.
Pièce jointe 582966
Première étape : Aller chercher dans t_data3[REFERENCE3] la correspondance de t_data1[NOMINATION] ligne par ligne et remplacer cette cellule par la cellule de t_data3[FOURNISSEUR] de la ligne trouvée. Je pense le faire avec la fonction MATCH, étudier un peu mieux cette fonction avec les précisions sur le nombre d’opération lorsque Match est utilisé avec son aspect Dichotomique.
Seconde étape : le tableau t_data2 sera toujours plus petit que t_data1, je vais donc prendre t_data2 pour référence, et en particulier la paire : t_data2[CODE1] et t_data2[CODE2] de chaque ligne.
Je vais tenter de trouver cette paire dans les paires t_data1[CODE3] ; t_data1[CODE4].
Trois possibilités :
- Rien n’est trouvé. On supprime la ligne de t_data2 (ligne en bleu dans « tableau explicatif » que j'ai laissée pour l'explication)
- Une correspondance est trouvée : on copie la ligne correspondante de t_data1 à la suite de la ligne de t_data2.
- Plusieurs lignes sont trouvées : on copie la ligne correspondante de t_data1 à la suite de la ligne de t_data2. Puis on repousse la ligne de t_data2 à la ligne inférieur et on colle à la suite la ligne trouvée de t_data1. (cf les lignes jaune dans le « tableau explicatif »).Et ainsi de suite tant qu’il y a des correspondances.
Pour ce faire, Et vu que je ne connais pas beaucoup de fonction, je pourrai utiliser la fonction Match avec l’option 1 ou -1 ce qui me ferait donc des opérations par dichotomie.
Je trouve donc une première ligne que je recopie. Je répète cette action, non pas sur tout l’ensemble du TS mais de la ligne trouvée +1 à la fin du tableau. Et cela tant que le résultat est égal à la paire de référence.
Que pensez vous de cette technique, qui va certainement vous paraitre barbare…..
Vers quelle fonction pourriez vous me guider pour réaliser cette recherche ?
Ensuite j’éliminerai les colonnes t_data1[CODE3] et t_data1[code4]. Pour éviter les colonnes doublons.
Je pense que je serais gagnant de coller des lignes et ensuite d’éliminer des colonnes au lieu de faire cellule par cellule à recopier.
Cela fait plus d'informations traitées, mais cela doit être significatif en temps. Du moins je l'espère. ;-)
Qu’en pensez vous ?
Une autre question que je me pose est : faut il créer un tableau t_final ou bien modifier t_data2 directement sachant que j'ai une source de t_data2 qui restera intacte car dans un autre fichier.
En tout cas, un grand merci d'avance pour toutes vos réponses.
Premier pas dans Power Query.
Merci doublement Pierre;
En premier lieu d'avoir rapatrié cette conversation dans cette file, et dans un second, d'avoir pris le temps de m'expliquer.
je vais faire mes premiers pas, mais en lisant ta publication, je pense que je n'ai pas bien exprimé mon intention car je ne crois pas que ton message réponde, ce qui veut dire que j'ai mal posé ma question.
Je reviens très vite, après un peu de pratique avec Power Query.
Merci