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 :

[E-02] VBA : Récupérer du texte dans Word à partir d'Excel


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 9
    Points : 5
    Points
    5
    Par défaut [E-02] VBA : Récupérer du texte dans Word à partir d'Excel
    Bonjour,

    je souhaite récupérer via macro Excel (Excel2002 sous XP) des données contenues dans un fichier .doc (Word2002).
    Exemple : ici, dans ma macro VBA Excel, je voudrais récupérer le texte (une référence sur 5 caractères) qui se trouve après le mot "Facture :" dans le fichier Word qui est actuellement ouvert.

    J'ai procédé en deux temps :
    - écriture de la macro sous Word --> ça marche !
    - transposition de la macro sous Excel --> ça ne marche pas

    Voici ma macro sous Word (qui fonctionne donc) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim Reffact As Range 
    Set myRange = ActiveDocument.Content 
    myRange.Find.Execute FindText:="Facture :", Forward:=True 
    If myRange.Find.Found = True Then 
      If Selection.StoryType = wdMainTextStory Then 
         wUnits = Selection.Move(Unit:=wdWord, Count:=1) 
      End If 
    If wUnits < 1 Then 
      MsgBox "Numéro de facture inexistant" 
    Else 
      Selection.MoveRight Unit:=wdCharacter, Count:=5, Extend:=wdExtend 
      Set Reffact = ActiveDocument.Range(Selection.Start, Selection.End) 
      MsgBox "Facture = " & Reffact.Text 
    End If
    Voici ma macro transposée sous Excel qui ne fonctionne pas :
    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
    Set myRange = ActiveDocument.Content 
    myRange.Find.Execute FindText:="Facture :", Forward:=True 
    If myRange.Find.Found = True Then 
      'on a bien trouvé une référence de facture 
      If FichierWord.Selection.StoryType = .wdMainTextStory Then 
         wUnits = Selection.Move(Unit:=wdWord, Count:=1) 
      End If 
      If wUnits < 1 Then 
         MsgBox "Numéro de facture inexistant" 
      Else 
         FichierWord.Selection.MoveRight Unit:=wdCharacter, Count:=5,    Extend:=wdExtend 
         Set Reffact = ActiveDocument.Range(Selection.Start, Selection.End) 
         MsgBox "Facture = " & Reffact.Text 
      End If 
    End If
    Il doit manquer des blocs "With - End With" mais je ne connais pas la syntaxe.
    Quelqu'un aurait une idée ou des pistes ?
    Par avance merci.

  2. #2
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Bonjour,

    De nombreux exemples existent sur le forum pour piloter word depuis excel.

    Pour avoir accès aux variables word tu dois les prefixer, un pt't bout de code en exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Exemple
    Dim wrdApp As Object
    Dim wrdDoc As Object
     
    Set wrdApp = CreateObject("Word.Application")
    Set wrdDoc = wrdApp.Documents.Open(Wchemin)
    wrdApp.Visible = True ' False 'True
    Dim range1 As Word.Range
    Dim range2 As Word.Range
    Dim Maligne As Integer
     
    wrdApp.Selection.HomeKey Unit:=wdStory
     
    End-SUB

  3. #3
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Oui, c'est bien ce que j'ai fait dans mon exemple (effectivement on ne voit pas le "CreateObject("Word.Application")" mais il y est bien), mais malgré cela ça ne marche pas.
    Bon je vais fouiller du côté des exemples sur le forum ...
    Merci.

  4. #4
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Peux-tu préciser ce qui ne marche pas ? (est-ce que word s'ouvre bien ...)

    EDIT : As tu ajouté la référence Microsoft Word xx Object Library ?

  5. #5
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Voilà ce qui ne marche pas :

    j'ai le message d'erreur suivant :
    "Variable objet ou variable bloc with non définie"
    sur la ligne de code Excel VBA suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FichierWord.Selection.MoveRight Unit:=wdCharacter, Count:=5,    Extend:=wdExtend
    NB : J'ai bien ajouté la référence Microsoft Word 10.0 Object Library.

  6. #6
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Alors je ne comprends pas, j'ai bien testé avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wrdApp.Selection.MoveRight Unit:=wdCharacter, Count:=5,    Extend:=wdExtend
    et pas de soucis chez moi

  7. #7
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    je ne comprends pas non plus.
    J'ai simplifié mon code de telle manière à isoler le problème. Voici donc le nouveau contenu exact de la procédure, qui reproduit le problème (un fichier Word est par ailleurs ouvert, contenu le mot "Facture n° : " et un numéro sur 5 caractères) :

    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
     
    Sub Essai()
     
        'Déclaration pour Word
        Dim WrdApp, FicWord As Object
        Dim Reffact, myRange As Word.Range
        Set WrdApp = CreateObject("Word.Application")
     
        'le fichier word est déjà ouvert
        NbDocWord = Documents.Count
        If NbDocWord > 0 Then
            NomFic = Documents(1).Name  'on prend le premier par défaut
        Else
            NomFic = ""
        End If
     
        'Référence MadStef de la fiche
     
        If NbDocWord > 0 Then
            'Le document Word est ouvert
            Set myRange = ActiveDocument.Content
            myRange.Find.Execute FindText:="Facture n° :", Forward:=True
            If myRange.Find.Found = True Then
                'ça plante sur la ligne ci-dessous
                WrdApp.Selection.MoveRight Unit:=wdCharacter, Count:=5, Extend:=wdExtend
                Set Reffact = ActiveDocument.Range(Selection.Start, Selection.End)
                MsgBox "Référence facture = " & Reffact.Text
            End If
        End If
     
    End Sub
    ça plante sur la ligne "WrdApp.Selection.MoveRight Unit:=wdCharacter, Count:=5, Extend:=wdExtend" avec le message "Erreur d'exécution 91 - Variable objet ou variable de bloc with non définie".
    Là franchement je ne vois pas ...

  8. #8
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    Déja une petitie remarque, il y a un problème dans la déclaration des variables :

    Tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     'Déclaration pour Word
        Dim WrdApp, FicWord As Object
        Dim Reffact, myRange As Word.Range
    Au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     'Déclaration pour Word
        Dim WrdApp as object, FicWord As Object
        Dim Reffact as Word.Range, myRange As Word.Range

  9. #9
    Futur Membre du Club
    Inscrit en
    Février 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    En fait les 2 syntaxes peuvent être utilisées.
    Après un nouvel essai, cela ne change pas le problème.

    Je ne comprends pas pourquoi le système attend un bloc "with" ...

  10. #10
    Membre chevronné Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Points : 1 999
    Points
    1 999
    Par défaut
    En fait les 2 syntaxes peuvent être utilisées.
    Non c'est faux, dans ton exemple WrdApp et Reffact sont considérées comme
    variant, VBA différe en cela de certains autres languages.


    Après un nouvel essai, cela ne change pas le problème.
    Il me semble que le code suivant n'est pas bon (il manque la reference a world) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Reffact = ActiveDocument.Range(Selection.Start, Selection.End)

Discussions similaires

  1. Réponses: 2
    Dernier message: 17/01/2013, 03h39
  2. Récupérer du texte dans word à coller dans Excel
    Par progaide dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 22/01/2009, 10h12
  3. Recherche de texte dans word à partir d'excel
    Par bullrot94 dans le forum Excel
    Réponses: 2
    Dernier message: 19/10/2008, 14h43
  4. [VBA-E] ouverture de fichier word à partir d'Excel
    Par aramge dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 30/08/2006, 09h18
  5. [VBA-E]Insérer des autotext dans Word à partir d'excel
    Par noordman dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/04/2006, 15h34

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