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 :

Pb de recherche par Find en VBA


Sujet :

VBA Word

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 103
    Points : 58
    Points
    58
    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 : 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
     
    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

  2. #2
    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 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 :

    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).

    @+

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 103
    Points : 58
    Points
    58
    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+

  4. #4
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Peut-être un peu plus facile :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 103
    Points : 58
    Points
    58
    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.

  6. #6
    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 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 : 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
    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
    @+

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    103
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 103
    Points : 58
    Points
    58
    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

  8. #8
    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 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    For aI = 1 To ActiveDocument.Sections.Count
            If ActiveDocument.Sections(aI).PageSetup.DifferentFirstPageHeaderFooter

Discussions similaires

  1. Recherche matricielle avec Macro VBA (Find?)
    Par Phakops92 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 23/05/2013, 15h43
  2. Recherche la fonction équivalente à Find de VBA en VB6
    Par VBAG38 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 21/12/2012, 09h54
  3. Réponses: 33
    Dernier message: 22/08/2011, 14h33
  4. recherche par date vba excel
    Par fred014 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/03/2007, 13h35
  5. [VBA-E] Recupéré une recherche par find
    Par comme de bien entendu dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/11/2006, 14h58

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