Ecrire dans un fichier excel à partir d'une macro vba word

Lameche15 Messages postés 156 Date d'inscription mardi 9 septembre 2008 Statut Membre Dernière intervention 15 septembre 2022 - 6 janv. 2015 à 12:36
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 9 janv. 2015 à 10:10
Bonjour,

J'ai un fichier Word duquel je lance une macro.
(publipostage avec enregistrement du fichier avec un nom prédéterminé (DocName).)

En parallèle, j'ai un fichier Excel qui est ouvert et où je sélectionne une cellule.

Je souhaiterais qu'à la fin de ma macro Word, je puisse lui faire inscrire la variable DocName dans la cellule active que j'ai préalablement sélectionné dans le fichier Excel.

Si qqn pouvait me sortir un petit bout de code ou une piste de réflexion ce serait super sympa à lui.

Merci d'avance

39 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
7 janv. 2015 à 14:49
essaie ceci

ActiveCell.Value = "" & DocName 

0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
7 janv. 2015 à 15:00
voici les 2 manières comme dans le lien que je t'ai donné


Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim colonne, ligne As Integer
 colonne = Target.Column
 ligne = Target.Row
 'MsgBox colonne
 'MsgBox ligne
Range("Q" & ligne).Value = "azerty"
Cells(ligne, colonne).Value = "azerty"
End Sub


Je ne peux pas faire plus;

bon courage
0
Lameche15 Messages postés 156 Date d'inscription mardi 9 septembre 2008 Statut Membre Dernière intervention 15 septembre 2022
7 janv. 2015 à 15:13
Peux etre me dire comment utiliser ton code.

J'ai ecrit Option Explicit
du coup j'ai du déclarer touts les variables que j'utilise dans ma macro (Docname, lig...)

Dois-je aussi utiliser Private sub Worksheet_SelectionChange..?
Dans ce cas comment faire le lien entre les 2 macros?

--
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
7 janv. 2015 à 15:42
Je n'avais pas lu la réponse de ucfoutu du 7 janvier à 8 h 24

Mets donc dans ce cas la valeur de ta variable DocName dans le press-papier (je crois que Word VBA le permet par la méthode copy), puis colle manuellement dans ta cellule Excel (puisque intervention manuelle de toutes manières ...)

Ce que tu veux faire de la manière que tu veux le faire est impossible. Les variables ne se promènent pas de Word à Excel (a moins de mettre ces variables dans un fichier texte, c'est l'usine a gaz).

Tu peux le faire de Word en connaissant la position de ta cellule sur la feuille. Par exemple 1ère cellule vide d'une colonne.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
7 janv. 2015 à 16:41
Je me suis amusé à le faire avec un fichier texte. Mettre dans le même dossier un classeur nommé:essai, un fichier texte nommé essai et ton document Word

Document Word le code:

Option Explicit
Dim mavariable, cheminfichier As String
Private Sub CommandButton1_Click()
mavariable = "essai"
ecriture
'Déclaration des variables
Dim appExcel As Excel.Application 'Application Excel
Dim wbExcel As Excel.Workbook 'Classeur Excel
Dim wsExcel As Excel.Worksheet 'Feuille Excel

'Ouverture de l'application
Set appExcel = CreateObject("Excel.Application")
 appExcel.Visible = True
'Ouverture d'un fichier Excel
Set wbExcel = appExcel.Workbooks.Open(ThisDocument.Path & "\essai.xls")
'wsExcel correspond à la première feuille du fichier
Set wsExcel = wbExcel.Worksheets(1)
Range("A1").Select
appExcel.Quit
End Sub
Sub ecriture()
Dim intFic As Integer
intFic = FreeFile
SetAttr ThisDocument.Path & "\essai.txt", vbNormal 'fichier normal pour écrire
cheminfichier = ThisDocument.Path & "\"
Open cheminfichier & "essai.txt" For Output As intFic
   Print #intFic, mavariable
Close intFic
End Sub


Classeur Excel dans ThisWorkBook:

Option Explicit
Sub lecture()
Dim intFic As Integer
Dim strLigne As String
Dim cheminfichier As String
intFic = FreeFile
SetAttr ThisWorkbook.Path & "\essai.txt", vbNormal 'fichier normal pour lire
cheminfichier = ThisWorkbook.Path & "\"
Open cheminfichier & "essai.txt" For Input As intFic
While Not EOF(intFic)
    Line Input #intFic, strLigne
   mavariable = strLigne
    Wend
Close intFic
End Sub

Private Sub Workbook_Open()
lecture
End Sub


Dans un module:

Option Explicit

Public mavariable As String


Et dans la feuille concernée:

Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim colonne, ligne As Integer
 colonne = Target.Column
 ligne = Target.Row
Range("Q" & ligne).Value = mavariable 'auchoix
Cells(ligne, colonne).Value = mavariable 'auchoix
End Sub


Ce n'est pas trop compliqué, mais cela oblige à avoir tous les fichiers dans le même dossier

j'espère qu'avec cela tu va t'en sortir!




0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 7/01/2015 à 17:19
Excusez-moi tous, mais j'ai de plus en plus de difficultés à vous comprendre.
S'il s'agit simplement de mettre MANUELLEMENT (comme dit) dans une cellule d'une feuille d'un classeur Excel le contenu d'une variable connue dans Word, on fait tout simplement ce que j'en ai dit :
on met ce contenu dans le presse-papier, puis on va dans la cellule concernée et on colle ce contenu !
Allons bon ===>>
dans le code VBA de Word, à l'issue de la macro dont il s'agit (ou tout simplement dès que docname contient ce qui est à coller :
docname = "c'est simple, non ?" ' juste pour simuler. Toi, tu supprime cette ligne (docname a déjà du texte)
Dim ma_donnee_a_passer As New MSForms.DataObject
ma_donnee_a_passer.SetText docname
ma_donnee_a_passer.PutInClipboard

Si on va maintenant dans une cellule d'Excel et qu'on clique droit, on a un menu déroulant ===>> on y clique sur "coller", ma foi !

Mais tout ceci me parait assez peu orthodoxe, dès lors que l'on fait intervenir à plusieurs reprises l'utilisateur (pour ouvrir le classeur manuellement, pour choisir manuellement une cellule, etc ...)
Je ne comprendrai jamais cette "manière" d'utiliser un outil informatique.

PS : Pour comprendre mon incompréhension :
la cellule où mettre ce résultat n'est tout de même pas choisie au hasard, non ?
Son choix manuel est forcément celui de l'utilisateur, non ? Et ce choix répond probablement à une logique et pas à un caprice, non ?
Et la question est alors : quelle est donc cette logique qui aboutit au choix de cette cellule plutôt qu'une autre ?
Voilà voilà !
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
0
Lameche15 Messages postés 156 Date d'inscription mardi 9 septembre 2008 Statut Membre Dernière intervention 15 septembre 2022
8 janv. 2015 à 09:38
Bonjour à tous, et merci infiniment pour votre aide.
Je retiendrai dans un 1er temps la solution de Ucfoutu mais je garde sous le coude celle de cs_Le pivert que j'essaierai à temps perdu d'appliquer à mon projet.

Je vous explique mon projet d'ailleurs, comme cela peut etre aurez-vous une autre approche à me proposer.

Donc, j'ai un tableau excel partagé avec le secrétariat.
C'est un tableau de suivi classique avec un num de courrier d'arrivée, tout un tas de renseignements et à la fin un numéro de dossier traité puis la date de traitement.

Dans ce tableau j'ai 2 macros, une qui me repère les dossier arrivés depuis plus de 15jours, et l'autre qui me sert à marquer un dossier comme traité. Cette 2ème macro marque automatiquement la date du jour dans la bonne colonne et transforme la valeur contenue dans la cellule n° dossier traité en lien hypertexte vers une fiche word qui doit evidemment porter le même nom que la valeur dans la cellule excel.

Pour eviter les erreurs et les oublis, j'ai fait une macro sur le document word pour: - publiposter automatiquement
- enregistrer automatiquement le fichier résultat de la fusion de publipostage
- et donc enregistrer ce nom de document dans ma cellule excel.

Dans mon fonctionnement au quotidien, mon tableau de bord excel est ouvert au moment ou je réalise la fusion puisque de toute façon je dois marquer mon dossier comme traité.
L'avantage que je trouvais à ce fonctionnement c'est de pouvoir retrouver n'importe quel dossier facilement à partir du tableau excel et un système classique de filtres et aussi d'eviter les saisies manuelles qui peuvent etre tjs sources d'erreur surtout lorsqu'il y a plusieurs utilisateurs.

En tout cas merci de votre précieuse aide

--
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
8 janv. 2015 à 10:59
J'ai lu et si j'ai bien tout compris :
Un rédacteur traite un dossier qui porte un N° de dossier à transformer ensuite en lien hypertext vers un document Word.
Ce numéro de dossier est donc connu du rédacteur ?
Car si oui, je te proposerai en effet une toute autre approche, totalement différente.
0
Lameche15 Messages postés 156 Date d'inscription mardi 9 septembre 2008 Statut Membre Dernière intervention 15 septembre 2022
8 janv. 2015 à 11:06
En fait ce numéro est une combinaison de plusieurs champs de fusion.
Il est donc connu à la fin de l'exécution de ma macro publipostage.
Ou si on ne fait pas cette macro, on peut utiliser le publipostage word et enregistrer le document manuellement ce que je voudrais éviter.
Mon document type de publipostage est donc un doc word lié à une base de données word.

--
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
8 janv. 2015 à 11:41
Bon.
Je ne comprends pas cette contradiction :
1)
Il est donc connu à la fin de l'exécution de ma macro publipostage

et
2)
et transforme la valeur contenue dans la cellule n° dossier traité en lien hypertexte vers une fiche word

Transformer veut dire qu'une valeur était bien présente avant traitement. C'est cette valeur, que j'appelle N° de dossier à traiter.

Il me parait par ailleurs assez risqué de faire travailler plusieurs personnes en même temps sur un même classeur ouvert.
0
Lameche15 Messages postés 156 Date d'inscription mardi 9 septembre 2008 Statut Membre Dernière intervention 15 septembre 2022
8 janv. 2015 à 11:50
Transformer veut dire qu'une valeur était bien présente avant traitement. C'est cette valeur, que j'appelle N° de dossier à traiter.

C'est exactement ça. Pour simplifier:

Ce que je veux faire avec ma macro word qui enregistre le fichier traité sur un serveur c'est venir mettre son nom dans ma cellule excel afin que je n'ai pas à la faire manuellement et à partir de la ma macro excel me transformera ce nom en lien hypertexte vers ce fichier traité

Je sais pas trop si je suis clair.

Il pourra y avoir plusieurs personnes en lecture seule qui pourront notamment consulter ces liens hypertextes mais jamais plusieurs personnes en écriture en meme temps.
--
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
8 janv. 2015 à 12:36
On en revient donc à ma question plus haut :
Ce numéro de dossier est donc connu du rédacteur ?

Ce que j'ai mis en gras est le numéro avant traitement.
On verra le reste ensuite, car il a une énorme importance.
0
Lameche15 Messages postés 156 Date d'inscription mardi 9 septembre 2008 Statut Membre Dernière intervention 15 septembre 2022
8 janv. 2015 à 12:41
Ben oui il le connait mais après le publipostage
--
0
Lameche15 Messages postés 156 Date d'inscription mardi 9 septembre 2008 Statut Membre Dernière intervention 15 septembre 2022
8 janv. 2015 à 15:53
Encore pardon mais j'écris ceci qui ne fonctionne pas

Dim MonNomArrete As DataObject
Set MonNomArrete = NewDataObject

MonNomArrete.SetText ("" & DocName)

MonNomArrete.PutInClipboard


J'ai lu qqpart qu'il fallait cocher la Référence Microsoft forms 2.0 Object Library
ce qui était déjà fait!


--
0
Lameche15 Messages postés 156 Date d'inscription mardi 9 septembre 2008 Statut Membre Dernière intervention 15 septembre 2022
8 janv. 2015 à 16:11
Autant pour moi il manquait un espace entre New et DataObject

Bon la solution à ucfoutu fonctionne avec le presse papier.

Ce qui me donne une idée:

Plutôt que de coller manuellement la valeur du presse papier
Peut etre puis-je passer par ma macro excel pour récupérer cette valeur dans le presse papier et la coller automatiquement par ma macro?

Et le tour est joué!!!

Merci encore à vous 2 qui m'avez bien aidé et meme un peu fait galérer M. ucfoutu mais bon j'ai compris votre point de vue et c'est sur que cela aide à progresser!
--
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 137
8 janv. 2015 à 18:03
Je lis:

Peut etre puis-je passer par ma macro excel pour récupérer cette valeur dans le presse papier et la coller automatiquement par ma macro?


donc tu connais l'emplacement où la coller sur ta feuille Excel?

Si oui les 35 messages de ce post n'ont pas lieu d'être!!!

Il suffisait de demander comment mettre une variable dans une cellule donnée d'une feuille Excel à partir de Word

Cordialement


0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
8 janv. 2015 à 20:13
Pour tout résumer :
si rien ne permet d'identifier de manière totalement implacable un article enregistré (avant même, donc, l'intervention sous Word), rien ne permettra non plus de l'identifier de manière implacable après intervention sous Word.
Tous ceux qui ont eu à traiter de problèmes de gestions de documents savent bien qu'aucun thésaurus (aussi complet fût-il) et qu'aucun lexique de mots-clefs (aussi complet fût-il) ne saurait aboutir forcément à la détermination d'un seul document. Et ce : y compris en tenant compte de la date d'expédition, du nom de l'expéditeur, etc ...
A défaut de cette "implacabilité", on en arrive forcément alors à l'intervention humaine, et donc à la fois à la subjectivité et à l'erreur humaine possible.
Je ne vois donc, dans l'affaire ici exposée qu'une seule manière d'éviter subjectivité et erreur humaine :
- l'enregistrement (à son arrivée, donc) de l'affaire/dossier concernée et l'attribution, dès cet instant, d'un "champ" unique d'identification
- donner à celui qui traite un dossier/affaire de quoi se référer à ce champ unique, que ce soit par mention matérielle sur un document (si papier) ou que ce soit par une association numérisée (si sur support informatique).
AUCUN autre "procédé" ne saurait être infaillible
0
Lameche15 Messages postés 156 Date d'inscription mardi 9 septembre 2008 Statut Membre Dernière intervention 15 septembre 2022
9 janv. 2015 à 08:59
Vous êtes très gentils et surtout très compétents mais je vous rappelle que mon coeur de métier n'est pas l'informatique et que je fais tout cela parce que j'ai qq bases et de lointains souvenirs.
Maintenant faut savoir que cette "application" est destinée à des personnes qui savent tout juste allumer un ordinateur.

ALors ma procédure bien qu'imparfaite je vous l'accorde réduit tout de même considérablement les risques d'erreurs.

Au lieu d'avoir un document type word à modifier à chaque fois manuellement et à enregistrer manuellement, on se retrouve avec un pavé à ouvrir et à compléter.
A partir de la on a un bouton à cliquer dans le document word
Et un autre à cliquer dans le document de suivi excel en prenant juste soin de sélectionner la bonne ligne pour etre sur de prendre le bon dossier.

Maintenant je pourrais effectivement rajouter dans ma source de données de publipostage un champ avec le numéro d'arrivée de dossier et ainsi en retour retrouver la cellule à incrémenter automatiquement.
C'est pas idiot, mais le résultat est le même il y aura toujours une intervention manuelle.

Cs_le Pivert, ma question de départ a été solutionnée depuis bien longtemps malheureusement cette solution ne s'applique pas à mon problème particulier.

--
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 9/01/2015 à 10:23
Tout le problème (et tous les aleas qui l'accompagnent) est là :
en prenant juste soin de sélectionner la bonne ligne pour etre sur de prendre le bon dossier

Que quelqu'un de distrait ou de mal formé se trompe et bonjour la pagaille
Et même bien formé ...
N'as-tu donc jamais eu à traiter deux (voir plus) courriers successifs expédiés le même jour, par la même personne, pour une même affaire ?
Moi, plusieurs fois.
Ex :
lettre 1 datée du 01/04/2015 par jojo Dupont au sujet de l'affaire X
lettre 2 datée également du 01/04/2015 par jojo Dupont au sujet de la même affaire X pour apporter une précision, poser une nouvelle question ou, pire, pour annuler certains termes de la première.
Seule une référence unique à chacune de ces deux lettres (et donc différente pour chacune des deux), référence intégralement partagée par l'enregistrement du courrier et par l'application de réponse te protège de ces "choses"-là !
Bien ...
Je crois avoir maintenant tout dit et te souhaite bonne chance, tout au moins de ne pas avoir de malchance.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
0
Rejoignez-nous