OVH Cloud OVH Cloud

Bug de Selection.TypeText

2 réponses
Avatar
Mersenne
Bonjour.

Le talent d'un bon programmeur VBA consiste entre autres à savoir gérer les
bugs, donc je vous propose de faire attention à celui-ci.

Si vous appliquez Selection.TypeText à une chaîne de plus de 65535
caractères, la chaîne n'est pas écrite tout entière.

Apparemment, la règle est celle-ci : soit r le reste de la longueur de la
chaîne par 65536; seuls les r premiers caractères de la chaîne seront
écrits.
On dirait donc qu'il y a dans les coulisses un nombre de type Long qui est
forcé au type Integer.

La macro suivante illustre ce phénomène. (J'ai évité de mettre des marques
de paragraphe dans la chaîne, pour ne pas interférer avec un autre
problème.)

Pour contourner ce bug, on pourra se servir de Selection.InsertAfter, qui
écrit la chaîne entièrement.

Anacoluthe va certainement nous expliquer que ce n'est pas un bug. (Je n'ai
testé que le Word 2002.)

Mersenne.

2 réponses

Avatar
Mersenne
Désolé, j'ai oublié de copier la macro qui illistre le bug.

La voici :

Option Explicit

Sub MAIN()

Dim ChaineFixe As String * 65400
Dim Chaine As String
Dim Compteur As Long

Chaine = "a"

For Compteur = 1 To 65535
Chaine = Chaine & "b"
Next Compteur

Chaine = Chaine & "c" ' Chaine compte maintenant un caractère a, 65535
caractères b et 1 caractère c,
' soient 65537 caractères.

Documents.Add

Selection.TypeText (Chaine)

''' Si Chaine a plus de 65535 caractères, seuls les r premiers caractères
sont écrits, r désignant le reste
''' de Len(Chaine) par 65536. Pour que toute la chaîne soit écrite,
neutralisez l'instruction précédente
''' et mettez par exemple :

' Selection.InsertAfter (Chaine)
' Selection.Collapse (wdCollapseEnd)

End Sub
Avatar
Mersenne
Et pour mettre les points sur les i : la variable ChaineFixe ne joue aucun
rôle dans la macro.