Annuler tri Excel

Signaler
Messages postés
56
Date d'inscription
jeudi 20 octobre 2005
Statut
Membre
Dernière intervention
27 mai 2014
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
Bonjour,

sous VB6 j'ai ouvert un fichier Excel. Une colonne contient des noms. Il peut y avoir des doublons. Je veux proposer dans une ListBox l'ensemble des noms triés, mais bien sûr sans doublons.

De plus, je ne veux pas modifier l'ordre des lignes du fichier déjà trié sur 7 colonnes selon un ordre précis que je veux conserver. Je ne vois actuellement que 3 façons de faire :

1) utiliser la méthode classique du tri Excel en triant sur ma colonne de noms. Charger la ListBox en ne tenant pas compte des doublons. Retrier le fichier selons l'ordre précédent. C'est long.

2) charger un contrôle MSFlexGrid avec les noms de la colonne Excel, puis le trier et enfin éliminer les doublons par la méthode RemoveItem. Ca marche aussi bien mais c'est encore long.

3) copier la colonne dans une feuille auxiliaire, la trier dans cette feuille et alimenter la ListBox en ne tenant pas compte des doublons. C'est déjà plus rapide.

C'est cette dernière méthode que j'utilise actuellement.
Pour éviter de manipuler une feuille auxiliaire, d'utiliser le presse-papier et finalement, de copier la colonne, j'ai bien sûr imaginé de ne trier que la colonne des noms et de charger ma ListBox. J'ai essayé et c'est rapide.

Mais je bute sur le problème que je vous soumets ici.
Sous Excel on a la possibilité d'annuler le dernier tri. C'est parfaitement ce que je veux. MAIS je n'ai pas trouvé la méthode VB6 (ou VBA) pour y parvenir. L'enregistreur de macro n'est d'aucun secours dans ce cas, car au final, il considère tout simplement que le tri n'a jamais eu lieu !!! Existe-t-il donc un moyen sous VB6 pour annuler le tri d'une colonne?

Et puis, après tout, y aurait il une autre méthode, tout aussi simple, pour arriver au résultat souhaité, et à laquelle je n'aurais pas pensé?

Voilu. Voili. Voilou ...

5 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Bonjour,
charge donc ta listbox sans les doublons et dans l'ordre de ta feuille, puis trie ta listbox !


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
56
Date d'inscription
jeudi 20 octobre 2005
Statut
Membre
Dernière intervention
27 mai 2014

Bonjour,
je n'ai peut-être pas été assez précis en indiquant que ma colonne de noms n'était pas triée et qu'il était donc difficile de détecter les doublons, triplons quadriplons, etc ... Pour le moment je charge mes noms dans une table en mémoire. A chaque fois je balaye la table et vérifie l'absence d'un nom pour le stocker. Puis je charge ma listbox que je trie bien évidemment. C'est un peu long mais enfin pour le moment ça marche et je n'ai rien trouvé de mieux pour l'instant. Mais la VRAIE question est : peut on détricoter dans VB6 un tri effectué sur une seule colonne?
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Mais la VRAIE question est : peut on détricoter dans VB6 un tri effectué sur une seule colonne

Intéresse-toi à la méthode Application.Undo
- à lire dans ton aide VBA. Attention : elle annule la toute dernière opération effectuée (et uniquement la toute dernière)
ma colonne de noms n'était pas triée et qu'il était donc difficile de détecter les doublons, triplons quadriplons

Je ne vois pas en quoi cela serait "difficile", sans tri !. A ta place ;
- j'ouvrirais une autre discussion sur ce qu'il convient de faire pour alimenter une listbox sans doublons à partir d'un range. Et sans passer par un tri, tout en le faisant de manière rapide.
- cela m'éviterait l'acrobatie du tri, puis de l'annulation du tri.
Je dis bien une autre discussion car la présente ne concerne, de par son titre et de par ton exposé, que l'annulation d'un tri. Toute réponse autre (alimenter sans doublons) serait dont "perdue" pour tous ceux qui la chercheraient plus tard.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
Messages postés
56
Date d'inscription
jeudi 20 octobre 2005
Statut
Membre
Dernière intervention
27 mai 2014

Bonjour ucfoutu,
je vais voir Application.Undo. Tu penses bien que si je l'avais vu, je n'aurais pas démarré cette discussion. Or je ne l'ai pas vu dans VBA...
Comme je l'ai exposé plus haut, il n'y a jamais qu'une seule méthode pour arriver à ses fins. Et finalement rien n'est vraiment si "difficile". Mais je recherche toujours la meilleure option pour programmer: faire en sorte d'arriver au résultat recherché avec le minimum de ressources, dans le minimum de temps. Sans toutefois perdre de vue qu'on peut de temps en temps faire une légère entorse à ce principe pour rendre le code plus lisible et plus facile à maintenir... Voilà. Pour l'instant c'est détricoter un tri qui m'intéresse et excite ma curiosité: je verrai plus tard si cette option est judicieuse ou non. Mais avant, il faut bien que je sache comment faire tu en conviendras. Merci pour ton aide et à bientôt pour de nouvelles aventures.

JuJu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Fais donc comme tu le sens, mais je veux rappeler ton attention sur le point majeur de ton choix (Application.Undo) :
Attention : elle annule la toute dernière opération effectuée (et uniquement la toute dernière)

Je te laisse maintenant faire ...
Si toutefois tu devais changer ensuite d'avis, reviens vers nous et je t'aiderais, mais dans une discussion différente, puisque cette-ci concerne :
Annuler tri Excel



________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ