Thierry Crouzet

Optimiser Word pour les auteurs

Cuisine 37/52

Peu d’auteurs Français se préoccupent autant de leurs outils de travail que David Bosman. Sa réflexion stimule la mienne comme au bon vieux temps de la blogosphère rayonnante.

Comme David le remarque, un certain snobisme pousse beaucoup d’auteurs à dénigrer Word. Trop lourd. Pensé pour la bureautique et non pas pour l’écriture créative. Interface encombrée. Tout cela est vrai, sans être une raison suffisante pour renoncer à Word.

Il n’est toutefois plus mon unique outil d’écriture. Sur iPad, je me suis habitué à Daedalus Touch et sur Windows, je travaille de plus en plus avec Scrivener, surtout pour organiser mes notes et ma documentation.

Malheureusement Scrivener souffre de quelques défauts qui m’empêchent de basculer vers lui à 100 % :

  1. Pas de feuille de styles à proprement parler (les presets ne sont pas encore disponibles sur la version Windows).

  2. Pas de correction orthographique et grammaticale digne de ce nom en mode saisie.

  3. Pas d’intégration avec Antidote (ce qui force à copier-coller dans Word).

En conséquence, Word reste encore mon principal outil d’écriture (et non de mise en page). Je n’imprime pas les textes que j’écris sous Word, je les exporte en XML ou vers WordPress, InDesign, Scrivener… Je ne commets pas l’erreur commune de confondre mon document de travail et ses diverses sorties. Je formate donc mes documents pour que l’écriture soit la plus agréable possible : typo, interlignage, marges…

Certains auteurs se détournent de Word parce qu’il ne dispose pas d’un mode dédié à l’écriture. Le « distraction-free composition mode » de Scrivener. Aussi popularisé par OmmiWriter.

OmmWriter is your own private writing room where you can close the door behind you to focus on your writing in peace.

Pour arriver au même résultat sur Word, il faut personnaliser l’interface :

  1. Thème Gris foncé pour Word.

  2. Mode page en plein écran.

  3. Couleur de fond de page sépia.

  4. Hauteur de la page augmentée au maximum pour ne pas être embêté par les sauts.

  5. Sauts entre les pages supprimés à l’affichage.

  6. Réglage adéquat du zoom.

  7. Plus une série de raccourcis clavier pour éviter de revenir aux menus.

Word en mode écriture

Je me suis programmé une petite macro qui me fait basculer dans ce mode. Il vous suffit de la personnaliser et de lui associer une icône sur la barre d’outils d’Accès rapide. Je reviens en visualisation standard avec la touche Escape. Ainsi je bénéficie de toute la puissance de Word tout en écrivant dans un environnement dépouillé. Aucun outil d’écriture ne rivalise encore avec un Word convenablement configuré.

Sub writingMode()
    'Passer en mode d'affichage page
    If ActiveWindow.View.SplitSpecial = wdPaneNone Then
        ActiveWindow.ActivePane.View.Type = wdPrintView
    Else
        ActiveWindow.View.Type = wdPrintView
    End If
    'Passer en plein écran
    ActiveWindow.View.FullScreen = Not ActiveWindow.View.FullScreen
    'Virer espace entre page en plein écran
    ActiveWindow.View.DisplayPageBoundaries = False
    'Minimalisme
    ActiveWindow.View.ShowTabs = False
    ActiveWindow.View.ShowParagraphs = False
    ActiveWindow.View.ShowHyphens = False
    ActiveWindow.View.ShowAll = False
    ActiveWindow.View.ShowHiddenText = False
    ActiveWindow.View.ShowObjectAnchors = False
    'Allonger la page au max
    ActiveDocument.PageSetup.PageHeight = CentimetersToPoints(55.87)
    'Couleur de fond sepia
    ActiveDocument.Background.Fill.ForeColor.ObjectThemeColor = wdThemeColorBackground2
    ActiveDocument.Background.Fill.ForeColor.TintAndShade = 0#
    ActiveDocument.Background.Fill.Visible = msoTrue
    ActiveDocument.Background.Fill.Solid
    'Zoom
    ActiveWindow.ActivePane.View.Zoom.Percentage = 140
End Sub

Pour bloguer un texte, je le sélectionne et lance une autre macro qui le convertit en Markdown. Je le colle alors dans WordPress. J’ajoute ensuite les images.

Le bon vieux Word parce qu’il est programmable reste notre meilleur traitement de texte.

'
' ExportBlog Macro
'
Sub ExportBlog()

    Selection.Copy
    Documents.Add DocumentType:=wdNewBlankDocument
    Selection.PasteAndFormat (wdPasteDefault)
    Selection.HomeKey Unit:=wdStory
    
    With ActiveDocument.Styles("Normal").ParagraphFormat
        .Hyphenation = False
    End With
    
    'Salade Crouzet
    SupprimeAppelsDeNote "Appel note de bas de p."
    SupprimeAppelsDeNote "Appel de note de fin"
    
    With ActiveDocument.Styles("Citation").Font
        .Italic = False
    End With
    
    Selection.Find.Font.Italic = True
    Formatage "*", "*", ""
        
    Selection.Find.Font.Bold = True
    Formatage "**", "**", ""
        
    Selection.Find.Style = ActiveDocument.Styles("citation")
    Formatage ">", "", "style"
    
    Selection.Find.Style = ActiveDocument.Styles("Titre 3")
    Formatage "###", "", "style"
    
    Selection.Find.Style = ActiveDocument.Styles("Titre 4")
    Formatage "####", "", "style"
    
    'Liens
    For Each hlien In ActiveDocument.Hyperlinks
        With hlien
            TexteRemplacerB .TextToDisplay, "[" + .TextToDisplay + "](" + .Address + ")"
        End With
    Next
    
    'Listes
    ReplaceLists
        
    TexteRemplacerB "^p", "^p^p"
    TexteRemplacerB "^p^p^p", "^p^p"
    TexteRemplacerB "^p^p^p", "^p^p"
    TexteRemplacerB "", ""
    TexteRemplacerB "", ""
    TexteRemplacerB "", ""
    TexteRemplacerB "", ""
    TexteRemplacerB ChrW(-3906), "--"
    TexteRemplacerB Chr(160), " "
        
    Selection.WholeStory
    Selection.Font.Reset
    Selection.MoveDown Unit:=wdLine, Count:=1
    
    Selection.TypeBackspace
    Selection.TypeBackspace
    Selection.TypeBackspace
    Selection.TypeBackspace
    Selection.WholeStory
    Selection.Copy
    'SendKeys "{CAPSLOCK}N"
    SendKeys "N"
    ActiveWindow.Close

End Sub

' Insère les codes avant et après la zone trouvée
Public Sub Formatage(cod1$, cod2$, Style$)
Dim l As Integer
    With Selection.Find
        .Text = ""
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
        Do While .Execute = True
            l = Len(Selection)
            If Style$ = "style" Then l = l - 1
            Selection.MoveLeft Unit:=wdCharacter, Count:=1
            Selection.TypeText Text:=" "
            Selection.Font.Reset
            Selection.TypeBackspace
            Selection.TypeText Text:=cod1$
            Selection.MoveRight Unit:=wdCharacter, Count:=l
            Selection.TypeText Text:=" "
            Selection.MoveLeft Unit:=wdCharacter, Count:=1
            Selection.Font.Reset
            Selection.Delete Unit:=wdCharacter, Count:=1
            Selection.TypeText Text:=cod2$
        Loop
    End With
    ClearSearch
End Sub

Public Sub TexteRemplacerB(txt1$, txt2$)
    ClearSearch
    TexteRemplacerF txt1$, txt2$, False
End Sub

Public Sub TexteRemplacerF(txt1$, txt2$, f)
    With Selection.Find
        .Text = txt1$
        .Replacement.Text = txt2$
        .Forward = True
        .Wrap = wdFindContinue
        .Format = f
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub

Public Function TexteRechercherB(txt1$, f, s)
    With Selection.Find
        .Text = txt1$
        .Replacement.Text = ""
        .Forward = s
        .Wrap = wdFindContinue
        .Format = f
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    TexteRechercherB = Selection.Find.Execute
End Function

'***************************************************************
' Function to replace bold with _bold_, only the first occurance
' Returns true if any occurance found, false otherwise
' Originally recorded by WinWord macro recorder, probably contains
' quite a lot of useless code
'***************************************************************
Sub ReplaceLists()
    Dim i As Integer
    Dim j As Integer
    Dim Para As Paragraph

    Selection.HomeKey Unit:=wdStory

    'iterate through all the lists in the document
    For i = Selection.Document.Lists.Count To 1 Step -1
        'check each paragraph in the list
        For j = Selection.Document.Lists(i).ListParagraphs.Count To 1 Step -1
            Set Para = Selection.Document.Lists(i).ListParagraphs(j)
            'if it's a bulleted list
            If Para.Range.ListFormat.ListType = wdListBullet Then
                        Para.Range.InsertBefore (ListIndent(Para.Range.ListFormat.ListLevelNumber, "*"))
            'if it's a numbered list
            ElseIf Para.Range.ListFormat.ListType = wdListSimpleNumbering Or _
                                                    wdListMixedNumbering Or _
                                                    wdListListNumOnly Then
                Para.Range.InsertBefore (Para.Range.ListFormat.ListValue & ".  ")
            End If
        Next j
        'inserts paragraph marks before and after, removes the list itself
        Selection.Document.Lists(i).Range.InsertParagraphBefore
        Selection.Document.Lists(i).Range.InsertParagraphAfter
        Selection.Document.Lists(i).RemoveNumbers
    Next i
End Sub

'***********************************************************
' Returns the MarkDown indent text
'***********************************************************
Function ListIndent(ByVal ipNumber As Integer, ByVal spChar As String) As String
    Dim i  As Integer
    For i = 1 To ipNumber - 1
        ListIndent = ListIndent & "    "
    Next
    ListIndent = ListIndent & spChar & "    "
End Function

Sub SupprimeAppelsDeNote(stylew)
    ClearSearch
    Selection.Find.Style = ActiveDocument.Styles(stylew)
    TexteRechercherB "", True, True
    While Selection.Find.Found
        Selection.TypeBackspace
        Selection.Find.Execute
    Wend
    ClearSearch
End Sub

Sub VirerNotes()
    ClearSearch
    Selection.Find.Style = ActiveDocument.Styles("Appel note de bas de p.")
    TexteRechercherB "", True, True
    While Selection.Find.Found
        Selection.TypeBackspace
        Selection.Find.Execute
    Wend
    ClearSearch
End Sub

Public Sub ClearSearch()
    Selection.HomeKey Unit:=wdStory
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
End Sub