Macro pour supprimer le gris (2)

Sub AutoDeleteGray()

'Delete only the last gray in the same paragraph

Dim length As Integer

Selectionstart = Selection.range.Start

p = Selection.Paragraphs.First

dd = Selection.range.HighlightColorIndex

Do While Selection.Characters.First.HighlightColorIndex = wdGray25

    If (Selection.MoveRight <> 1) Then Exit Do

Loop

backupForward = Selection.Find.Forward

backupText = Selection.Find.Text

backupMatchWildcards = Selection.Find.MatchWildcards

 With Selection.Find

        .Highlight = True

        .Text = "\{\>*\<\}"

        .Replacement.Text = ""

        .Forward = False

        .Format = False

        .MatchCase = False

        .MatchWholeWord = False

        .MatchWildcards = True

        .MatchSoundsLike = False

        .MatchAllWordForms = False

         If .Execute = True Then

            ParagraphFirst = Selection.Paragraphs.First

            ParagraphLast = Selection.Paragraphs.Last

            If ParagraphFirst = p Or ParagraphLast = p Then

                If Selection.range.HighlightColorIndex = wdGray25 Or Selection.range.HighlightColorIndex = wdUndefined Then

                    IsValid = True

                    For Each c In Selection.range.Characters

                       If c.HighlightColorIndex <> wdGray25 And c.HighlightColorIndex <> wdUndefined Then

                            IsValid = False

                            Exit For

                       End If

                    Next c

                Else

                    Selection.range.Start = Selection.range.End

                 End If

            Else

                IsValid = False

            End If

        Else

            IsValid = False

         End If

       If IsValid Then

        length = Selection.range.End - Selection.range.Start

        deleteAll Selection.range

       Else

        Selection.range.Start = Selection.range.End

        End If

    End With

    

    Selection.Start = Selectionstart - length

    Selection.End = Selectionstart - length

    Selection.Find.MatchWildcards = backupMatchWildcards

    Selection.Find.Forward = backupForward

    Selection.Find.Text = backupText

End Sub

Sub AutoDeleteGrayAll()

'Delete All Gray

Dim lastRange As Integer

Dim error As Integer

If MsgBox("Désirez-vous nettoyer votre document ?", vbOKCancel) = vbOK Then

On Error GoTo doCleanup

'Application.ScreenUpdating = False

Selection.HomeKey Unit:=wdStory

Selection.Find.ClearFormatting

Selection.Find.Replacement.ClearFormatting

    

    Do

    IsValid = True

    With Selection.Find

        .Highlight = True

        .Text = "\{\>*\<\}"

        .Replacement.Text = ""

        .Forward = True

        .Format = False

        .MatchCase = False

        .MatchWholeWord = False

        .MatchWildcards = True

        .MatchSoundsLike = False

        .MatchAllWordForms = False

         If .Execute = True Then

            If Selection.range.HighlightColorIndex = wdGray25 Or Selection.range.HighlightColorIndex = wdUndefined Then

                IsValid = True

                For Each c In Selection.range.Characters

                   If c.HighlightColorIndex <> wdGray25 And c.HighlightColorIndex <> wdUndefined Then

                        IsValid = False

                        error = error + 1

                        Exit For

                   End If

                Next c

            Else

                Selection.range.Start = Selection.range.End

             End If

        Else

            Exit Do

         End If

       If IsValid Then

        deleteAll Selection.range

       Else

        Selection.range.Start = Selection.range.End

       End If

         

    End With

        

    Loop While (True)

    

    

For Each myStoryRange In ActiveDocument.StoryRanges

   If myStoryRange.StoryType <> wdMainTextStory Then

        With myStoryRange.Find

        .Highlight = True

        .Text = "\{\>*\<\}"

        .Replacement.Text = ""

        .Forward = True

        .Format = False

        .MatchCase = False

        .MatchWholeWord = False

        .MatchWildcards = True

        .MatchSoundsLike = False

        .MatchAllWordForms = False

         If .Execute = True Then

            If myStoryRange.HighlightColorIndex = wdGray25 Or myStoryRange.HighlightColorIndex = wdUndefined Then

                IsValid = True

                For Each c In myStoryRange.Characters

                   If c.HighlightColorIndex <> wdGray25 And c.HighlightColorIndex <> wdUndefined Then

                        IsValid = False

                        error = error + 1

                        Exit For

                   End If

                Next c

            Else

                myStoryRange.Start = myStoryRange.End

             End If

        Else

            IsValid = False

         End If

         

       If IsValid Then

        deleteAll myStoryRange

       Else

        myStoryRange.Start = myStoryRange.End

       End If

       

    End With

    End If

Next myStoryRange

    

doCleanup:

'Application.ScreenUpdating = True

If (Err.Number <> 0) Then

    MsgBox "Nettoyage complété avec 1 erreur(s). (" + Err.Description + ")"

Else

    MsgBox "Nettoyage complété avec " + CStr(error) + " erreur(s)"

End If

End If

End Sub

Function deleteAll(ByVal r As range)

     

    With r.Find

        .Text = "\{\>*\<\}"

        .Replacement.Text = ""

        .Forward = True

        .Format = False

        .MatchCase = False

        .MatchWholeWord = False

        .MatchWildcards = True

        .MatchSoundsLike = False

        .MatchAllWordForms = False

        .Execute Replace:=wdReplaceOne

    End With

End Function