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

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 janv. 2015 à 12:47
Bonjour,
Bien (on connaît maintenant ton but)
Il nous reste à savoir ce que tu as au moins tenté d'écrire pour résoudre cette difficulté.
Tu as plusieurs discussions et sources, sur ce forum qui est doté d'un moteur de recherche, traitant du pilotage d'une application acceptant l'automation (c'est le cas de Excel). Et ce que tu cherches à faire se fait très précisément par "pilotage".
0
Lameche15 Messages postés 156 Date d'inscription mardi 9 septembre 2008 Statut Membre Dernière intervention 15 septembre 2022
6 janv. 2015 à 14:49
Merci @ucfoutu de te pencher sur mon problème.
J'ai commencé à écrire ceci:


Set exl = CreateObject("excel.application")
exl.Visible = True

exl.Workbooks("F:\COT\Technique\BUREAU D'ETUDE\GESTION DOMAINE PUBLIC\SUIVI DOSSIERS GDP.xls").Sheets("Recap").ActiveCell = "" & DocName


Erreur: L'indice n'appartient pas à la sélection

Attention je ne suis pas un expert du vba excel et encore moins du vba 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
6 janv. 2015 à 14:55
Il ne s'agit pas d'être un expert, loin de là !
Il ne s'agit pas non plus d'écrire au hasard
Il s'agit d'apprendre ce qu'est l'automation.
Je t'ai parlé de l'existence du moteur de recherche de ce forum. Qu'en as-tu fait ?
Commence par lire cette discussion récente (parmi une multitude d'autres) :
http://codes-sources.commentcamarche.net/forum/affich-10040969-sauvegarder-un-classeur-excel-depuis-vb6#p10041994
ce sera un début, mais un bon début

0
Lameche15 Messages postés 156 Date d'inscription mardi 9 septembre 2008 Statut Membre Dernière intervention 15 septembre 2022
6 janv. 2015 à 15:15
Il ne s'agit pas d'être un expert mais un petit peu quand même.

Je suis Technicien Projeteur en VRD et pas Informaticien.
Mes vieux souvenirs d'école me permettent d'avoir une certaine logique pour la programmation. Pour ton info je me suis créé plusieurs petits programmes sous excel avec l'aide de ce forum et du bouquin VBA excel pour les nuls!
Je ne connais pas du tout vba word qui visiblement est différent alors excuse moi de demander un coup de main, je n'ai pas tout le loisir de faire des recherches sur le forum.

Ne m'aide pas il n'y a aucun problème mais franchement toi ça fait plusieurs fois que tu te montres en donneur de leçons avec moi et d'autres visiblement pendant que d'autres n'hésitent pas à donner une aide gratuite ce qui me semble etre le but d'un forum. Je ne suis pas la pour apprendre le vba! J'ai juste besoin d'une ligne de code et je la trouverais meme si ce n'est pas grace à toi

Merci quand meme

--
0

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

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
6 janv. 2015 à 19:01
Désolé, mais (j'ai l'habititude de le rappeler), ce forum n'est pas un distributeur de code à copier/coller, mais un forum d'aide à des développeurs, aide sur une difficulté spécifique et parfaitement isolée.
Si tu viens ici, c'est en développeur, que tu viens.
Si tu es développeur débutant, tu y viens en tant que débutant, mais tu DEBUTES. Et tu commences s'il te plait par ce par quoi je t'ai dit de commencer.
Merci de te conformer aux règles de ce forum.
Quant à :
Je ne suis pas la pour apprendre le vba! J'ai juste besoin d'une ligne de code et je la trouverais meme si ce n'est pas grace à toi

1) je préfère ne pas commenter !
2) ce n'est pas UNE ligne de code, mais un ensemble d'instructions, dans le cas que tu veux traiter !
Je te laisse donc là !
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 6/01/2015 à 20:04
Par ailleurs,
ce que tu as dit ici :
Je ne connais pas du tout vba word qui visiblement est différent

m'a suffisamment intrigué pour que j'aille voir dans VBA Word (pour ton info, je ne me sers jamais de word).
J'ai donc ouvert dans l'aide VBA1 Word, la rubrique :
CreateObject, fonction
(en te rappelant que je t'ai parlé plus haut de cette fonction, ainsi que de la fonction GetObject)).
Elle est exactement la même que celle de l'aide de VBA Excel (et pour cause).
Et ô surprise ! l'exemple principal dont est assortie cette rubrique est très précisément celui de la modification, depuis Word, de la valeur d'une cellule d'une feuille Excel. (ce que tu veux faire, donc !)


________________________
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
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
7 janv. 2015 à 08:24
Revenons quand même à ton tout premier message dans cette discussion :
1)
En parallèle, j'ai un fichier Excel qui est ouvert et où je sélectionne une cellule.

Tu as donc ouvert ce classeur manuellement
2)
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.

Et là encore, tu interviens manuellement.
On est là un peu loin de l'informatisation (ouverture manuelle ... sélection manuelle )
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 ...)
0
Lameche15 Messages postés 156 Date d'inscription mardi 9 septembre 2008 Statut Membre Dernière intervention 15 septembre 2022
7 janv. 2015 à 09:29
J'ai fait aussi l'aide VBA sur GetObject et je n'ai pas eu la chance d'avoir cet exemple là. Dommage!!! Moi il s'agit d'un exemple avec drawing...
Bref, merci pour ta suggestion de copy manuelle mais du coup la methode GetObject me permet d'ouvrir le fichier excel déjà créé meme s'il est fermé donc je vais automatiser la démarche jusqu'au bout.
J'ecris:

set MonExl= GetObject("F:........\...xls")

si j'écris MonExl.worsheets("....").activate

cela fonctionne.

Par contre, je n'ai pas de méthode pour aller chercher mes cellules:

ActiveCell ne fonctionne pas, Range ne fonctionne pas Cells non plus...

Je suis à court d'idée, je ne trouve nulle part qqch qui ressemble à ça dans l'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
Modifié par ucfoutu le 7/01/2015 à 11:06
Ce n'est pourtant pas difficile.
Tu as un objet classeur (ton objet MonExl
Cet objet classeur contient une collection WorkSheets
et donc :
Dim mafeuille As Excel.WorkSheet
Set mafeuille =MonExl .Worksheets("Feuil1")
fait que l'objet mafeuille est la feuille Feuil1 de l'objet classeur MonExl
tu as dès lors accès à tous les objets de l'objet mafeuille :
dont :
mafeuille.Range( .....)
mafeuille.selection
etc ...



________________________
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
7 janv. 2015 à 11:34
J'y avais pensé, malheureusement tout fonctionne sauf ActiveCell.

y a t-il un equivalent?

Manque t-il qqch à déclarer?

--
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
7 janv. 2015 à 11:41
ActiveCell n'est pas un objet, mais une propriété.
Selection est par contre un objet
Le cellule sélectionnée est l'objet selection.
0
Lameche15 Messages postés 156 Date d'inscription mardi 9 septembre 2008 Statut Membre Dernière intervention 15 septembre 2022
7 janv. 2015 à 12:18
Dans ce cas pkoi:

mafeuille.Range("" & ActiveCell).value ... ne fonctionne pas

Je suis largué!!

Prtt il me semble etre tt proche
car si je donne une adresse à Range ca fonctionne
Range("Q10") par exemple

--
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 à 12:33
Comment te répondre autrement ?
Je ne sais plus !
Une autre fois, donc : Activecell n'est pas un objet, Selection en est un.
Et tu pilotes des objets, pas des propriétés.

________________________
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
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 à 13:35
Bonjour,

Je crois que ce tutoriel va pouvoir t'aider:

http://drq.developpez.com/vb/tutoriels/Excel/

Salut à ucfoutu
0
Lameche15 Messages postés 156 Date d'inscription mardi 9 septembre 2008 Statut Membre Dernière intervention 15 septembre 2022
7 janv. 2015 à 14:02
Malheureusement je l'avais déjà vu.

Effectivement cela m'avais fait avancé mais toujours rien sur activecell que j'ai déjà utilisé des dizaine de fois sous excel mais là apparement ça ne veut pas.

J'ai récupéré mon objet excel GetObject, puis mon objet feuille

Pour ma cellule active j'ai meme essayé

col = ActiveCell.Column
lig = ....

Variable objet ou vabiable de bloc with non définie

Ce qui fonctionnait très bien sous excel
Malheureusement j'entend bien ce que veut me dire ucfoutu mais je ne trouve pas de solution!

--
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 à 14:27
Je ne vois pas pourquoi tu te focalises sur ActiveCell

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.


Dans le lien que je t'ai donné tu as ta solution, il suffit de l'adapter:

Dim i As Integer
Dim somme As Integer

Dim appExcel As Excel.Application
Dim sheet As Excel.Worksheet

Set appExcel = CreateObject("Excel.Application")
'Ouverture d'un nouveau vierge
appExcel.Workbooks.Add
Set sheet = appExcel.ActiveWorkbook.ActiveSheet

somme = 0
'Parcours des cellules : A correspond à la première case de mon tableau et F à la sixième
For i = 1 To 6
'La propriété Cells(n°ligne,n°colonne) permet de sélectionner une seule cellule
somme = somme + sheet.Cells(3,i).Value
Next i

'La propriété Range(zone) permet de sélectionner une zone. La variable zone est une chaine de caractère de la forme "B5:T20" (cellule du coin haut gauche et cellule bas droite séparée par le caractère ':')
sheet.Range(colHeader(2) & "4:" & colHeader(2) & "4").Select
'La chaine formée par colHeader(2) & "4:" & colHeader(2) & "4" donne "B4:B4" ce qui sélectionne une seule cellule
sheet.Selection.Value = somme

0
Lameche15 Messages postés 156 Date d'inscription mardi 9 septembre 2008 Statut Membre Dernière intervention 15 septembre 2022
7 janv. 2015 à 14:33
???????????

La cellule que je sélectionne n'est jamais la même!!! Tjs la meme colonne soit mais jamais la meme ligne. Et je ne peux pas non plus chercher la 1ère cas vide.

Comment programmer cela à l'avance autrement que par la cellule active?


--
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 à 14:39
Je croyais que tu faisais tout par code. Voici la solution pour avoir la colonne et la ligne sélectionner manuellement à mettre dans la feuille active

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 Dim colonne, ligne As Integer
 colonne = Target.Column
 ligne = Target.Row
 MsgBox colonne
 MsgBox ligne
End Sub

0
Lameche15 Messages postés 156 Date d'inscription mardi 9 septembre 2008 Statut Membre Dernière intervention 15 septembre 2022
7 janv. 2015 à 14:40
moi ce que je ne comprend pas c'est pourquoi

lig = 10
mafeuille.Range("Q" & lig).Value = "" & DocName

Ca fonctionne et pas

mafeuille.ActiveCell.Value = "" & DocName

Cette "Propriété" renvoie bien un objet Range! Non?
0
Lameche15 Messages postés 156 Date d'inscription mardi 9 septembre 2008 Statut Membre Dernière intervention 15 septembre 2022
7 janv. 2015 à 14:48
Utain de Erde j'ai eu un spasme cs_Le Pivert
Cette fois je croyais bien que tu avais trouvé la solution.


Donc si j'écris à la place de lig = 10 / lig = Target.row

Erreur: Objet requis

Alors je me dis que peut etre il faudrait ecrire:

lig = mafeuille.Target.row

et la c'est le drame retour à la case départ:

Propriété ou méthode non gérée par cet objet

--
0
Rejoignez-nous