Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[VBA] Récupérer la valeur d'une cellule d'un classeur Excel dans Word

8 réponses
Avatar
HD
Bonjour,

En VBA, Je voudrais récupérer dans Word la valeur d'une cellule d'un
classeur Excel et de préférence sans ouvrir le classeur.

Merci d'avance pour votre aide
---
@+
HD

8 réponses

Avatar
Geo

Bonjour,

En VBA, Je voudrais récupérer dans Word la valeur d'une cellule d'un classeur Excel et
de préférence sans ouvrir le classeur.


http://www.excelabo.net/excel/fichierlire.php

--
A+

Avatar
HD
Le problème est que celà ne fonctionne pas...

J'ai une erreur d'exécution '438': Propriété ou méthode non gérée par cet
objet...

voici mon code:

Function RECUP(Fichier As String, Feuille As String, Ligne As Long, Col As
Integer)

With CreateObject("Excel.Application").Workbooks
.Open (Fichier)
MsgBox .Worksheets(Feuille).Cells(Ligne, Col)
.Close False
End With
End Function

Sub test()
ret = RECUP("C:ListeDoss.xls", "Feuil2", 2, 1)
End Sub
Avatar
HD
Le problème est que celà ne fonctionne pas...
J'ai une erreur d'exécution '438': Propriété ou méthode non gérée par cet
objet...


J'ai pourtant bien ajoutée la référence "Microsoft Excel 12.0 Object
Library"...
Le classeur en question n'est pas protégé... et j'ai mis la sécu des macros
à son minimum sur Word (pour voir si celà venait de celà)... Mais rien y
fait.

Le message d'erreur ne concerne que la ligne:
.Worksheets(Feuille).Cells(Ligne, Col)

Avatar
Geo

J'ai pourtant bien ajoutée la référence "Microsoft Excel 12.0 Object Library"...


OK

Le classeur en question n'est pas protégé... et j'ai mis la sécu des macros à son
minimum sur Word (pour voir si celà venait de celà)...


Inutile votre macro s'exécute, la preuve :

Le message d'erreur ne concerne que la ligne:
.Worksheets(Feuille).Cells(Ligne, Col)


Msgbox ne peut afficher qu'une chaîne de caractère, ce que vous avez là
est une Range Excel, il ne sait pas quoi en faire.
Et vous avez modifié le code, le Open n'était pas là.
Je vous propose le code suivant où :
- Toutes les variables sont déclarées, c'est tellement mieux
- les différentes opérations sont décomposées
Function RECUP(Fichier As String, Feuille As String, _
Ligne As Long, Col As Integer) As String
Dim R As String
Dim Cls As Workbooks
Dim Cl As Workbook
Dim F As Worksheet
Dim Cel As Excel.Range
Set Cls = CreateObject("Excel.Application").Workbooks
Set Cl = Cls.Open(Fichier)
Set F = Cl.Worksheets(Feuille)
Set Cel = F.Cells(Ligne, Col)
R = Cel.Text
Cl.Close False
RECUP = R
End Function

Sub test()
MsgBox RECUP("xxxxxxx", "Feuil1", 2, 1)
End Sub

--
A+

Avatar
HD
Un grand MERCI à toi Géo !!! ça fonctionne !!! :-)
Avatar
HD
Aïe... Problème...

Le classeur Excel qui est ouvert comporte une macro en démarrage... Peut on
ouvrir ce classeur sans exécuter la macro située en Workbooks_Open ?
Avatar
Geo

Aïe... Problème...

Le classeur Excel qui est ouvert comporte une macro en démarrage... Peut on ouvrir ce
classeur sans exécuter la macro située en Workbooks_Open ?


Il y a une instruction spécifique à Excel, mais ça m'échappe.
Regardez sur le site que je vous ai indiqué ou posez la question sur le
forum Excel.
A moins qu'un Excellien passe par ici.

--
A+

Avatar
Geo

ça y'est j'ai trouvé...

Set Cls = CreateObject("Excel.Application").Workbooks
Cls.Application.EnableEvents = False
Set Cl = Cls.Open(Fichier)
Set F = Cl.Worksheets(Feuille)
Set Cel = F.Cells(Ligne, Col)
R = Cel.Text
Cls.Application.EnableEvents = True
Cl.Close False


Merci pour le retour

--
A+