Lapinturbo
XLDnaute Nouveau
Bonjour le forum !
Mon problème global est de rentrer des données venant d'un Excel, dans un Word. Cet Excel est la base de données et de calculs / graphiques attachée à une affaire de l'entreprise, le Word est le rapport que l'entreprise produit à chaque affaire. Pour une affaire, j'ai donc un couple Word-Excel. Je suis charger de faire évoluer cet outil (il est sous libre office à la base et je le passe sous MS Office) et surtout de l'automatiser au maximum.
La structure de l'Excel ne bouge jamais d'affaires en affaires, il y aura juste des cases vides. Le Word cependant doit être assez souple (adaptable au cas par cas).
J'ai longuement cherché comment lier mes données de sorte à ce que le Word se mette à jour tout seul quand on modifie une valeur dans l'Excel.
Le collage avec liaison ne convient pas car j'ai besoin d'avoir la valeur liée bien intégrée au milieu du texte.
L'insertion d'objet ne convient pas car une donnée être réutilisée plusieurs fois, à plusieurs endroits différents.
Le publipostage non plus puisque je n'ai pas de tête de colonne avec plein de données pour des affaires différentes pour chaque colonne.
Les objets OLE pourraient peut être convenir mais cela me semble bien compliqué et peu adapté. Mais je les connais mal... ActiveX pareil.
La solution que j'ai trouvé est de faire une macro dans Word qui va chercher la valeur d'une cellule Excel définie et donne cette valeur à un signet pré-établi dans Word. Il ne faut pas que ce signet disparaisse, c'est peut-être un problème puisque le signet n'est relier à rien du tout (il a juste un nom) avant d'être rempli par la macro. J'utiliserai ensuite des champs ref pour appeler les valeurs mémorisées dans les signets.
Si cette solution vous semble être appropriée pour mon cas, on peut passer au problème qui me bloque dans sa mise en œuvre :
La fameuse erreur 1004 "La méthode range de l'objet global a échoué". Il y a déjà pas mal de documentation à ce sujet mais je n'ai pas réussi à passer cet obstacle.
Pour aller chercher mes données dans l'Excel, j'utilise un bout de code que j'avais trouvé sur un forum et réadapté pour faire importer des données entre deux Excel. Ce code fonctionne très bien sur Excel mais j'ai l'erreur 1004 sur Word. J'ai bien coché les librairies appropriées (voir capture en PJ).
Mon code est le suivant :
Je met aussi en PJ le Word et l'Excel, largement dégraissés de toute choses inutiles.
Merci de m'avoir lu (c'est long !) et surtout pour le temps que vous prendrez pour aider !
Votre aide sera précieuse pour la rénovation énergétique des maisons individuelles en France !
Mon problème global est de rentrer des données venant d'un Excel, dans un Word. Cet Excel est la base de données et de calculs / graphiques attachée à une affaire de l'entreprise, le Word est le rapport que l'entreprise produit à chaque affaire. Pour une affaire, j'ai donc un couple Word-Excel. Je suis charger de faire évoluer cet outil (il est sous libre office à la base et je le passe sous MS Office) et surtout de l'automatiser au maximum.
La structure de l'Excel ne bouge jamais d'affaires en affaires, il y aura juste des cases vides. Le Word cependant doit être assez souple (adaptable au cas par cas).
J'ai longuement cherché comment lier mes données de sorte à ce que le Word se mette à jour tout seul quand on modifie une valeur dans l'Excel.
Le collage avec liaison ne convient pas car j'ai besoin d'avoir la valeur liée bien intégrée au milieu du texte.
L'insertion d'objet ne convient pas car une donnée être réutilisée plusieurs fois, à plusieurs endroits différents.
Le publipostage non plus puisque je n'ai pas de tête de colonne avec plein de données pour des affaires différentes pour chaque colonne.
Les objets OLE pourraient peut être convenir mais cela me semble bien compliqué et peu adapté. Mais je les connais mal... ActiveX pareil.
La solution que j'ai trouvé est de faire une macro dans Word qui va chercher la valeur d'une cellule Excel définie et donne cette valeur à un signet pré-établi dans Word. Il ne faut pas que ce signet disparaisse, c'est peut-être un problème puisque le signet n'est relier à rien du tout (il a juste un nom) avant d'être rempli par la macro. J'utiliserai ensuite des champs ref pour appeler les valeurs mémorisées dans les signets.
Si cette solution vous semble être appropriée pour mon cas, on peut passer au problème qui me bloque dans sa mise en œuvre :
La fameuse erreur 1004 "La méthode range de l'objet global a échoué". Il y a déjà pas mal de documentation à ce sujet mais je n'ai pas réussi à passer cet obstacle.
Pour aller chercher mes données dans l'Excel, j'utilise un bout de code que j'avais trouvé sur un forum et réadapté pour faire importer des données entre deux Excel. Ce code fonctionne très bien sur Excel mais j'ai l'erreur 1004 sur Word. J'ai bien coché les librairies appropriées (voir capture en PJ).
Mon code est le suivant :
Enrichi (BBcode):
Private Function ExtraireValeur(ByVal Chemin As String, ByVal Fichier As String, ByVal Feuille As String, ByVal Cellule As String)
Dim Argument As String
Chemin = Replace(Chemin, "'", "''")
Fichier = Replace(Fichier, "'", "''")
Feuille = Replace(Feuille, "'", "''")
Argument = "'" & Chemin & "[" & Fichier & "]" & Feuille & "'!" & Range(Cellule).Address(, , xlR1C1) 'C'est le Range de cette ligne qui pose problème
ExtraireValeur = ExecuteExcel4Macro(Argument)
End Function
Sub Main()
sChemin = InputBox("Coller le chemin de l'Excel de l'affaire : ", "Chemin de l'Excel") 'On demande à l'utilisateur de renseigner le chamin de l'Excel qui contient les données
If sChemin <> "" Then 'S'il ne remplit rien, le programme s'arrête
sChemin = sChemin & "\" 'Il faut ajouter un antislash pour que ça marche
sFichier = "data_audit_simplifié"
sFeuille = "data (2)"
WordDoc.Bookmarks("test").Range.Text = ExtraireValeur(sChemin, sFichier, sFeuille, "E28") 'E28 est la cellule qui contient la valeur à importer pour remplir le signet "test"
End If
End Sub
Je met aussi en PJ le Word et l'Excel, largement dégraissés de toute choses inutiles.
Merci de m'avoir lu (c'est long !) et surtout pour le temps que vous prendrez pour aider !
Votre aide sera précieuse pour la rénovation énergétique des maisons individuelles en France !