Optimisation d'une Macro de Comparaison

Bonjour,

Je suis amené à manipuler des listes de numéros de téléphone très longues sur excel. J'aimerai mettre en place une macro qui automatise l'extraction des numéros présents dans deux listes qu'on aurait sélectionnées.

Je m'explique, il faudrait que la macro compare deux listes qu'elle nous laisserait définir et qu'a partir des numéros présents dans les deux listes elle créé une nouvelle liste dans une nouvelle colonne ne gardant que les numéros répondant à la critère évoquée ci-dessus.

Pour le moment, j'ai bien réussi à rédiger une telle macro de recherche séquentielle que je vous joint mais mon problème est le suivant:

elle est incapable de tourner lorsque je l’atèle aux longues listes dont je vous parle, ou du moins cela dure beaucoup trop longtemps (plus de 3h avec le message "excel ne répond pas" qui me paralyse pendant tout ce temps). Les listes dont je vous parle font à peu près 5000 lignes.

Je me tourne donc vers vous pour savoir si vous connaissez des moyens de la rendre plus "puissante", ou si vous connaissez d'autres moyens que la recherche séquentielle, par exemple la recherche dichotomique sur laquelle je me suis renseignée mais qui d'après ce que j'ai lu ne convient pas parfaitement au traitement de listes mais plus à celui des tableaux.

Voilà voilà, merci d'avance !

21module6.xlsm (17.96 Ko)

Bonjour,

ta question n'est pas claire (pour moi)...

quels numéros faut il garder ? les n° en commun ou bien les numéros uniques pour l'ensemble des 2 listes ?

où les mettre ?

P.

Bonjour,

Merci de ta réponse rapide.

Je précise oui pardon, il faudrait garder les numéros communs aux deux listes et les mettre dans une nouvelle colonne (pour le moment dans ma macro la nouvelle liste se forme une colonne à droite de la première liste sélectionnée).

Ok...

c'est mieux de savoir que faire

Voilà et très rapide sur 10.000 ou 100.000

P.

29julioben-xlp.xlsm (20.42 Ko)

Super ! Merci beaucoup, c'est nickel !

J'ai juste une dernière question, est-t-il possible de choisir l'emplacement de création de la nouvelle liste ?

Oui ici c'est [J5] ou range("J5"); à toi de choisir

[J5].Resize(D2.Count, 1) = Application.Transpose(D2.Items)

Ca marche merci encore et bonne journée !

Bonjour,

Je reviens vers vous malgré que votre aide ait été précieuse et complète car j'aurai une question supplémentaire.

En effet, la macro que vous m'avez donné marche très bien.

Par contre, si j'essaye de sélectionner dans l'inputbox, de type 8 (lorsqu'il faut sélectionner les listes à comparer), une liste filtrée (avec donc des lignes manquantes car ne correspondant pas au filtre), la macro se trompe et me renvoie de mauvais résultats ou pas assez de résultats. Je n'arrive pas à identifier le problème.

Savez-vous à quoi c'est du ?

Connaissez-vous un moyen de contourner le problème ?

Merci d'avance et bonne journée.

Bonjour,

plus simplement tu peux ajouter une colonne de test et filtrer sur place.

Ou si tu tiens à l'extraction tu peux aussi utiliser les filtres avancés (fichier 2)

eric

12module6.xlsm (16.21 Ko)
15module6-2.xlsm (16.38 Ko)

Bonjour,

non je ne sais pas comment faire...

j'espère que d'autres ici savent

P.

Re,

Patrick, si ma proposition au-dessus de filtrer sur place ou celle des filtres avancés (prévus pour ça) ne conviennent pas tu pourrais tester c.EntireRow.Hidden avant le .add

eric

Okok, merci à vous deux ! Je vais me débrouiller avec ça.

Bonne journée

Rechercher des sujets similaires à "optimisation macro comparaison"