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.