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 :

Rechercher des paragraphes comprenant une expression et effectuer des opérations dessus


Sujet :

VBA Word

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Secrétaire assistant
    Inscrit en
    Octobre 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Secrétaire assistant
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2020
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Rechercher des paragraphes comprenant une expression et effectuer des opérations dessus
    Bonjour à toutes et tous,

    Je viens vers vous car je suis curieux et j'ai envie de me faciliter la vie sur certaines tâches de mon petit boulot en parallèle de mes études qui n'en finissent plus de finir.
    Je suis secrétaire à mi-temps et j'ai déjà réussi à faire des macros pour nettoyer des documents, insérer des éléments et automatiser de la mise en forme. Rien de bien sorcier, j'ai fait cela avec l'enregistreur de macros. Mais celui-ci montre ses limites pour ce que je veux lui faire faire et je ne trouve pas la réponse à ma question et en cherchant je n'ai pas trouvé de manière claire de faire étape par étape ce que je veux faire. Je ne veux pas forcément du tout cuit car je veux comprendre / apprendre (la seule expérience que j'ai en codage est l'adaptation de feuilles de styles xsl...). Assez raconté ma vie, voici l'idée.

    J'ai un (énormément) document, dans lequel j'ai des paragraphes qui correspondent à des citations de pièces (vous l'aurez deviné, je suis secrétaire dans un cabinet d'avocats). J'aurais souhaité faire une macro qui me permette :
    - de trouver tous les paragraphes qui commencent par "Pièce n°"
    - qu'ils soient tous sélectionnés en même temps
    - de m'assurer, s'ils ne le sont pas déjà, que ceux-ci sont bien en gras et affectés d'une tabulation (ça je peux le faire à la main), la fonction pourrait s'arrêter après le deuxième tiret.
    - de les copier dans le presse papier, de manière à ce que je puisse les coller ensuite dans la trame qui correspond au bordereau des pièces
    Je ne souhaite pas passer par des styles car j'ai peur de mettre le souk dans nos modèles et je ne suis pas le seul à me servir du poste et passer par une recherche de texte permettrait de m'en servir pour d'autres choses.
    Je vous joint un document exemple.
    La seule chose que j'ai trouvé sur le forum est ce fil.

    avec bien sûr ce code qui m'a semblé être du tout cuit pour mon cas :

    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
    dim texte as string
    dim cherché as string
    dim trouvé as Integer
    Cherché = "Octave"
    For each paragraphe in activedocument.paragraphs
        paragraphe.select
        texte = selection.text
        'Puisque VBA n'a pas de méthode, ou de fonction contains (VB.net oui),
        'il faut tricher un peu
        Trouvé = instr(texte, Cherché)
        select case Trouvé
            case is > 0
            'On l'a trouvé
                selection.copy
     
    'Coller dans l'autre document
    'Mais là, je n'ai pas le temps
    'On peut utiliser l'enregistreur de macros pour
    'avoir un canevas de code
     
           Case else
        End select
    selection.collapse
     
    next
    J'étais heureux, je n'avais qu'à remplacer "Octave" par "Pièce n°" et le tour était joué.
    Cependant en faisant cela, lorsque j'appuie sur le bouton lecture de VBA pour vérifier qu'il n'y a pas de soucis j'ai "Erreur d'exécution '438' Propriété ou méthode non gérée par cet objet. Le débogage met
    en surbrillance.

    Je vous remercie par avance de l'aide que vous pourrez m'apporter !
    Fichiers attachés Fichiers attachés

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Mpgd88 Voir le message
    Cependant en faisant cela, lorsque j'appuie sur le bouton lecture de VBA pour vérifier qu'il n'y a pas de soucis j'ai "Erreur d'exécution '438' Propriété ou méthode non gérée par cet objet. Le débogage met
    en surbrillance.
    Bonjour,

    Modifiez votre ligne comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    paragraphe.Range.Select
    Votre variable paragraphe n'est pas déclarée. En la déclarant en tête de procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim paragraphe As Paragraph
    , vous pourriez bénéficier de "l'intellisens", c'est à dire qu'en mettant un . derrière votre variable, vous auriez accès aux méthodes et aux propriétés possibles pour celle-ci comme dans ce vidage d'écran. La méthode Select n'existe pas pour l'objet Paragraph, il faut passer par son Range.

    Pièce jointe 580874

    La deuxième partie de votre document est ce qui est attendu et mis à part le formatage du numéro de pièce, je n'ai pas vu de différence avec la première partie.

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Secrétaire assistant
    Inscrit en
    Octobre 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Secrétaire assistant
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2020
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Un très grand merci pour votre réponse ! Effectivement c'est déjà mieux quand on explique ce à quoi on fait référence au programme et je vais regarder cette fonction d'intellisens.
    La macro arrive maintenant à s'exécuter mais elle ne sélectionne/copie que la dernière Pièce. Autrement dit, ne va dans le presse papier que le dernier paragraphe qui contient "Pièce n°" et j'aimerais que soient sélectionnés en même temps tous les paragraphes, comme si je faisais un ctrl+clic sur chacun d'eux.
    C'est irritant car pourtant c'est pour each paragraphe, ce qui veut dire ce que ça veut dire
    Voici le code tel qu'il est maintenant.

    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
    Sub Pièces()
    Dim paragraphe As Paragraph
    Dim texte As String
    Dim cherché As String
    Dim trouvé As Integer
    cherché = "Pièce n°"
    For Each paragraphe In ActiveDocument.Paragraphs
        paragraphe.Range.Select
        texte = Selection.Text
        trouvé = InStr(texte, cherché)
        Select Case trouvé
            Case Is > 0
              Selection.Copy
           Case Else
        End Select
    Selection.Collapse
    Next
    End Sub

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Mpgd88 Voir le message
    A 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
    36
    37
     
    Sub RechercherLesPieces()
     
    Dim DocSource As Document, DocCible As Document
    Dim ParagrapheSource As Paragraph, ParagrapheCible As Paragraph
    Dim Cherche As String
    Dim Trouve As Integer
     
        Set DocSource = ActiveDocument
        Set DocCible = Documents.Add
     
        With DocSource
     
               Cherche = "Pièce n"
     
               For Each ParagrapheSource In .Paragraphs
     
                   ParagrapheSource.Range.Select
                   Trouve = InStr(Selection.Text, Cherche)
                   Select Case Trouve
                       Case Is > 0
                           Selection.Copy
                           With DocCible
                                 Set ParagrapheCible = .Paragraphs.Add
                                 ParagrapheCible.Range.Paste
                                 Set ParagrapheCible = Nothing
                           End With
                   End Select
               Next
     
        End With
     
        Set DocSource = Nothing
        Set DocCible = Nothing
     
     
    End Sub

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    Secrétaire assistant
    Inscrit en
    Octobre 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 33
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Secrétaire assistant
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2020
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci de votre aide mais ça ne fonctionne pas, je ne peux toujours coller que le dernier paragraphe. La différence est qu'après avoir exécuté la macro et avant de coller, deux lignes apparaissent en surbrillance en dessous.
    Est-ce qu'il ne serait pas plus simple de faire une macro qui sélectionne en même temps, comme on ferait un ctrl+clic et qui me laisse ensuite faire ce que je veux de la sélection à la main, tous les paragraphes qui commencent par pièce n°.

    Autrement dit, face à un document du type

    BlablaBlablaBlablaBlablaBlablaBlabla
    Pièce n°X : Blabla
    BlablaBlablaBlablaBlablaBlabla
    Pièce n'°X : Blabla

    Me retrouver, après l'exécution de la macro avec sélectionnés tous les paragraphes pièce n°

    BlablaBlablaBlablaBlablaBlablaBlabla
    Pièce n°X : Blabla
    BlablaBlablaBlablaBlablaBlabla
    Pièce n'°X : Blabla

    Je ne sais pas si c'est plus simple, mais je ne trouve pas comment faire ce qui me semblait présenté comme ça pourtant facile : sélectionner simultanément tous les paragraphes qui contiennent une expression.
    Depuis hier que je cherche et je ne trouve pas, encore moins en essayant de m'inspirer de questions posées sous excel pour selectionner des cellules non contigues contenant un mot.
    Merci en tout cas de votre aide, j'ai même réussi à me bricoler des boites de dialogue pour des impressions particulières mais c'est le seul caillou qui me reste.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Mpgd88 Voir le message
    Le code que j'ai mis en ligne, crée un nouveau document dans lequel on retrouve les paragraphes contenant les mots "Pièce n". Avez-vous ce nouveau fichier et le contenu correspond-il à ce que je viens de décrire ?

    Sinon, les textes entre chaque paragraphe "Pièce n" ... ne sont pas pris en compte car vous ne donnez aucune règle de gestion sur ce qui doit être fait entre deux pièces. Nb : C'est la dernière remarque de mon premier post. S'il n'y a pas de différence entre les documents, il serait plus simple de dupliquer le document et le renommer.

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/01/2016, 18h08
  2. Réponses: 7
    Dernier message: 30/05/2012, 14h36
  3. Recherche de chaîne avec une expression régulière complexe
    Par mdriesbach dans le forum Général Python
    Réponses: 4
    Dernier message: 28/07/2009, 22h46
  4. rechercher un element avec une expression reguliere
    Par penguin50 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 25/11/2008, 15h19
  5. Recherche des coefficients d'une matrice 3x3
    Par colorid dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 25/11/2004, 16h52

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