Récupération de données de Word vers Excel

Bonjour à tous,

Tout d'abord, un grand merci à tous ceux qui prennent le temps d'aider les autres.

Pour une de mes clientes, je souhaiterais récupérer deux valeurs dans un tableau Word et les envoyer dans Excel.

L’idée est de pouvoir créer une liste avec toutes ces valeurs. Ma cliente utilise un fichier Word par patient.

Mon idée serait de créer un bouton dans Word associé à une macro ou voir s’il est possible de n’exécuter qu’une seule fois cette macro (lors de la création de la fiche patient).

Les données que je souhaite récupérer sont « Médecin traitant » et « Autre.s spécialiste ».

A noter également que la structure du fichier Word peut varier dans le temps (ajout ou suppression d’information). Peut-être faut-il travailler avec des signets ?

Voici un exemple du fichier Word.

Un tout grand merci par avance pour votre aide.

Bonjour,

Alors avec une structure de données en tableau c'est très simple!

Dans le doc proposé le tableau est d'index 1, l'objet à pointer est donc WordDoc.Tables(1)

L'info à lire est en ligne 8 colonne 2 (et L9C2) le contenu est donc .cell(8, 2).Range.Text et .cell(9, 2).Range.Text

Si ce tableau est amené à évoluer, on peut toujours boucler sur le contenu de la colonne 1 pour vérifier la présence de Médecin traitant par exemple pour renvoyer le bon n° de ligne de cette info

Ca pourrait donner un code du genre :

Function Medecin_traitant() as String
Dim i As Byte

    With WordDoc.Tables(1)
        For i = 1 To .Rows.Count
            If .cell(i, 1).Range.Text Like "Médecin traitant*" Then
                Medecin_traitant = .cell(i, 2).Range.Text
            End If
        Next i
    End With
End Function

Pierre

Ps : à noter dans word une cellule est nommée par cell sans S contrairement à une cellule d'excel

Re

On peut aussi faire une fonction générique :

Function Info_A_recuperer(Info As String) As String
Dim i As Byte

    With WordDoc.Tables(1)
        For i = 1 To .Rows.Count
            If .cell(i, 1).Range.Text Like "*" & Info & "*" Then
                Info_A_recuperer = .cell(i, 2).Range.Text
            End If
        Next i
    End With
End Function

avec un appel tout simple du genre :

Debug.Print Info_A_recuperer("Médecin traitant")
Debug.Print Info_A_recuperer("Autre.s spécialiste")

Pierre

Bonjour à tous !

Tout est toujours d'une telle limpidité quand tu expliques, Pierre, c'est chouette !

Merci pour ces partages.

Je t'avais contacté sur ton site il y a quelques semaines, comme on ne peut pas te contacter ici.

Bonjour Pierre,

Un tout grand merci pour l'aide et la réponse rapide.

Etant vraiment débutant en VBA, j'ai dû mal à implémenté ce code dans mon fichier Word et à l'appeler.

Et je ne vois pas bien non plus comment ensuite récupérer ces infos dans un fichier Excel :/

Désolé je suis niveau débutant.

Ah ok, alors voici le code mis en œuvre concrètement. J'avais pas vu que le souhait était d'exporter les info depuis le doc, mais le code est quasi similaire :

Sub Vers_Excel()
Dim XlApp As Object, XlDoc As Object
Dim NDF As String, lg As Long

    NDF = ActiveDocument.Path & FichierCentral
    Set XlApp = CreateObject("Excel.application")
    Set XlDoc = XlApp.Workbooks.Open(NDF, ReadOnly:=False)
    With XlApp
        .Visible = False
        With .ActiveWorkbook.Sheets("Feuil1")
            lg = .Cells(.Rows.Count, 1).End(TtkUp).Row + 1
            .Range("A" & lg).Value = Info_A_recuperer("Médecin traitant")
            .Range("B" & lg).Value = Info_A_recuperer("Autre.s spécialiste")
        End With
    End With
    XlDoc.Save
    XlDoc.Close
    XlApp.Application.Quit
    Set XlDoc = Nothing
    Set XlApp = Nothing
End Sub

Avec un fichier Bdd.xlsx à placer ici à côté du doc pour recueillir les info souhaitées

Pierre

C'est génial, un tout grand merci à vous.

Von WE !

Geoffrey

Rechercher des sujets similaires à "recuperation donnees word"