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

Macros et VBA Excel Discussion :

Impossible d'utiliser un Selection.Movedown dans une macro permettant d'extraire des phrases de Word vers Exce [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mai 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mai 2016
    Messages : 16
    Par défaut
    Bonjour à tous,

    Je précise d'abord que je suis un débutant en VBA, cela fait une semaine que j’apprends sur le tas dans le but de mettre en place une macro dans le cadre de mon stage.

    Mon objectif est d'extraire des bouts de phrases contenus dans plusieurs fichiers Word vers un tableau Excel. Pour cela, j'ai trouvé un bon code qui permet de rechercher des expressions avec la fonction "Find" et de sélectionner le texte qui suit pour l'extraire dans un tableau. Voici le code : http://www.gcexcel.com/vba-importer-...rd-vers-excel/ (je remercie au passage le Grand Chaman Excel de l'avoir partager, cela m'a fait gagner un temps précieux).

    J'ai dans un premier temps recopié bêtement le code en modifiant ce qu'il fallait. Le code recherche une expression, se déplace de 3 mots avec "MoveRight" et sélectionne puis extrait le texte qui suit en supprimant les espaces. Or, dans mes formulaires Word, le texte que je veux extraire se situe sur la ligne suivant l'expression recherchée. J'ai d'abord modifié mes formulaires en remplaçant les sauts de ligne par des espaces afin de pouvoir coder ma macro et créer mon tableau Excel.

    Cela étant fait, je cherche à perfectionner la macro en remplaçant les "MoveRight" par des "MoveDown", car vous avouerez que le bricolage avec les espaces n'est pas très fonctionnel et pourra entraîner des problèmes par le suite. Je pensais que cela serait simple en voyant l'aide de Microsoft sur la méthode Selection.MoveDown (https://msdn.microsoft.com/fr-fr/lib.../ff838730.aspx); mais finalement après des heures d'essais et de recherches, il m'est impossible d'appliquer ce MoveDown. Si je ne renseigne pas les paramètres (qui sont censés être facultatifs), j'ai une erreur d'exécution 9 "L'indice n'appartient pas à la sélection" sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ws.Cells(i, 6) = Trim(Split(WSel, ":")(1))
    Lorsque je les renseigne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MoveDown Unit:=wdLine, Count:=1
    la macro bloque sur "wdLine" en me disant "erreur de compilation : variable non définie" et lorsque je définie "wdLine" dans la déclaration des variables, la ligne MoveDown bloque en me disant "paramètre incorrect".

    Je me tourne donc vers vous, étant débutant il y a surement un petit détail qui m'échappe et je serais très reconnaissant si vous pouviez m'apporter vos lumières.

    Cordialement,
    Thibaud

    Petite précision, après avoir testé dans Word avec l'enregistreur de macro; les lignes de code dont j'ai besoin pour déplacer le curseur et sélectionner le texte que je veux extraire sont les suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Selection.MoveRight Unit:=wdCharacter, Count:=4
    Selection.MoveDown Unit:=wdParagraph, Count:=1, Extend:=wdExtend
    Mais lorsque je reproduit les lignes dans ma macro Excel, j'ai le droit à "type d'argument incorrect".

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Commence par essayer en remplaçant wdCharacter, wdParagraph et wdExtend par leurs valeurs numériques. Elles doivent être à quelque part dans l'aide de VBA Word, mais je n'ai pas envie de chercher.

    Si tu as coché la référence à Microsoft Word Object Library dans VBA Excel, tu cliques du wdCharacter et tu appuies sur

  3. #3
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mai 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mai 2016
    Messages : 16
    Par défaut
    Bonjour,

    Merci pour ta réponse, j'en étais également arrivé à cette conclusion et j'ai fait des essais hier en fin d'après-midi (étrange, j'ai trouvé nul part d'explication concernant les valeurs numériques à appliquer aux paramètres). J'avance puisque j'ai réussi à faire fonctionner le movedown, mes phrases sont bien extraites dans le tableau Excel. Un problème persiste, mes phrases à extraire sont de tailles variables, j'arrive à les extraire avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WApp.Selection.MoveRight Unit:=3, Count:=2, Extend:=2
    WApp.Selection.MoveDown Count:=5, Extend:=1
    Certaines phrases très longues sont complètes, tandis que d'autres plus courtes ressortent coupées dans mon extraction sur Excel. Un collègue me parlait d'ajouter une ligne afin de chercher le nombre de caractères dans la phrase pour ensuite paramétrer le "Count" en fonction du nombre de caractères trouvés. Ça m'a l'air faisable, je suis en train de chercher comment faire, mais il faudrait d'abord que je sache quelle valeur numérique appliquer à "Unit" afin de compter par caractère et ensuite paramétrer le "Count". Je n'ai pas trouvé l'information, quelqu'un pourrait-il m'aiguiller svp ?

  4. #4
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mai 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mai 2016
    Messages : 16
    Par défaut Avancements
    Bonjour,

    Finalement je n'ai pas trouvé la solution pour rechercher le nombre de caractères que contient la phrase à extraire afin de paramétrer la sélection en fonction. J'ai donc modifié le formulaire Word en mettant des champs texte pour saisir les phrases à extraire ce qui facilite l'extraction avec simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WApp.Selection.MoveRight Unit:=3, Count:=2, Extend:=2
    WApp.Selection.MoveDown Count:=1, Extend:=1
    Cela dit, si quelqu'un passe par là et a une idée pour ajouter après la recherche un code permettant de compter les caractères de la phrase qui suit afin de paramétrer la sélection à extraire; je suis preneur ! En effet, cela serait plus pratique pour saisir les formulaires de ne pas passer par des champs textes. Cela m'a l'air plus compliqué que je le pensais à l'origine, j'ai cherché à la faire à l'aide de la fonction Len mais cela n'a abouti sur rien. L'autre solution serait de pouvoir sélectionner le texte compris entre deux phrases, cela simplifierait les choses (par de recherches à faire, resterait juste la sélection et l'extraction).

  5. #5
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Dans l'aide de VBA-Word :

    La collection sentences() pour parcourir toutes les phrases d'un document, d'un paragraphe ou d'une sélection. L'index permet de sélectionner une phrase en particulier.

    Selection.text retourne le texte de la sélection

    Selection.Words retoune la collection de tous les mots de la sélection

    Selection.words.count renvoie le nombre de mots de la sélection active

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    Affiche la fenêtre d'exécution (Ctrl+G) et fait en pas à pas (F8) ce code :
    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 test()
        Dim s As Object, mot As Object, num As Long, i As Long
        For Each s In Sentences
            num = num + 1
            Debug.Print "Phrases " & num & " :"
            Debug.Print s.Words.Count; " mots"
            Debug.Print s.Characters.Count; " caractères"
            Debug.Print s.Text
            Debug.Print "Liste mots :"
    '        For Each mot In s.Words
    '            Debug.Print mot.Start, mot.Text
    '        Next mot
            'ou
            For i = 1 To s.Words.Count
                Debug.Print s.Words(i).Start, s.Words(i).Text
            Next i
        Next s
    End Sub
    Ca te permettra de voir un peu mieux comment est stocké le texte.
    Tu peux aussi mettre l'expression s.Words (sélectionner-glisser) dans la fenêtre espion pour voir les autre propriétés susceptibles de t'intéresser.
    eric

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/02/2014, 16h07
  2. [XL-2003] Comment utiliser les fonctions ESSBASE dans une macro excel ?
    Par kharon_rp dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/04/2010, 14h17
  3. Utilisation du solveur Excel dans une macro
    Par michelandco dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/10/2007, 12h10
  4. impossible d'utiliser un HWND parent dans un thread
    Par sylvain114d dans le forum Windows
    Réponses: 12
    Dernier message: 23/09/2004, 12h21
  5. Selection aléatoire dans une fouchette de 10%
    Par RobertDeNiroZ dans le forum Requêtes
    Réponses: 4
    Dernier message: 14/06/2004, 09h22

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