Mary utilise un peu les macros pour ajouter du texte à ses documents. Le problème est que si le texte ajouté contient des apostrophes, celles-ci sont ajoutées au texte comme «droites» plutôt que «intelligentes». Elle indique qu’elle dispose du paramètre Mise en forme automatique au fur et à mesure de la frappe qui indique à Word d’utiliser des guillemets intelligents au lieu de guillemets droits, mais cela n’a aucun effet sur le texte inséré par mes macros.

Lorsque vous insérez du texte dans un document en utilisant une macro plutôt qu’en tapant, le texte dans chaque cas est géré différemment par Word. Le texte que vous tapez est traité à mesure que chaque caractère est saisi. Le texte inséré par une macro est traité plus comme du texte collé dans un document. Ainsi, si vous tapez « ceci est mon texte », Word effectue son traitement après chaque caractère. Cela signifie qu’il est temps pour le programme de vérifier la mise en forme automatique et la correction automatique et tout le reste des choses que Word fait pour traiter le texte.

Lorsque vous utilisez une macro pour saisir le même texte, il est inséré en tant que bloc, comme si vous l’aviez collé en place. Cela signifie que tous les caractères au milieu du texte (tels que les guillemets ou les apostrophes) qui auraient été traités par la mise en forme automatique ne sont pas « capturés » et traités. Cela signifie que les guillemets droits ne sont pas modifiés en guillemets intelligents s’ils sont contenus dans le texte inséré par votre macro.

Il y a plusieurs façons d’aborder une solution à ce problème. La première consiste à faire en sorte que votre macro, après avoir inséré tout votre texte, fasse une opération de recherche et de remplacement pour remplacer tous les guillemets par des guillemets et les apostrophes par des apostrophes. Cela peut sembler étrange, mais si vous avez défini AutoFormat As You Type pour utiliser des guillemets intelligents, l’opération de recherche et de remplacement finira par changer les guillemets droits en guillemets intelligents.

Cette approche est la voie à suivre si votre macro insère beaucoup de texte dans le document. S’il insère de plus petits morceaux de texte, il est alors plus facile de s’assurer que la macro insère les bons codes ASCII pour commencer par les guillemets intelligents. Les codes ASCII pour une citation régulière sont 34, mais une citation d’ouverture intelligente a un code de 147 et une citation de clôture est 148. Il existe des différences similaires dans les codes utilisés pour les apostrophes. Si vous utilisez la fonction Chr pour insérer le caractère approprié, vous aurez toujours les guillemets souhaités.

Une façon de faire est d’utiliser un code similaire au suivant au début de votre macro:

If Options.AutoFormatAsYouTypeReplaceQuotes = True Then     sAposOpen = Chr(145)

sAposClose = Chr(146)

sQuoteOpen = Chr(147)

sQuoteClose = Chr(148)

Else     sAposOpen = Chr(39)

sAposClose = Chr(39)

sQuoteOpen = Chr(34)

sQuoteClose = Chr(34)

End If

Ce code vérifie si le paramètre AutoFormat As You Type est activé pour les guillemets intelligents. Si tel est le cas, les quatre variables sont définies sur les codes ASCII appropriés pour les guillemets intelligents. S’il n’est pas activé, les variables sont définies sur les codes appropriés pour les guillemets droits. Vous pouvez ensuite utiliser ces variables ultérieurement dans votre macro lorsque vous assemblez et insérez du texte.

Par exemple, si vous souhaitez insérer le texte « la maison de mon frère est en bas de la rue », vous pouvez l’insérer de cette manière:

sMyString = "my brother" & sAposClose & "s house is down the street"

Selection.InsertAfter " " & sMyString

Si vous trouvez cette approche gênante (briser vos chaînes de cette manière), il existe une autre option. Vous pouvez créer votre propre fonction qui effectue les remplacements appropriés dans vos chaînes en même temps.

La paire de macros suivante fera très bien l’affaire:

Function RepQuotes(sRaw As String) As String     Dim sTemp As String     Dim sAposOpen As String     Dim sAposClose As String     Dim sQuoteOpen As String     Dim sQuoteClose As String

If Options.AutoFormatAsYouTypeReplaceQuotes = True Then         sAposOpen = Chr(145)

sAposClose = Chr(146)

sQuoteOpen = Chr(147)

sQuoteClose = Chr(148)

Else         sAposOpen = Chr(39)

sAposClose = Chr(39)

sQuoteOpen = Chr(34)

sQuoteClose = Chr(34)

End If

sTemp = RepText(sRaw, " " & Chr(39), sAposOpen)

sTemp = RepText(sTemp, Chr(39), sAposClose)

sTemp = RepText(sTemp, " " & Chr(34), sQuoteOpen)

sTemp = RepText(sTemp, Chr(34), sQuoteClose)

RepQuotes = sTemp End Function
Function RepText(sIn As String, sFind As String, sRep As String) As String     Dim x As Integer

x = InStr(sIn, sFind)

y = 1     While x > 0         sIn = Left(sIn, x - 1) & sRep & Mid(sIn, x + Len(sFind))

y = x + Len(sRep)

x = InStr(y, sIn, sFind)

Wend     RepText = sIn End Function

Ce que vous faites est de construire vos chaînes de texte comme d’habitude, puis de les transmettre via la macro RepQuotes. La macro détermine les citations appropriées à utiliser, puis effectue les conversions. Il détermine si une citation est une citation d’ouverture ou une citation de fin dans le texte selon qu’il y a un espace avant la citation ou non. Si tel est le cas, il s’agit d’une citation d’ouverture; sinon, c’est une citation de clôture.

_Note: _

Si vous souhaitez savoir comment utiliser les macros décrites sur cette page (ou sur toute autre page des sites WordTips), j’ai préparé une page spéciale qui comprend des informations utiles.

lien: / wordribbon-WordTipsMacros [Cliquez ici pour ouvrir cette page spéciale dans un nouvel onglet de navigateur].

WordTips est votre source pour une formation Microsoft Word rentable.

(Microsoft Word est le logiciel de traitement de texte le plus populaire au monde.) Cette astuce (3363) s’applique à Microsoft Word 97, 2000, 2002 et 2003. Vous pouvez trouver une version de cette astuce pour l’interface ruban de Word (Word 2007 et plus tard) ici:

link: / wordribbon-Adding_Smart_Quotes_through_Macro_Text [Ajout de citations intelligentes via le texte de macro].