Bonjour.
J'utilise OpenOffice sous Windows et il me semble que, dans les macros en Ooo
Basic, le fait qu'une marque de paragraphe soit lue (sous Windows, en tout
cas) comme Chr(13) Chr(10) pose un problème : pour un curseur de texte, il
n'y a là qu'un caractère, mais dans une chaîne, la marque compte pour deux.
J'ai soumis ce problème sur le forum anglophone le 19 de ce mois, mais je
n'ai pas reçu de réponse, donc je me permets d'essayer ici.
Je voudrais écrire une macro qui filtre interactivement des caractères
prohibés dans un texte, disons dans le texte principal du document actif.
(Les caractères prohibés sont par exemple ceux dont le Asc() est 96, mais
dans la pratique réelle, il s'agit de quelque chose de plus compliqué.)
Déplacer un curseur en l'étendant successivement sur chaque caractère, et
sélectionner le curseur si le caractère renvoyé par la chaîne de ce curseur est
prohibé, cela fonctionne correctement, mais c'est très lent.
J'ai donc essayé d'étendre le curseur sur des zones successives de 32767
caractères, de lire la chaîne correspondante caractère par caractère, et, au
cas où le n-ième caractère de cette chaîne est prohibé, de faire sélectionner
le n-ième caractère de la zone couverte par le curseur.
C'est nettement plus rapide, mais c'est saboté par le fait que les marques de
paragraphe comptent pour deux caractères dans les chaînes et pour un seul dans
les mouvements de curseur.
Éventuellement, vous pourrez voir un exemple du code complet sur le forum
anglophone, sous le titre Cursors and strings don't count the characters on
the same way.
(Il est maintenant au début de la seconde page du forum sur les macros.)
Évidemment, pendant qu'un indice va de 1 à la longueur de la chaîne, on peut
utiliser un autre indice qui ne s'incrémente que si le caractère pointé par le
premier indice n'est pas un Chr(13) suivi d'un Chr(10). C'est alors ce second
indice qui indique à quel endroit de la zone du curseur se trouve le caractère
prohibé.
Dans les cas que j'ai testés, cela fonctionne correctement et nettement plus
vite que la première méthode ci-dessus, mais enfin, ça me semble un peu un
bricolage d'amateur et j'aimerais savoir s'il n'existe pas une solution
officielle.
Merci d'avance à qui me répondra.