[VBA] Gérer l'espacement/caractère dans un tri par ordre alphabétique

Bonsoir le forum,

J'ai créer au début de mon apprentissage en VBA un fichier de suivi de collection de BD. Ayant un meilleur niveau, j'ai décidé de changer 2/3 trucs ainsi que d'écrire un code plus propre (a+ les ".select" ).

La particularité de mon fichier est que je le laisserai disponible sur mon drive afin que mon entourage sache où j'en suis dans ma collection.

J'ai également décidé de faire 1 feuille/série de BD -ce qui n'était pas le cas avant- et cela me pose quelques soucis.

Le premier étant qu'un nom de feuille est limité 31 caractères, de ce fait je vais tronquer les noms.

Ensuite, mon fichier contient un listing des séries de BD, qui permet à l'utilisateur de cliquer sur le nom de la série (via un lien HyperTexte) afin d'avoir accès aux infos la concernant.

Ce point rajoute un deuxième problème : les noms de feuilles ne doivent pas contenir d'espaces, que je remplace donc par un underscore ("_").

Enfin, pour que chaque lien HyperTexte sois valide lorsque l'utilisateur télécharge le fichier, il faut que je récupère le chemin d'où est disposé le fichier est qu'à l'ouverture du fichier j'ajoute les liens HyperTexte.

Pour cela, ma liste de noms des séries est triés par ordres alphabétique ainsi que mes feuilles, via un code récupéré sur le net.

Mon problème, vous le verrez en ouvrant le fichier, est que ce tri par ordre alphabétique ne prend pas en compte les underscore et ainsi Laz va apparaître avant La_p dans l'ordre des feuilles. En découle que les liens hypertexte des deux séries sont inversés !

J'aurai voulu donc, savoir comment faire pour trier par ordre alphabétique en ne prenant pas en compte l'underscore !

Merci d'avance !

Bonne soirée/journée,

Baboutz

22collection-bd.xlsm (54.19 Ko)

Salut Baboutz,

un coupeur de cheveux en quatre : j'adore!

Essaie ceci ! Code valable pour le tri des feuilles dans l'ordre alphabétique strict selon critères humains : brain against machine!

For x = 2 To Sheets.Count
    For y = 3 To Sheets.Count
        If LCase(Replace(Sheets(y).Name, "_", "")) < LCase(Replace(Sheets(y - 1).Name, "_", "")) Then Sheets(y).Move before:=Sheets(y - 1)
    Next
Next

A+

Bonjour,

tant qu'à tout refaire, fait plutôt une vraie BDD : tout dans une feuille unique.

Ensuite c'est facile de faire des synthèse ou des extraction dans une autre feuille.

http://www.xlerateur.com/divers/2010/05/14/les-13-regles-d%E2%80%99or-pour-utiliser-excel-comme-gestionnaire-de-donnees-612/

Tableau Croisé Dynamique (TCD) : http://www.mdf-xlpages.com/modules/smartsection/item.php?itemid=109

et

https://support.office.com/fr-fr/article/utiliser-des-segments-pour-filtrer-les-donn%C3%A9es-249f966b-a9d5-4b0f-b31a-12651785d29d

eric

Salut curulis57, Salut eriiic,

@curulis57 Ahah oui, je tenais à être précis pour que vous puissiez comprendre ma démarche et le pourquoi du comment je fais ça Cela marche nickel, c'est vraiment parfait, merci beaucoup ! Ton code est en plus, plus simplifié. Ce n'était pas si dur que ça en fait... Merci !

@eriiic Comme je souhaite que l'utilisateur clique un lien pour avoir accès aux infos, cela compliquerait le code. Néanmoins, je garde tes liens précieusement, j'ai trouvé cela très intéressant pour la création d'un BDD ainsi qu'un TCD ! Merci

Bonne soirée à vous deux,

Baboutz

Rechercher des sujets similaires à "vba gerer espacement caractere tri ordre alphabetique"