Sur Le Forum, une application m’a permis de personnaliser mon fichier dont voici un exemplaire. Je suis désolé de ne pas pouvoir rappeler ici le concepteur ; je pense que c’était TIBO qui avait permis son amélioration. J’ai ainsi pu m’en servir de référence pour ce que vous allez visiter.
En effet le résultat souhaité en colonne B ne se fait pas correctement par exemple lorsque Mr précède un groupe de mots de la colonne A.
Les autre civilité cela fonctionne bien.
Quelqu’un peut-il aussi me faire de la pédagogie sur la conception de cette ligne si particulière de la macro-commande VBA? Pourquoi par exemple la macro ne prend pas en compte MR ou Mr ou encore M. (avec un point) et comment faut-il procéder pour que cela fonctionne aussi pour ces civilités à retirer dans le résultat en colonne B ?
Tibo est un excellentissime formuliste, mais je ne crois pas qu'il ait encore céder aux charmes de RegExp
Par contre JNP ou david84 sont eux deux regexpiens avertis et passionnés par le pattern débridé et alambiqué
Alors qui de ces deux Grand Maîtres du "String Régalien" a commis ce superbe pattern ? "\b((S[ALRS]{2,4}|S[A.L.R.S.]{2,8}|S[A.LR.S.]{2,7}|(\s(SA)|(M[M]{2,2})|(M[ME]{2,3})|(M[me]{2,3})|M[M.]{2,2}|M[r]{2,2}|M[Mr]{2,2}|(M[MR]{2,3}))\b)"
Bonjour LE FORUM et STAPLE1600
Merci STAPLE1600 pour ton intervention,
Sans savoir comment fonctionne cette belle et si étrange formule, voici ce que j'ai tenté :
- avec }|(M[MR ]{2,2} ça bug complètement
- avec un espace derrière mes parties à problème et en gardant 3 en pos n°2 de cette façon ...
|(M[MR ]{2,3}
...la macro fait parfaitement le travail.
Mon problème est ainsi réglé
Je reste toujours preneur d'une bonne explication pour ce code pour pouvoir étendre une utilisation dans d'autres applications, et avec intelligence.
Bonne journée
Webperegrino
Bonjour,
pas le temps actuellement.
Je regarderai cela ce soir ou demain si tu n'as pas réglé ton problème.
Note manuellement les résultats attendus pour que l'on puisse envisager les différentes solutions.
Teste cela au cas où pour commencer (si cela peut te faire avancer de ton côté)
Bonjour le fil
Merci Jean-Marie de ton appel, mais je pense que ni David ni moi n'en sommes le géniteur, je ne comprends pas pourquoi on aurait fait une classe avec plusieurs fois le même caractère, [A.L.R.S.] s'écrivant normalement [ALRS.]...
De plus, en ce qui me concerne, je privilégie les fonctions aux sub dans ces cas-là
Je me souviens avoir travailler sur quelque chose de ce type, mais j'utilisais une liste exhaustive...
Maintenant, en plus, jouer sur des combinaisons, je ne suis pas sûr que ça ne "mange pas" quelque chose en trop... l'enseigne Mr Bricolage va être tronquée, alors qu'elle ne devrait pas exister, vu que Mr signifie Mister en anglais, alors qu'en bon français, ce devrait être M. ...
Le motif de David est meilleur, simplement j'aurait ajouté Mlle, et précisé 0 ou 1 pour M.
Code:
"(\s|^)(S.?A.?(R.?L.?)?|M.?|MME|MLLE)(\s|$)"
Bonne suite
PS : IgoreCase ? Excellent David, encore un pas en avant
Juste pour remercier les grands gourous regexpiens d'être venus à la rescousse.
Du coup, j'ai plus d'excuse pour échapper à la corvée de lessive et tutti quanti
Mais que ne ferait-on pas pour honorer le Grand Pattern de Derrière les Fagots ?!
Merci les gars et à plus tard.
PS1: Webperegrino, reviens vite goûter ces patterns , ils sont tout frais, ce ne sont pas des patterns en boite.
Désolé, je sors
Bonsoir Le Forum,
Bonsoir Les Amis qui êtes venus dans cette conversation : j'ai maintenant de la nourriture pour expérimenter.
Le code VBA que j'ai placé en #3 a été expérimenté dans mon application : et ça fonctionne ! (j'ai même ajouté EURL, E.U.R.L.).
Je vais aussi essayer l'expression de David84 et la proposition complémentaire de JNP (j'approuve sa remarque pour le M. ou M français à employer chez nous, même ici en Bretagne !).
Je vous remercie tous de vos suggestions ; me voilà comblé et je dois maintenant rechercher l'expression la plus pratique.
Par souçis de perfectionnisme, ou du moins de diversité de création, peut-être même les emploierai-je toutes dans mes prochaines applications similaires...
C'est vraiment sympa à vous de vous être attardés sur ma requête. Je vous souhaite tous un excel_lent week-end,
Webperegrino
prend en compte SA,SL,SR,SS,SAL,SLR,SSS,SLL,SRA,SSSS,SAAA,SLLL, etc.
Code:
S[A.L.R.S.]{2,8}
aucun intérêt par rapport au précédent (qui est lui-même très approximatif), si ce n'est qu'il accepte le "."
Code:
M[M]{2,2}
:{2,2} doit s'écrire {2} et ce motif accepte M ou MMM : quel intérêt par rapport à ta demande ?
Aucun intérêt de décliner les possibilités en majuscules ou en minuscules : IgnoreCase=true est fait pour cela.
J'arrête là mais ce motif manque pour le moins de précision, de concision et de factorisation.
En conclusion : utilise IgnoreCase comme indiqué et part sur la proposition de JNP si tu veux traiter "M" sans point et MLLE.
Il te suffira ensuite d'enrichir le pattern si nécessaire.
A+
Edit: dans le message de Michel Xld ici, le lien vers la démo de Michel_m ne mène nul part...quelqu'un aurait-il ce fichier en sa possession ?
Bonsoir LE FORUM,
Bonsoir David et merci beaucoup pour ce retour avec ces dernières informations, c'est très sympa.
Je vais les appliquer.
Je comprends mieux maintenant le fonctionnement de cette ligne du programme.
Webperegrino