Comparaison de chaines de caractères en VBA : InStr()

sigismond

XLDnaute Occasionnel
Bonjour à tous,

Je récupère des données en provenance de formulaires et je cherche à les trier en fonction du contenu.

Pour cela, j'utilise la fonction VBA inStr() en liaison avec Trim() et UCase() pour identifier des phrases clé.

L'ennui est que les formulaires ont été remplis par copier/coller et que selon l'origine du texte, les caractères ne sont pas homogènes :

  • Espaces insécables au lieu d'espace simple (HexA0 au lieu de Hex20)
  • Simple cote au lieu d'apostrophe (Hex92 au lieu de Hex27)
  • Guillemet typo au lieu de guillemet simple (avec la variante ouvrant/fermant)

Vous avez compris que ces différences rendent la fonction InStr() totalement inopérante.

Avant de me lancer dans la réalisation d'un module de mappage de ces caractères vicieux (tâche que je soupçonne infinie ! ), j'aimerai savoir si vous avez été confronté au pb et comment vous l'avez résolu.

Bonne journée,

Sigismond
 

Jam

XLDnaute Accro
Re : Comparaison de chaines de caractères en VBA : InStr()

Salut Sigismond,

A mon sens il n'y a pas de solution miracle, car comme tu l'indiques toi-même les sources sont diverses et variées. Il faut donc lister TOUTES les possibilités et écrire ton code en essayant de simplifier au max.

Bon courage,
 

JNP

XLDnaute Barbatruc
Re : Comparaison de chaines de caractères en VBA : InStr()

Bonjour le fil :),
Pour moi, tu devrais te pencher sur RegExp.
J'avais (pas mal) commencé un tuto là dessus, jettes-y un oeil et reviens vers nous si tu penses que ça pourrait être la solution, mais avec un exemple des sources et des solutions souhaitées :rolleyes:...
Bon courage :cool:
 

sigismond

XLDnaute Occasionnel
Re : Comparaison de chaines de caractères en VBA : InStr()

Bonjour le forum,

Merci jam pour ton intervention, je crains que tu n'aies raison et que la solution soit de filtrer les caractères potentiellement ambigus.

Merci JNP pour la piste des expressions régulières, après examen, je ne suis pas convaincu que ça corresponde à mon besoin.

Je vous ai mis l'état d'avancement de mes réflexions :

les trois variantes avec inStr(), inStrRev() et les deux() donnent les mêmes résultats
mais bizarrement le résultat change si on inverse référence et Test.

L'inconvénient de cet algorithme est que le résultat dépend de la position de l'erreur : une erreur au centre donne un résultat de 50 % alors que sur les bords ce n'est que 90 à 95 %.

Si vous avez des idées de recherche, je suis preneur !

Bon WE

Sigismond
 

Pièces jointes

  • CompareTexte.zip
    11.4 KB · Affichages: 78
Dernière édition:

JNP

XLDnaute Barbatruc
Re : Comparaison de chaines de caractères en VBA : InStr()

Re :),
Pas sûr d'avoir tout compris de ce que tu cherches à faire :eek:...
Mais en traitant en RegExp avant de passer ton algo, il me semble que le résultat est convenable :p...
Bonne suite :cool:
 

Pièces jointes

  • CompareTexte.xls
    53 KB · Affichages: 144

Discussions similaires

Statistiques des forums

Discussions
312 428
Messages
2 088 332
Membres
103 817
dernier inscrit
Leberger