Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/02/2011, 11h19   #1
Candidat au titre de Membre du Club
 
Inscription : juillet 2009
Messages : 45
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 45
Points : 10
Points : 10
Par défaut Pb de recherche par Find en VBA

Bonjour,

Un peu d'aide SVP je sèche.

Je cherche à faire du ménage dans les styles de mes documents de manière automatque. Je recherche donc par macro les styles non standards de Word inutilisés. Malheureusement, si le style est utilisé dans l'en-tête, il me retourne not found !

Voici un bout de code que j'ai utilisé pour tester.

Code :
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
 
Sub Macro1()
 
Dim docActive As Document
Dim strMessage As String
Dim styleLoop As Style
Dim myRange As Range
 
Set docActive = ActiveDocument
Set myRange = ActiveDocument.Range
 
strMessage = "Styles non utilisés :" & vbCr
 
For Each styleLoop In docActive.Styles
    If styleLoop.BuiltIn = False Then
        If styleLoop.InUse = True Then
            With myRange.Find
                .ClearFormatting
                .Text = ""
                .Style = styleLoop
                .Format = True
                .Forward = True
                .Wrap = wdFindContinue
                .Execute
                If .Found = False Then
                    strMessage = strMessage & styleLoop.NameLocal & vbCr
                End If
            End With
        End If
    End If
Next styleLoop
 
Debug.Print strMessage
 
End Sub
Qq a une idée ?
Bonne journée
canard338 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2011, 00h57   #2
Rédacteur/Modérateur
 
Avatar de Sepia
 
Homme JF Jousseaume
Inscription : octobre 2007
Messages : 2 390
Détails du profil
Informations personnelles :
Nom : Homme JF Jousseaume
Âge : 48
Localisation : France

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 2 390
Points : 3 377
Points : 3 377
Salut Canard338,

J'ai relu ton code qui me semblait OK de premier abord ==> je l'ai recopié (bonne idée de nous le fournir directement ) et je l'ai testé mais comme j'avais mon Mac sous la main (tu te rencontres j'avais un Mac sous la main, le jour de la St-Valentin, quelle misère, enfin le débat n'est pas là), donc je teste et pareil que toi. Du coup, je cherche sur la doc Word 2007 et je ne trouve rien mais en cherchant sur la doc Word 2004 Mac, je tombe sur :

Citation:
InUse, propriété
Cette propriété a la valeur True si le style spécifié est soit un style prédéfini qui a été modifié ou appliqué dans le document, soit un nouveau style créé dans le document.
Type de données Boolean en lecture seule.
Note Cette propriété n'indique pas si le style est actuellement appliqué à du texte dans le document. Par exemple, si le texte auquel un style a été appliqué est supprimé, la
propriété InUse conserve la valeur True. Si le style spécifié est un style prédéfini qui n'a jamais été utilisé dans le document, la propriété renvoie la valeur False.
Donc InUse n'est pas un bon indicateur pour savoir si le style est utilisé ou non (mais en revanche c'est un bon indicateur pour savoir s'il a été utilisé ou non un jour).

@+
Sepia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2011, 15h07   #3
Candidat au titre de Membre du Club
 
Inscription : juillet 2009
Messages : 45
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 45
Points : 10
Points : 10
Par défaut Mais le pb est sur le Find

Oui, ça je le savais.
Mais justement, c'est pour ça que je fais un find derrière.
Et le pb c'est que le find me retourne qu'il n'a pas rencontré le style alors que ce dernier est encore utilisé mais dans l'en-tête !

Et là je sèche.

A+
canard338 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2011, 16h05   #4
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 321
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

Informations professionnelles :
Activité : Contrôleur d'industrie
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 17 321
Points : 29 219
Points : 29 219
Salut,

Peut-être un peu plus facile :

Code :
1
2
3
4
5
6
7
8
9
10
11
 
Sub StyleEnUtilisation()
Dim sty As Style
 
For Each sty In ActiveDocument.Styles
If sty.InUse Then Debug.Print sty.NameLocal
Next sty
 
 
 
End Sub
__________________
J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
Débutez en VBA

Mes articles


Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !
Heureux-oli est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2011, 17h25   #5
Candidat au titre de Membre du Club
 
Inscription : juillet 2009
Messages : 45
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 45
Points : 10
Points : 10
Par défaut Toujours pas ca

Merci pour cet essai mais comme le dit l'autre collègue, ça va nous retourner des styles qui ont été utilisés mais qui ne le sont plus forcément.

Allez encore un effort, qq a bien une solution.

Courage.
canard338 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2011, 23h28   #6
Rédacteur/Modérateur
 
Avatar de Sepia
 
Homme JF Jousseaume
Inscription : octobre 2007
Messages : 2 390
Détails du profil
Informations personnelles :
Nom : Homme JF Jousseaume
Âge : 48
Localisation : France

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 2 390
Points : 3 377
Points : 3 377
Salut Canard338,

Peux-tu essayer ça ? (Je suis encore sur mon Mac et je n'ai pas mon PC sous la main, donc je n'ai pas Word 2007)
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
For Each styleLoop In docActive.Styles
    If styleLoop.BuiltIn = False Then
            With myRange.Find
                .ClearFormatting
                .Text = "^?"
                .Style = styleLoop
                .Format = True
                .Forward = True
                .Wrap = wdFindContinue
                .Execute
                If .Found = False Then
                    strMessage = strMessage & styleLoop.NameLocal & vbCr
                End If
            End With
    End If
Next styleLoop

Debug.Print strMessage
@+
Sepia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 11h50   #7
Candidat au titre de Membre du Club
 
Inscription : juillet 2009
Messages : 45
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 45
Points : 10
Points : 10
Par défaut Et bien non

Non car le problème n'est pas sur la chaîne recherchée mais sur la plage de recherche.

Je continue ...

Bonne journée
canard338 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2011, 22h21   #8
Rédacteur/Modérateur
 
Avatar de Sepia
 
Homme JF Jousseaume
Inscription : octobre 2007
Messages : 2 390
Détails du profil
Informations personnelles :
Nom : Homme JF Jousseaume
Âge : 48
Localisation : France

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 2 390
Points : 3 377
Points : 3 377
Salut Canard338,

Essaye alors d'accéder à toutes les formes d'entêtes (il y en a au max 3 par sections) avant d'effectuer la recherche.

Code :
1
2
For aI = 1 To ActiveDocument.Sections.Count
        If ActiveDocument.Sections(aI).PageSetup.DifferentFirstPageHeaderFooter
Sepia est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h29.


 
 
 
 
Partenaires

Hébergement Web