Est-il possible d'attribuer un style spécifique à toutes les références croisées dans Word 2007?


32

Rien de plus à ajouter, je voudrais changer le style de toutes les références croisées que j'ai dans un document Word 2007 à la fois. Mais je ne sais pas comment le faire. Comment cela peut-il être fait?


Bonne question, je n'ai rien trouvé de rapide et de sale. Mais je pense que c'est lié au style de tout le document
Ivo Flipse

1
@Ivo, oui, je pense aussi que c'est quelque chose lié au style du document, mais je suis un pauvre développeur SW avec peu d'expérience avec Word :)
Drake

@marco: voir ma réponse mise à jour
pause jusqu'à nouvel ordre.

oui, excellente réponse merci beaucoup, très très intéressant
Drake

Réponses:


38

Certains types de références croisées sont automatiquement formatés avec le style "référence intense", mais la plupart sont formatés en tant que texte "normal".

Pour appliquer le style "référence intense" au texte de la référence croisée:

  • sélectionner le texte
  • choisissez l'onglet "Accueil" dans le ruban
  • en utilisant soit les boutons haut-bas soit le bouton déroulant dans le groupe "Styles" du ruban, choisissez le style "référence intense" (ou un autre style si vous préférez)

Pour modifier l'apparence de tout le texte d'un style donné:

  • choisissez l'onglet "Accueil" dans le ruban
  • en utilisant le bouton déroulant dans le groupe "Styles" du ruban, choisissez "Appliquer les styles ..."
  • dans la boîte de dialogue "Appliquer les styles" sous "Nom du style", choisissez le nom du style que vous souhaitez modifier (par exemple "référence intense")
  • Cliquez sur le bouton "Modifier ..."
  • Modifiez la mise en forme pour vous convenir et cliquez sur "OK"

Pour appliquer un style à toutes les références croisées à la fois:

  • Appuyez sur Alt+ F9pour afficher les codes de champ
  • Sélectionnez l'onglet "Accueil" dans le ruban
  • Cliquez sur "Remplacer" dans le groupe "Edition"
  • Dans le champ "Rechercher quoi", saisissez ^19 REF
    • (C'est caret-un-neuf-espace-REF)
  • Cliquez dans le champ "Remplacer par", mais ne tapez rien
  • Cliquez sur le bouton "Plus"
  • La section inférieure de la boîte de dialogue doit être intitulée "Remplacer" (avec une règle horizontale après)
  • Cliquez sur le bouton "Format" et sélectionnez "Style ..."
  • Choisissez un style (par exemple "Référence intense") et cliquez sur OK
  • Il devrait maintenant afficher le style que vous avez sélectionné dans le champ "Remplacer par"
  • Cliquez sur "Remplacer tout" si vous vous sentez courageux ou utilisez "Rechercher suivant" et "Remplacer" pour parcourir et remplacer ou ignorer le style de chaque code de champ de référence individuellement.
  • Appuyez sur Alt+ F9pour masquer les codes de champ

Consultez cette page pour plus d'informations sur les codes spéciaux dans Rechercher et remplacer.

Voici une macro qui ajoutera le commutateur \* mergeformatà chacun des champs. Ce commutateur est nécessaire pour éviter la perte de la mise en forme si vous effectuez une mise à jour de champ. Vous pouvez affecter la macro à une séquence de touches et elle parcourra les champs un par un pour chaque fois que vous appuyez sur la touche. Vous pouvez également modifier la macro pour faire une boucle sur tout le document afin d'automatiser le processus.

Sub mf()
'
' mf Macro
' Find cross references and add \* mergeformat
'
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = "^19 REF"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.MoveLeft Unit:=wdCharacter, Count:=1
    Selection.TypeText Text:="\* mergeformat "
    Selection.Find.Execute
End Sub

en fait la plupart des références sinon toutes sont créées par défaut avec du texte normal. Merci pour la réponse, mais dans ce cas, je dois définir manuellement le style de chacun avant de pouvoir mettre à jour le style pour tous à la fois. Je cherchais une méthode capable d'automatiser la première étape du processus
Drake

6
wow, je ne connaissais pas cette utilisation avancée de find / replace, très utile
Drake

6
Vous répondez est un petit bijou de connaissances condensées. Vaut son propre wiki!
Grimace of Despair

5
Jésus-Christ ... cela fonctionne très bien mais la chose est: pourquoi rendre si difficile d'appliquer un style aux références croisées!? ;)
Leniel Maccaferri

sur MS Word 16.9.1 sur Mac, cela fonctionne (n'a pas essayé la macro), mais la recherche / remplacement n'est pas sur le ruban d'accueil (je pense?), mais à la place dans le menu sous Édition-> Rechercher-> Avancé Trouver et remplacer ...
Michael

5
  • Appuyez sur Alt+ F9pour afficher les codes de champ
  • Utilisez la macro suivante pour ajouter CHARFORMAT à toutes les références croisées. Cette macro ajoute la chaîne au champ uniquement si elle n'est pas déjà là.

    Sub SetCHARFORMAT()
    '
    ' Set CHARFORMAT switch to all {REF} fields. Replace MERGEFORMAT.
    '
    '
        Dim oField As Field
        Dim oRng As Range
        For Each oField In ActiveDocument.Fields
        'For Each oField In Selection.Fields
            If InStr(1, oField.Code, "REF ") = 2 Then
                If InStr(1, oField.Code, "MERGEFORMAT") <> 0 Then
                    oField.Code.Text = Replace(oField.Code.Text, "MERGEFORMAT", "CHARFORMAT")
                End If
                If InStr(1, oField.Code, "CHARFORMAT") = 0 Then
                    oField.Code.Text = oField.Code.Text + "\* CHARFORMAT "
                End If
            End If
        Next oField
    
    
    End Sub
  • Utilisez cette macro pour formater toutes les références croisées avec le style "Subtle Reference" (assurez-vous que vous disposez d'un tel style et que les codes de champ sont affichés):

    Sub SetCrossRefStyle()
    '
    ' Macro to set styole of all cross references to "Subtle Reference"
    '
    '
        Selection.Find.ClearFormatting
        Selection.Find.Replacement.ClearFormatting
        Selection.Find.Replacement.Style = ActiveDocument.Styles( _
            "Subtle Reference")
        With Selection.Find
            .Text = "^19 REF"
            .Replacement.Text = ""
            .Forward = True
            .Wrap = wdFindContinue
            .Format = True
            .MatchCase = False
            .MatchWholeWord = False
            .MatchKashida = False
            .MatchDiacritics = False
            .MatchAlefHamza = False
            .MatchControl = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        Selection.Find.Execute Replace:=wdReplaceAll
    End Sub
  • Appuyez sur Alt+ F9pour masquer les codes de champ


3

en éditant la macro téléchargée par le cyborg, nous pouvons facilement automatiser l'affichage et le masquage des codes de champ. de sorte que chaque fois que nous souhaitons mettre à jour, nous ne devons pas utiliser les codes de champ à bascule. J'ai utilisé le code suivant pour ajouter la bascule de code de champ.

ActiveDocument.ActiveWindow.View.ShowFieldCodes = False

La macro complète est la suivante:

Sub SetCrossRefStyle()
'
' Macro to set styole of all cross references to "Subtle Reference"
'
'
ActiveDocument.ActiveWindow.View.ShowFieldCodes = True
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
Selection.Find.Replacement.Style = ActiveDocument.Styles( _
    "Subtle Reference")
With Selection.Find
    .Text = "^19 REF"
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindContinue
    .Format = True
    .MatchCase = False
    .MatchWholeWord = False
    .MatchKashida = False
    .MatchDiacritics = False
    .MatchAlefHamza = False
    .MatchControl = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
ActiveDocument.ActiveWindow.View.ShowFieldCodes = False
End Sub

C'est la première fois que j'utilise des macros pour accélérer mon travail dans Word. merci cyborg pour cette macro utile.


0

Manière rapide et efficace:

  1. Sélectionnez du texte avec le formatage que vous souhaitez utiliser pour les références.
  2. Sélectionnez la maison onglet dans le ruban.
  3. Cliquez avec le bouton droit sur le style Normal et choisissez Mettre à jour Normal pour correspondre à la sélection .
  4. Mise à jour des références avec Ctrl+ A, F9.

0

Cette macro ouvre la boîte de dialogue Référence croisée pour insérer une référence croisée à la position actuelle du curseur.

Lorsque vous fermez la boîte de dialogue Xréf après avoir inséré la référence, la macro reprend pour formater la référence croisée insérée en exposant.

Sub XrefSuper()
'
' This opens the Cross Reference dialogue box to insert a cross reference at the current cursor position.
'   When the dialogue box is closed after inserting the reference the macro resumes to format the inserted cross reference to superscript.
'
'
Dim wc As Integer
    wc = ActiveDocument.Characters.Count

Dim dlg As Dialog
    Set dlg = Dialogs(wdDialogInsertCrossReference)
        dlg.Show 'Open dialogue and perform the insertion from the dialog box) 
                 'Macro continues after closing CrossRef dialogue box

    If wc = ActiveDocument.Characters.Count Then Exit Sub   'If we failed to insert something then exit

    Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
    Selection.Font.Superscript = wdToggle
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.Font.Superscript = wdToggle
End Sub

Merci à Graham Skan chez ExpertsExchange d' avoir ouvert la boîte de dialogue Xréf.


0

Combiner les réponses ci-dessus avec une autre fonction pour parcourir les `` histoires '' du document, pour appliquer un style au corps du document, aux en-têtes, aux pieds de page et au texte sur les formes.

Appelez simplement la macro SetCrossRefStyle () ci-dessous pour appliquer le style "Référence intense" à toutes les références croisées.

Sub m_SetCHARFORMAT(textRanges As Collection)
' https://superuser.com/questions/13531/is-it-possible-to-assign-a-specific-style-to-all-cross-references-in-word-2007
'
' Set CHARFORMAT switch to all {REF} fields. Replace MERGEFORMAT.
' Requires ActiveDocument.ActiveWindow.View.ShowFieldCodes = True
'
    Dim oField As Field
    Dim oRng As Range
    For Each oRng In textRanges
        For Each oField In oRng.Fields
            If InStr(1, oField.Code, "REF ") = 2 Then
                If InStr(1, oField.Code, "MERGEFORMAT") <> 0 Then
                    oField.Code.Text = Replace(oField.Code.Text, "MERGEFORMAT", "CHARFORMAT")
                End If
                If InStr(1, oField.Code, "CHARFORMAT") = 0 Then
                    oField.Code.Text = oField.Code.Text + "\* CHARFORMAT "
                End If
            End If
        Next oField
    Next oRng
End Sub


Sub m_AddCrossRefStyle(textRanges As Collection)
' https://superuser.com/questions/13531/is-it-possible-to-assign-a-specific-style-to-all-cross-references-in-word-2007
'
' Macro to set style of all cross references to "Intense Reference"
' Requires ActiveDocument.ActiveWindow.View.ShowFieldCodes = True
'
    For Each oRng In textRanges
        oRng.Find.ClearFormatting
        oRng.Find.Replacement.ClearFormatting
        oRng.Find.Replacement.Style = ActiveDocument.Styles("Intense Reference")
        With oRng.Find
            .Text = "^19 REF"
            .Replacement.Text = ""
            .Forward = True
            .Wrap = wdFindContinue
            .Format = True
            .MatchCase = False
            .MatchWholeWord = False
            .MatchKashida = False
            .MatchDiacritics = False
            .MatchAlefHamza = False
            .MatchControl = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
        End With
        oRng.Find.Execute Replace:=wdReplaceAll
    Next oRng
End Sub


Function m_GetAllTextRanges() As Collection
' https://wordmvp.com/FAQs/Customization/ReplaceAnywhere.htm
' https://www.mrexcel.com/forum/excel-questions/443052-returning-collection-function.html
'
' Get text ranges in all document parts.
'
    Set m_GetAllTextRanges = New Collection
    For Each rngStory In ActiveDocument.StoryRanges
        'Iterate through all linked stories
        Do
            m_GetAllTextRanges.Add rngStory
            On Error Resume Next
            Select Case rngStory.StoryType
                Case 6, 7, 8, 9, 10, 11
                If rngStory.ShapeRange.Count > 0 Then
                    For Each oShp In rngStory.ShapeRange
                        If oShp.TextFrame.HasText Then
                            m_GetAllTextRanges.Add oShp.TextFrame.TextRange
                        End If
                    Next
                End If
                Case Else
                    'Do Nothing
            End Select
            On Error GoTo 0
            'Get next linked story (if any)
            Set rngStory = rngStory.NextStoryRange
        Loop Until rngStory Is Nothing
    Next
End Function

Sub SetCrossRefStyle()
'
' 1. Get all text ranges since Selection.Find only works on document body, but not on headers/footers
' 2. Add CHARFORMAT to make styling persistent
' 3. Add styling to all references
'
    Dim textRanges As Collection
    Set textRanges = m_GetAllTextRanges
    ActiveDocument.ActiveWindow.View.ShowFieldCodes = True
    m_SetCHARFORMAT textRanges
    m_AddCrossRefStyle textRanges
    ActiveDocument.ActiveWindow.View.ShowFieldCodes = False
End Sub
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.