Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Word > VBA Word
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/07/2007, 12h05   #1
Invité de passage
 
Inscription : juillet 2007
Messages : 5
Détails du profil
Informations personnelles :
Âge : 27
Localisation : Maroc

Informations forums :
Inscription : juillet 2007
Messages : 5
Points : 1
Points : 1
Par défaut [VBA]Récupération de données d'un formulaire Word pour les envoyer vers Excel

Bonjour,

Voici mon problème :

- d'un côté j'ai un formulaire Word, avec des zones, des listes déroulantes.
- de l'autre, ma feuille excel.

Je veux récupérer les données des zones du formulaire Word pour les incoporer dans mon fichier excel. Malheureusement cela fait plusieurs heures que je bute !

Voici le début de mon code : (merci dado91400) (mon premier champ texte du formulaire à pour signet "NumeroFiche"

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
Dim WordApp As Word.Application
Dim WordDoc As Word.Document
 
FileToOpen = Application.GetOpenFilename("Nom fichier,*.doc") 'selection du nom du fichier à traiter
 
    Set WordApp = CreateObject("word.application")    'ouvre une session Word
    Set WordDoc = WordApp.Documents.Open(FileToOpen)    'ouvre le document Word
    WordApp.Visible = True    'Word n'est pas masqué pendant l'opération
 
    WordDoc.Bookmarks("NumeroFiche").Range.Text = "blabla"
 
 
 
 WordApp.Quit (False)   'ferme Word et le document sans sauvegarde
La réponse est "le membre de la collection requi n'existe pas" (à propos du bookmarks)

Si je me sers des FormFields, la réponse est :

Code :
1
2
 
numero = WordDoc.FormFields("NumeroFiche").Result
la réponse est : "erreur défini par l'application ou par l'objet"

Est ce que quelqu'un peut me sortir de l'impasse s'il vous plait !!!

Merci d'avance !
Kermit125 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2007, 21h52   #2
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 352
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 352
Points : 29 264
Points : 29 264
Essaie d'être un peu plus clair, parce que je ne comprends pas vraiment le lien entre :
Code :
WordDoc.Bookmarks("NumeroFiche").Range.Text = "blabla"
et

Code :
numero = WordDoc.FormFields("NumeroFiche").Result
D'un côté, tu as un signet qui s'appelle "NumeroFiche" tu lui affecte le texte blabla.
De l'autre côté, tu as un champ du formulaire "NumeroFiche" pour en extraire une valeur.
Mis à part qu'il ont le même nom !
__________________
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 !
Heureux-oli est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2007, 11h01   #3
Invité de passage
 
Inscription : juillet 2007
Messages : 5
Détails du profil
Informations personnelles :
Âge : 27
Localisation : Maroc

Informations forums :
Inscription : juillet 2007
Messages : 5
Points : 1
Points : 1
Pour être plus clair :

Dans mon formulaire word, j'ai un "Champ texte".
Lorsque je je regarde "Option de ce champ", je lui donne comme "signet" : "NumeroFiche"

J'aimerais récupérer la valeur de ce champ depuis une macro programmée dans une feuille EXCEL (je code donc dans Excel) :

J'ai donc essayé en premier lieu d'avoir une action sur ce champs, afin de voir comment on le reconnait depuis excel :
Code :
WordDoc.Bookmarks("NumeroFiche").Range.Text = "blabla"
VB a généré une erreur lors du débogage : "le membre de la collection requi n'existe pas"

J'ai donc modifier mon code. La reconnaissance par signet de ce champ texte "NumeroFiche" ne marchant pas, j'ai essayé de reconnaitre directement le champ formulaire par son nom.

J'ai alors remplacé le code précédent par
Code :
numero = WordDoc.FormFields("NumeroFiche").Result
Cette fois ci, la réponse fut : "erreur défini par l'application ou par l'objet"

J'ai essayé depuis de tourné ça dans tous les sens, mais je n'arrive pas à récupérer la valeur du champ texte "NumeroFiche".

As-tu une idée ?

En tout cas les : merci pour ta réponse ! Je me sens soutenu !
Kermit125 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2007, 12h03   #4
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 352
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 352
Points : 29 264
Points : 29 264
Le membre de la collection n'existe pas, c'est normal, le formulaire n'est pas ouvert.


Il faut aller chercher l'information directement dans le document.

Code :
Activedocuemnt.bookmarks("NumeroFiche").range.text
si le document est ouvert et actif.

Si c'est pas le cas :
Code :
1
2
3
4
5
6
7
 
Dim MyWord As New Word.Application
Dim MonDoc As Document
 
MonDoc = MyWord.Documents.Open("MonChemin + document")
 
MonDoc.Bookmarks("MonSignet").Range.Text
__________________
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 !
Heureux-oli est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2007, 13h11   #5
Invité de passage
 
Inscription : juillet 2007
Messages : 5
Détails du profil
Informations personnelles :
Âge : 27
Localisation : Maroc

Informations forums :
Inscription : juillet 2007
Messages : 5
Points : 1
Points : 1
Voici le début de mon code :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
Dim WordApp As Word.Application
    Dim WordDoc As Word.Document
 
    FileToOpen = Application.GetOpenFilename("Nom fichier,*.doc") 'selection du nom du fichier à traiter
 
        If FileToOpen = Faux Then  'evite le bug si on clique sur annuler dans la boite d'ouverture du fichier
            Exit Sub
        Else
            Set WordApp = CreateObject("word.application") 'ouvre une session Word
            Set WordDoc = WordApp.Documents.Open(FileToOpen)    'ouvre le document Word
            WordApp.Visible = True
        End If
Jusque là tout va bien, je choisis le document que je veux ouvrir, il s'ouvre et il est visible.

Maintenant si je mets à la suite :
Code :
1
2
3
 
    WordDoc.Activate
    numero = ActiveDocument.Bookmarks("NumeroFiche").Range.Text
Voici la réponse : "erreur défini par l'application ou par l'objet"

Si je remplace le code ci dessus par
Code :
1
2
 
numero = WordDoc.Bookmarks("NumeroFiche").Range.Text
Il me repond la même chose

Je continue à chercher de mon côté, encore mille merci pour tes lumières même si je suis toujours dans les ténèbres... (oulala le craquage n'est pas loin lol)
Kermit125 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2007, 13h29   #6
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 352
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 352
Points : 29 264
Points : 29 264
La partie que je t'ai donnée, fonctionne, c'est après test que je l'ai mise en ligne.

Par contre, là où je rencontre un problème, c'est avec

Code :
1
2
 
Application.GetOpenFileName
Je n'ai pas cette méthode pour l'application Word en version 2003.
__________________
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 !
Heureux-oli est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2007, 13h57   #7
Invité de passage
 
Inscription : juillet 2007
Messages : 5
Détails du profil
Informations personnelles :
Âge : 27
Localisation : Maroc

Informations forums :
Inscription : juillet 2007
Messages : 5
Points : 1
Points : 1
En effet cette reférence n'existe pas dans Word2003. Je n'ai pas trouvé la bibliothèque de référence permettant de la faire marcher sous word.

De mon côté je programme depuis une feuille Excel, où là elle marche (j'ai pourtant les même références...)

Si tu colle mon code dans une feuille Excel2003, GetOpenFileNAme ne devrait pas te poser de problème...et c'est très pratique lorsque tu veux ouvrir un document que tu veux choisir (tu ne rentres pas de nom figé dans WordApp.Documents.Open() )

Pour l'instant, depuis excel, je cherche mon doc (avec le GetOpenFileName), je l'ouvre, et je le vois...mais c'est au moment de récupérer les données que ça plante...

Merci pour tout
Kermit125 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2007, 14h11   #8
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 352
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 352
Points : 29 264
Points : 29 264
je vais chercher de cette façon alors.
__________________
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 !
Heureux-oli est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2007, 15h08   #9
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 352
Détails du profil
Informations personnelles :
Nom : Homme Olivier Lebeau
Âge : 47
Localisation : Belgique

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

Informations forums :
Inscription : février 2006
Messages : 17 352
Points : 29 264
Points : 29 264
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
Sub testSignet()
Dim wdApp As New Word.Application
    Dim WordDoc As Word.Document
    Dim FileToOpen
 
 
    FileToOpen = Application.GetOpenFilename("Nom fichier,*.doc") 'selection du nom du fichier à traiter
 
        If FileToOpen = False Then  'evite le bug si on clique sur annuler dans la boite d'ouverture du fichier
            Exit Sub
        Else
 
            Set WordDoc = wdApp.Documents.Open(FileToOpen)    'ouvre le document Word
            'wdApp.Visible = True
        End If
 
ActiveCell.Value = WordDoc.Bookmarks("BM01").Range.Text
 
Set WordDoc = Nothing
wdApp.Quit
 
Set wdApp = Nothing
End Sub
Je viens d'essayer au départ d'Excel et le code à fonctionné sans problème.
J'ai juste un fichier Word avec un signet BM01 qui contient un mot.
A la fin, j'ai bien mon mot dans la cellule active de mon fichier Excel.
__________________
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 !
Heureux-oli est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2007, 16h39   #10
Invité de passage
 
Inscription : juillet 2007
Messages : 5
Détails du profil
Informations personnelles :
Âge : 27
Localisation : Maroc

Informations forums :
Inscription : juillet 2007
Messages : 5
Points : 1
Points : 1
ça marche !!

Merci beaucoup ! Maintenant je n'ai plus qu'a faire une boucle, mettre les bonnes infos aux bons endroits !

A bientôt peut être et encore merci !

VIVE LE FORUM DES DEVELOPPEURS !
Kermit125 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h50.


 
 
 
 
Partenaires

Hébergement Web