IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Word Discussion :

Comment supprimer les styles perso non utilisés ?


Sujet :

VBA Word

  1. #21
    Membre actif
    Avatar de Golard
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 281
    Points : 289
    Points
    289
    Par défaut
    Bonjour Sepia,

    De retour de vacances, je me repenche sur le dossier "détection des styles utilisés" que tu avais "presque" entièrement résolu.

    Concernant, le style de tableau "TableTest", effectivement j'ai du me tromper de fichier test et je t'enverrais un autre fichier plus tard (pour ne pas tout mélanger).

    Concentrons nous, pour l'instant, sur les styles "Pied de page Num" (dans le pied de page) et "a_vertical" (texte dans une shape du pied de page).

    Dans ton dernier message, tu n'arrivais pas à détecter le style "a_vertical". As-tu du nouveau sur ce sujet ?

    J'aimerais vraiment utiliser le fruit de notre travail dans une procédure fonctionnelle qui ne risque pas de supprimer des styles non détectés par erreur ...

    Merci d'avance et @ bientôt j'espère

    Développement VBNet sous Visual Studio Community 2013 (environnement Windows 10)

  2. #22
    Expert éminent
    Avatar de Sepia
    Homme Profil pro
    Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Inscrit en
    Octobre 2007
    Messages
    3 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 3 117
    Points : 6 856
    Points
    6 856
    Par défaut
    Salut Golard,

    Désolé, j'ai perdu le fil aussi. Je m'y remets (le champagne me motive mais bien frais vu le temps qu'on a en Bretagne depuis début juillet)

    @+

  3. #23
    Expert éminent
    Avatar de Sepia
    Homme Profil pro
    Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Inscrit en
    Octobre 2007
    Messages
    3 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 3 117
    Points : 6 856
    Points
    6 856
    Par défaut
    Salut Golard,

    Je viens de reprendre les commentaires de mon dernier post et de refaire les tests et c'est OK avec la restriction des Shapes dans les entêtes/pieds de pages.

    @+

  4. #24
    Membre actif
    Avatar de Golard
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 281
    Points : 289
    Points
    289
    Par défaut
    Citation Envoyé par Sepia Voir le message
    (...)c'est OK avec la restriction des Shapes dans les entêtes/pieds de pages.(...)
    Comment dois-je comprendre c'est OK ?
    Tu veux dire qu'on ne pourra pas détecter le style utilisé dans mon libellé vertical ?
    Snif...est-ce définitif ?
    Car dans ce cas, la fonction de suppression des styles persos inutilisés reste inutilisable ... et je vois l'apéro s'éloigner

    Développement VBNet sous Visual Studio Community 2013 (environnement Windows 10)

  5. #25
    Expert éminent
    Avatar de Sepia
    Homme Profil pro
    Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Inscrit en
    Octobre 2007
    Messages
    3 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 3 117
    Points : 6 856
    Points
    6 856
    Par défaut
    Salut Golard,

    Il faut quand même reprendre les tests avec tes documents pour voir ce qui fonctionne (ou pas) et avec ta version Word 2007 (j'ai Word 2010).

    Je ne connais pas tes besoins mais as tu besoin de supprimer TOUS les styles perso non utilisés ? Peut-on envisager de modifier le document pour transformer les objets "récalcitrants" en objets qui répondent à la macro (Shapes ==> InlineShapes par exemple...) ?

    C'est dommage de s'arrêter si près du but (enfin on semble près) et donc si près du champagne .
    @+

  6. #26
    Membre actif
    Avatar de Golard
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 281
    Points : 289
    Points
    289
    Par défaut
    Bonsoir Sepia,

    Tu as raison, il ne faut pas baisser les bras !

    J'ai refait les tests avec ta dernière version. Je l'ai modifiée juste pour ajouter des Debug.print comme ci-dessous:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    Sub StylesSupprimePersonnelsNonUtilisesSurToutLeDocDerniereVersionSepia()
     '==================================================SEPIA
        ReDim aMesStyles(0 To 0) As String
     
        Debug.Print "========================================================="
        Debug.Print " Recherche styles non utilisés dans " & ActiveDocument.Name
        Debug.Print "========================================================="
     
        aNbStylesNonUtilises = -1
        Dim oMesStyles As Style
        For Each oMesStyles In ActiveDocument.Styles
                If oMesStyles.BuiltIn = False Then
                    With ActiveDocument.Content.Find
                        .ClearFormatting
                        .Style = oMesStyles.NameLocal
                        .Forward = wdFindContinue
                        .Format = True
                        .Execute FindText:="^?"
                        If Not (.Found) Then
                            .Style = oMesStyles.NameLocal & " car"
                            .Execute FindText:="^?", Format:=True
                            If Not (.Found) Then
                                aNbStylesNonUtilises = aNbStylesNonUtilises + 1
                                ReDim Preserve aMesStyles(0 To aNbStylesNonUtilises) As String
                                aMesStyles(aNbStylesNonUtilises) = oMesStyles.NameLocal
                            Else
                                Debug.Print "TROUVé grâce à la prise en compte du bug ' car': " & oMesStyles.NameLocal
                            End If
                        Else
                            Debug.Print "TROUVé en 1ère recherche: " & oMesStyles.NameLocal
                        End If
                    End With
                End If
        Next oMesStyles
     
        Debug.Print "-----------"
        For aJ = LBound(aMesStyles) To UBound(aMesStyles)
            If aMesStyles(aJ) <> "" Then
                Debug.Print "Non TROUVé après 1ère recherche: " & aMesStyles(aJ)
            End If
        Next
        Debug.Print "-----------"
     
     
        '// On teste si le style n'est pas utilisé dans des Shapes
        For aI = 1 To ActiveDocument.Shapes.Count
            For aJ = LBound(aMesStyles) To UBound(aMesStyles)
                If aMesStyles(aJ) <> "" Then
                    With ActiveDocument.Shapes(aI).TextFrame.TextRange.Find
                        .ClearFormatting
                        .Style = aMesStyles(aJ)
                        .Forward = wdFindContinue
                        .Format = True
                        .Execute FindText:="^?"
                        If .Found Then
                            Debug.Print "TROUVé dans une shape: " & aMesStyles(aJ)
                            aMesStyles(aJ) = ""
                        End If
                    End With
                End If
            Next
        Next
     
        Debug.Print "-----------"
        For aJ = LBound(aMesStyles) To UBound(aMesStyles)
            If aMesStyles(aJ) <> "" Then
                Debug.Print "Non TROUVé après recherche dans les shapes: " & aMesStyles(aJ)
            End If
        Next
        Debug.Print "-----------"
     
        '// On teste si le style n'est pas utilisé dans d'autres Story
        For Each myStoryRange In ActiveDocument.StoryRanges
            For aJ = LBound(aMesStyles) To UBound(aMesStyles)
                If aMesStyles(aJ) <> "" Then
                    With myStoryRange.Find
                        .ClearFormatting
                        .Style = aMesStyles(aJ)
                        .Forward = wdFindContinue
                        .Format = True
                        .Execute FindText:="^?"
                        If .Found Then
                            Debug.Print "TROUVé d'autres Story: " & aMesStyles(aJ)
                            aMesStyles(aJ) = ""
                        End If
                    End With
                End If
            Next
        Next myStoryRange
     
     
        '// Liste des styles non utilisés
    '    MsgBox "Liste des styles non utilisés (dans les story demandées)"
    '    For aJ = LBound(aMesStyles) To UBound(aMesStyles)
    '        If aMesStyles(aJ) <> "" Then
    '            MsgBox "***" + aMesStyles(aJ) + "***"
    '        End If
    '    Next
     
        Debug.Print "-----------"
        For aJ = LBound(aMesStyles) To UBound(aMesStyles)
            If aMesStyles(aJ) <> "" Then
                Debug.Print "Non TROUVé après recherche dans d'autres Story: " & aMesStyles(aJ)
            End If
        Next
        Debug.Print "-----------"
     
        Debug.Print "========================================================="
        Debug.Print " Fin de recherche"
        Debug.Print "========================================================="
     
    '=======================================================FIN SEPIA
     
    End Sub
    Et voici ce que donne l'exécution de cette routine, toujours sur le même docx de test, et sous Word 2007:

    =========================================================
    Recherche styles non utilisés dans TestDetectionDeStylesAvecPiedDePage (2).docx
    =========================================================
    TROUVé grâce à la prise en compte du bug ' car': a_titre-table
    TROUVé en 1ère recherche: Grille claire - Accent 11
    TROUVé en 1ère recherche: Grille claire1
    TROUVé en 1ère recherche: Grille couleur1
    TROUVé en 1ère recherche: Grille moyenne 11
    TROUVé en 1ère recherche: Grille moyenne 21
    TROUVé en 1ère recherche: Grille moyenne 31
    TROUVé en 1ère recherche: Liste claire - Accent 11
    TROUVé en 1ère recherche: Liste claire1
    TROUVé en 1ère recherche: Liste couleur1
    TROUVé en 1ère recherche: Liste foncée1
    TROUVé en 1ère recherche: Liste moyenne 1 - Accent 11
    TROUVé en 1ère recherche: Liste moyenne 11
    TROUVé en 1ère recherche: Liste moyenne 21
    TROUVé en 1ère recherche: Mon normal
    TROUVé grâce à la prise en compte du bug ' car': Mon titre du livre
    TROUVé en 1ère recherche: Ombrage clair1
    TROUVé en 1ère recherche: TableTest
    TROUVé en 1ère recherche: Trame claire - Accent 11
    TROUVé en 1ère recherche: Trame couleur1
    TROUVé en 1ère recherche: Trame moyenne 1 - Accent 11
    TROUVé en 1ère recherche: Trame moyenne 11
    TROUVé en 1ère recherche: Trame moyenne 2 - Accent 11
    TROUVé en 1ère recherche: Trame moyenne 21
    -----------
    Non TROUVé après 1ère recherche: a_theme
    Non TROUVé après 1ère recherche: a_vertical
    Non TROUVé après 1ère recherche: Pied de page Num
    -----------
    -----------
    Non TROUVé après recherche dans les shapes: a_theme
    Non TROUVé après recherche dans les shapes: a_vertical
    Non TROUVé après recherche dans les shapes: Pied de page Num
    -----------
    TROUVé d'autres Story: Pied de page Num
    -----------
    Non TROUVé après recherche dans d'autres Story: a_theme
    Non TROUVé après recherche dans d'autres Story: a_vertical
    -----------
    =========================================================
    Fin de recherche
    =========================================================
    la conclusion est que :
    1) grace à ta ruse pour le bug " car", on réussi à détecter le style "Mon titre du livre" appliqué seulement à certains mots d'un paragraphe
    2) grace à ta recherche dans les storyrange (???), on réussi à détecter le style "Pied de page Num" présent dans le pied de page
    3) le style "a_vertical" n'est pas détecté

    Concernant l'utilisation que je souhaitais en faire, c'est simple:
    Je vérifie des documents docx (par VBA) en mettant à jour certains styles, parfois en ajoutant de nouveaux styles, en mettant en page...
    Au début de cette "vérification", je souhaite épurer le docx de tous les styles personnalisés qui ne sont pas utilisés. Il est impératif que je ne supprime pas un style qui est utilisé car sinon je perds la mise en forme !!!

    Dans l'état, si j'utilise le code ci-dessus, je vais épurer a_theme (qui n'est effectivement pas utilisé) et a-vertical. Le libellé vertical va donc perdre sa mise en forme. Ensuite, même si je créé à nouveau a_vertical dans la liste des styles du document, il ne sera plus appliqué au libellé vertical...

    J'espère que je n'ai pas été trop confus... Sinon n'hésite pas à me demander.

    Concernant le style de tableau, je mets ce détail de coté pour l'instant car les styles de tableau n'ont pas l'air de faire partie de la collection ActiveDocument.Styles. Donc je ne les supprimerais pas de toute façon. Pour information, il suffit que tu créés un tableau dans mon document de test, puis que tu ailles sur l'onglet "Création". Tu y trouveras le style personnalisé que j'ai créé : il s'appelle "TableTest" (dans les tons bordeaux). Tu peux aussi le trouver dans la liste des style en choisissant "Gestion des styles"...

    Développement VBNet sous Visual Studio Community 2013 (environnement Windows 10)

  7. #27
    Expert éminent
    Avatar de Sepia
    Homme Profil pro
    Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Inscrit en
    Octobre 2007
    Messages
    3 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 3 117
    Points : 6 856
    Points
    6 856
    Par défaut
    Salut Golard,

    J'ai avancé et j'arrive à détecter le style non utilisé "a_vertical" mais pas dans une macro, j'y ai passé la nuit à m'arracher les (enfin le peu de) cheveux qui me restent. Je reprends ce soir. Mais j'ai espoir de goûter au champ .

    @+

  8. #28
    Expert éminent
    Avatar de Sepia
    Homme Profil pro
    Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Inscrit en
    Octobre 2007
    Messages
    3 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 3 117
    Points : 6 856
    Points
    6 856
    Par défaut
    Salut Golard,

    J'ai réussi avec le fichier de tests (mais en pleurant beaucoup).

    Alles, j'arrête le suspens voici le code mais en fait, ce code montre 3 bugs de Word
    • La mauvaise détection de l’utilisation des styles (variable InUse incorrectement renseignée) que tu avais déjà détecté
    • Les libellés
    • la non-détection des shapes dans les entêtes/pieds de pages)


    Allez pour ne plus attendre, voici le code (pour simplifier, je suis reparti du tien pour tes tests)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
     
    Sub DetecterStylesPersonnelsNonUtilisesSurToutLeDocAvecRusePourBugWordSurLeLibelleDuStyleEtPourBugWordSurLesShapes()
     '==================================================SEPIA
        ReDim aMesStyles(0 To 0) As String
     
        Debug.Print "========================================================="
        Debug.Print " Recherche styles non utilisés dans " & ActiveDocument.Name
        Debug.Print "========================================================="
     
        aNbStylesNonUtilises = -1
        Dim oMesStyles As Style
        For Each oMesStyles In ActiveDocument.Styles
                If oMesStyles.BuiltIn = False Then
                    With ActiveDocument.Content.Find
                        .ClearFormatting
                        .Style = oMesStyles.NameLocal
                        .Forward = wdFindContinue
                        .Format = True
                        .Execute FindText:="^?"
                        If Not (.Found) Then
                            .Style = oMesStyles.NameLocal & " car"
                            .Execute FindText:="^?", Format:=True
                            If Not (.Found) Then
                                aNbStylesNonUtilises = aNbStylesNonUtilises + 1
                                ReDim Preserve aMesStyles(0 To aNbStylesNonUtilises) As String
                                aMesStyles(aNbStylesNonUtilises) = oMesStyles.NameLocal
                            Else
                                Debug.Print "TROUVé grâce à la prise en compte du bug ' car': " & oMesStyles.NameLocal
                            End If
                        Else
                            Debug.Print "TROUVé en 1ère recherche: " & oMesStyles.NameLocal
                        End If
                    End With
                End If
        Next oMesStyles
     
        Debug.Print "-----------"
        For aI = LBound(aMesStyles) To UBound(aMesStyles)
            If aMesStyles(aI) <> "" Then
                Debug.Print "Non TROUVé après 1ère recherche: " & aMesStyles(aI)
            End If
        Next
        Debug.Print "-----------"
     
        '// Ruse de sioux ==> comme Word ne détecte pas correctement les zones de texte dans les entêtes/pieds de pages, on les transforme en cadres !!!
        ActiveDocument.Save
        For aI = 1 To ActiveDocument.Sections.Count
            For aJ = 1 To ActiveDocument.Sections(aI).Headers(wdHeaderFooterPrimary).Shapes.Count
                If ActiveDocument.Sections(aI).Headers(wdHeaderFooterPrimary).Shapes(aJ).Type = msoTextBox Then
                    ActiveDocument.Sections(aI).Headers(wdHeaderFooterPrimary).Shapes(aJ).ConvertToFrame
                End If
            Next
            If ActiveDocument.Sections(aI).PageSetup.DifferentFirstPageHeaderFooter Then
                For aJ = 1 To ActiveDocument.Sections(aI).Headers(wdHeaderFooterFirstPage).Shapes.Count
                    If ActiveDocument.Sections(aI).Headers(wdHeaderFooterFirstPage).Shapes(aJ).Type = msoTextBox Then
                        ActiveDocument.Sections(aI).Headers(wdHeaderFooterFirstPage).Shapes(aJ).ConvertToFrame
                    End If
                Next
            End If
            If ActiveDocument.Sections(aI).PageSetup.OddAndEvenPagesHeaderFooter Then
                For aJ = 1 To ActiveDocument.Sections(aI).Headers(wdHeaderFooterEvenPages).Shapes.Count
                    If ActiveDocument.Sections(aI).Headers(wdHeaderFooterEvenPages).Shapes(aJ).Type = msoTextBox Then
                        ActiveDocument.Sections(aI).Headers(wdHeaderFooterEvenPages).Shapes(aJ).ConvertToFrame
                    End If
                Next
            End If
            For aJ = 1 To ActiveDocument.Sections(aI).Footers(wdHeaderFooterPrimary).Shapes.Count
                If ActiveDocument.Sections(aI).Footers(wdHeaderFooterPrimary).Shapes(aJ).Type = msoTextBox Then
                    ActiveDocument.Sections(aI).Footers(wdHeaderFooterPrimary).Shapes(aJ).ConvertToFrame
                End If
            Next
            If ActiveDocument.Sections(aI).PageSetup.DifferentFirstPageHeaderFooter Then
                For aJ = 1 To ActiveDocument.Sections(aI).Footers(wdHeaderFooterFirstPage).Shapes.Count
                    If ActiveDocument.Sections(aI).Footers(wdHeaderFooterFirstPage).Shapes(aJ).Type = msoTextBox Then
                        ActiveDocument.Sections(aI).Footers(wdHeaderFooterFirstPage).Shapes(aJ).ConvertToFrame
                    End If
                Next
            End If
            If ActiveDocument.Sections(aI).PageSetup.OddAndEvenPagesHeaderFooter Then
                For aJ = 1 To ActiveDocument.Sections(aI).Footers(wdHeaderFooterEvenPages).Shapes.Count
                    If ActiveDocument.Sections(aI).Footers(wdHeaderFooterEvenPages).Shapes(aJ).Type = msoTextBox Then
                        ActiveDocument.Sections(aI).Footers(wdHeaderFooterEvenPages).Shapes(aJ).ConvertToFrame
                    End If
                Next
            End If
        Next
     
     
        '// On teste si le style n'est pas utilisé dans des Shapes
        For aI = 1 To ActiveDocument.Shapes.Count
            For aJ = LBound(aMesStyles) To UBound(aMesStyles)
                If aMesStyles(aJ) <> "" Then
                    With ActiveDocument.Shapes(aI).TextFrame.TextRange.Find
                        .ClearFormatting
                        .Style = aMesStyles(aJ)
                        .Forward = wdFindContinue
                        .Format = True
                        .Execute FindText:="^?"
                        If .Found Then
                            Debug.Print "TROUVé dans une shape: " & aMesStyles(aJ)
                            aMesStyles(aJ) = ""
                        End If
                    End With
                End If
            Next
        Next
     
        Debug.Print "-----------"
        For aI = LBound(aMesStyles) To UBound(aMesStyles)
            If aMesStyles(aI) <> "" Then
                Debug.Print "Non TROUVé après recherche dans les shapes: " & aMesStyles(aI)
            End If
        Next
        Debug.Print "-----------"
     
     
     
        '// On teste si le style n'est pas utilisé dans d'autres Story
        For Each myStoryRange In ActiveDocument.StoryRanges
            For aJ = LBound(aMesStyles) To UBound(aMesStyles)
                If aMesStyles(aJ) <> "" Then
                    With myStoryRange.Find
                        .ClearFormatting
                        .Style = aMesStyles(aJ)
                        .Forward = wdFindContinue
                        .Format = True
                        .Execute FindText:="^?"
                        If .Found Then
                            Debug.Print "TROUVé d'autres Story: " & aMesStyles(aJ)
                            aMesStyles(aJ) = ""
                        End If
                    End With
                End If
            Next
        Next myStoryRange
     
     
        '// On annule les modifications des transformations des shapes en frames
        ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges
        RecentFiles(1).Open
     
     
        Debug.Print "-----------"
        For aI = LBound(aMesStyles) To UBound(aMesStyles)
            If aMesStyles(aI) <> "" Then
                Debug.Print "Non TROUVé après recherche dans d'autres Story: " & aMesStyles(aI)
            End If
        Next
        Debug.Print "-----------"
     
        Debug.Print "========================================================="
        Debug.Print " Fin de recherche"
        Debug.Print "========================================================="
     
    '=======================================================FIN SEPIA
    End Sub
    La détection fonctionne pour les documents avec des sections avec entêtes et des pieds de page (avec ou sans "Première page différente" et avec ou sans "Pages paires/impaires différentes").

    Evidemment avec ces bugs, on ne peut pas garantir de façon formelle que tous les styles non utilisés sont correctement utilisés. Mais je pense que oui dans l'état actuel de mes connaissances (donc dans pas mal de cas standards quand même). Si tu trouves d'autres documents avec des détections incorrectes, envoie pour qu'on puisse blinder le code.

    @+ (hips)

  9. #29
    Expert éminent
    Avatar de Sepia
    Homme Profil pro
    Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Inscrit en
    Octobre 2007
    Messages
    3 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Administrateur du cursus IDE@L - Chef de Projet NCU (digital learning) - Université de Rennes
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 3 117
    Points : 6 856
    Points
    6 856
    Par défaut
    Salut Golard,

    Je viens de tester la macro sur plusieurs documents qui provenaient de plusieurs sources différentes et pour le moment pas d'erreur. Et de ton côté, as-tu pu avancer sur ton doc ?

    @+

  10. #30
    Membre actif
    Avatar de Golard
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 281
    Points : 289
    Points
    289
    Par défaut
    Bonjour Sepia,

    Le Graal nous tends les mains

    J'ai tester la nouvelle version du code avec l'ajout de la conversion des shapes sur notre fichier test, et ça fonctionne.

    Cependant, il va me falloir un peu plus de temps pour l'intégrer à mon programme. En effet, le fait de devoir refermer le fichier sans l'enregistrer va compliquer un peu mon traitement car dans le code actuel je suis déjà en cours de modification quand je lance la suppression des styles non utilisés.
    • Il va donc falloir que j'envisage une première ouverture "pour rien", juste pour renseigner un tableau des styles à supprimer, puis refermer le fichier et le réouvrir cette fois-ci pour modification.
    • Une autre solution que je vais devoir étudier serait de créer mes libellés verticaux dans des frames et non pas dans des shapes, si toutefois c'est possible (car si mes souvenirs sont bons, les shapes étaient la seule façon que j'avais réussi à faire fonctionner pour créer mes libellés verticaux).


    Il va aussi falloir que je teste la nouvelle version du code sur un fichier un peu plus complet : avec tableaux word + notes de bas de page + encadrés. As-tu déjà testés des docx incluant ces éléments ?
    Je reviens vers toi avec ces réponses de toutes façons.

    Par ailleurs as-tu compris dans quelle collection peut bien se trouver le style de tableau "TableTest" (dont je parle dans le post #26) ???

    En attendant de te rafraichir, profite des quelques rayons de soleil que nous offre cet été !

    Développement VBNet sous Visual Studio Community 2013 (environnement Windows 10)

  11. #31
    Membre actif
    Avatar de Golard
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2009
    Messages
    281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 281
    Points : 289
    Points
    289
    Par défaut
    Bonjour Sepia,

    Je compte prochainement me repencher sur la localisation des styles non utilisés (encore quelques autres priorités à solutionner avant)

    En attendant voici 2 infos intéressantes pour améliorer le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (...)
    With ActiveDocument.Shapes(aI).TextFrame.TextRange.Find
    (...)
    Le TextFrame n'existe pas pour les shapes de type 13 (msoPicture), tandis que le TextRange n'est pas pris en charge pour les shapes de type 20 (msoCanvas), donc il faut tester le type de shape avant d'accéder au TextFrame.TextRange !

    Voilà, à bientôt pour la suite

    Développement VBNet sous Visual Studio Community 2013 (environnement Windows 10)

Discussions similaires

  1. Comment supprimer les doublons
    Par djelloulc dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 17/09/2013, 14h30
  2. Comment supprimer les doublons?
    Par Dnx dans le forum Langage SQL
    Réponses: 3
    Dernier message: 24/11/2005, 16h35
  3. Comment supprimer les tags RTF
    Par Dnx dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 20/09/2005, 14h55
  4. [String] Comment supprimer les accents
    Par iuz dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 08/03/2004, 02h58
  5. Comment utiliser les styles XP avec Dev-C++?
    Par abraxas dans le forum Dev-C++
    Réponses: 3
    Dernier message: 05/10/2003, 19h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo