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 10/08/2011, 09h44   #1
Nouveau Membre du Club
 
Inscription : juillet 2010
Messages : 236
Détails du profil
Informations forums :
Inscription : juillet 2010
Messages : 236
Points : 36
Points : 36
Par défaut Valeur excel vers signet word, chemin d'accès

Bonjour,

Soit un document excel et un modèle de document word.

Soit la procédure suivante : on ouvre excel, on saisie les données et on les envoie vers le modèle de document word via une macro. Quand le document word s'ouvre, une macro se lance pour récupérer les valeurs d'excel et les renvoyer vers des signets.

Mon premier problème était le suivant : comment faire pour qu’excel trouve le document word sans inclure le chemin d’accès dans la macro.
Problème résolu avec ces lignes de code excel :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sub OuvrirWord()
 
    Dim AppWord As Object
    Dim Doc As Object
    Dim Fichier As String
 
    'crée une instance de Word
    Set AppWord = CreateObject("Word.Application")
 
    'rend l'application visible
    AppWord.Visible = True
 
    'construit le chemin à partir du nom du fichier Excel
    Fichier = Left(ThisWorkbook.FullName, InStrRev(ThisWorkbook.FullName, ".") - 1) & ".dot"
 
    'ouvre le document
    Set Doc = AppWord.Documents.Add(Fichier)
 
    'lance la macro de mise à jour des signets
    AppWord.Run MacroName:="Document_New"
 
End Sub
Mon second problème est le suivant : trouver l’équivalent du premier problème pour mon document word. En effet, ma ligne dans word est la suivante :

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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Sub MiseAjour()
   Dim xlApp As Excel.Application
   Dim xlWb As Excel.Workbook
   Dim xlSh As Excel.Worksheet
   Dim sttemp As String, Ligne As Integer, MaListeDeSignets As Variant
 
    'liste des signets qui correspond également au nombre de valeurs à récupérer
    MaListeDeSignets = Array("Numéro", "Imputation", "Dénomination", "Adresse", "Tél", "Fax", "Courriel", "Agissant", "Intitulé", "Lieu", "Date", "Description", "Du", "Au", "A", "B", "C", "Frais", "Observations", "PhraseA", "SommeC", "Annulation") 'les signets supplémentaires doivent être ajoutés ici
 
' MON PROBLEME INTERVIENT ICI CAR J'AI ENTRÉ LE CHEMIN D'ACCES
   Set xlApp = New Excel.Application
   Set xlWb = xlApp.Workbooks.Open("C:\Documents and Settings\Pierre\Bureau\Engagement_Données")
   Set xlSh = xlWb.Sheets(4)
 
    'on boucle sur la liste
   For Ligne = 0 To UBound(MaListeDeSignets) 'ubound sert à compter le nombre de valeur contenu dans la variable "MaListeDeSignets"
      'on recupere les valeurs dans le fichier excel
      sttemp = xlSh.Cells(Ligne + 1, 2)
      'Trf du contenu de la cellule vers le signet
      Call BookmarkNewValue(MaListeDeSignets(Ligne), sttemp)
   Next
 
   xlWb.Close
   xlApp.Quit
   Set xlWb = Nothing
   Set xlApp = Nothing
 
End Sub
 
Sub BookmarkNewValue(ByVal NomSignet As String, ByVal NouvelleValeurSignet As String)
    If ActiveDocument.Bookmarks.Exists(NomSignet) Then
        ActiveDocument.Bookmarks(NomSignet).Select
        ActiveDocument.Unprotect
        Selection = NouvelleValeurSignet 'le bug est ici... le remplacement de la valeur supprime le signet
        Selection.Bookmarks.Add Name:=NomSignet, Range:=Selection.Range
        Selection.MoveRight Unit:=wdCharacter, Count:=1
        ActiveDocument.Protect wdAllowOnlyFormFields
    End If
End Sub
Le problème vient du fait que j'ai rentré le chemin d'accès. J'aimerais que le chemin se fasse tout seul... comme avec le code excel.


Merci
8e8eClo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 12h16   #2
Nouveau Membre du Club
 
Inscription : juillet 2010
Messages : 236
Détails du profil
Informations forums :
Inscription : juillet 2010
Messages : 236
Points : 36
Points : 36
Je pense avoir trouvé.
Je mets en résolu si ça se confirme.
8e8eClo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 12h53   #3
Responsable Word

 
Avatar de Heureux-oli
 
Homme Olivier Lebeau
Contrôleur d'industrie
Inscription : février 2006
Messages : 17 324
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 324
Points : 29 225
Points : 29 225
Salut,

Petite remarque, on peut travailler avec Word de la même manière que tu travailles avec Excel.

Code :
1
2
3
4
5
6
7
Dim wApp as Word.Application
 
'pour une nouvelle instance
Set wApp = New(Word.Application)
 
'pour saisir une instance 
Set wapp = Woord.Application
Normalement, cette ligne de code :
Code :
1
2
'lance la macro de mise à jour des signets
    AppWord.Run MacroName:="Document_New"
n'est pas nécessaire, si tu as une macro dans le document qui s'appelle Document_New, elle est automatiquement exécutée lors de la création du document basé sur ton modèle.



tu peux retrouver le chemin avec la propriété Path de l'objet Workbook.

Pour ton second problème, il y a plus simple, si tu passes en paramètre ton document à ta procédure Excel, plus besoin de chemin, l'objet Document est directement disponible en Excel.



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
25
26
27
Sub OuvrirDocument()
Dim wApp As Word.Application
Dim oDoc as Word.Document
 
set wApp = Word.Application
set oDoc = wapp.add "MonModèle.Dot"
 
'On ouvre la seconde procédure et on lui passe le document en paramètre
RemplirSignet oDoc
 
End Sub
 
 
Sub RemplirSignet(mydoc As Word.Document)
Dim xlApp as Excel.Application
Dim xlWb as Workbook
 
...
...
 
'Ensuite, on utilise le document directement
mydoc.bookmarks(1).range.text = "..."
 
...
...
 
end Sub
Voilà un code que je viens d'utiliser pour faire un exemple, le document comporte 3 signets, S1, S2 et S3 et je ne remplis que S2 par un texte fixe.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub TestMacroAutoNew()
Dim wapp As Word.Application
Dim oDoc As Word.Document
Set wapp = Word.Application
Set oDoc = wapp.Documents.Add("C:\Documents and Settings\Olivier\Application Data\Microsoft\Templates\Doc_new.dotm")
 
Oli002 oDoc
wapp.Visible = True
 
End Sub
 
Sub Oli002(myDoc As Word.Document)
myDoc.Bookmarks("S2").Range.Text = "Texte Ajouté"
End Sub
__________________
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 déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h47.


 
 
 
 
Partenaires

Hébergement Web