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

Comment obtenir la valeur d'une cellule d'un autre classeur

6 réponses
Avatar
Raymond D'Anjou
Bonjour,

Est-ce possible, =E0 partir de VBA, d'obtenir la valeur=20
d'une cellule provenant d'un autre classeur sans m=EAme=20
l'ouvrir?

Si oui, comment faire?

Merci

6 réponses

Avatar
isabelle
bonjour Raymond,

Sub valeurExterne()
Ligne = 1
colonne = 1
onglet = "Feuil1"
Fichier = "zaza1.xls"
rep = "c:zaza"
MsgBox ExecuteExcel4Macro _
("'" & rep & "[" & Fichier & "]" & onglet & "'!R" & Ligne & "C" & colonne & "")
End Sub

isabelle


Bonjour,

Est-ce possible, à partir de VBA, d'obtenir la valeur
d'une cellule provenant d'un autre classeur sans même
l'ouvrir?

Si oui, comment faire?

Merci


Avatar
Bruno LOUIS
Salut Raymond,

J'ai un bout de code qui traîne sur mon PC qui pourrait t'intéresser.

Avant de lancer la macro LitDatas, vas dans VB Editor, menu Outils/Référence
et coche Microsoft ActiveX Data Objects 2.0 Library (ou une version plus
récente)
Ensuite crée un classeur vierge et saisit qq données en feuil1 puis
enregistre-le sous C:Test.xls. Ferme-le.

Lance 'LitDatas'

Tu trouveras pas mal d'exemples sur les différents sites des spécialistes
présents dans ce NG.

Bon courage !


****************** Colle ce code dans un module

'obtenir des données d'un classeur fermé

'Héctor Miguel, mpep

Sub LitDatas()
Dim Fich$, Arr

Fich = "c:Test.xls"
'récup des données à partir de l'adresse d'une plage de cellules
GetExternalData Fich, "Feuil1", "A1:G20", False, Arr
'récup des données à partir du nom d'une plage de cellules ()
' GetExternalData Fich, "", "plagenommée", False, Arr
With ThisWorkbook.Sheets("Feuil1")
.Range("A1", .Cells(UBound(Arr, 1), UBound(Arr, 2))).Value = Arr
End With

End Sub

'renvoie les valeurs d'une plage de cellules contigües (srcRange)
'd'une feuille (srcSheet) d'un fichier (srcFile) fermé
'dans un tableau (outArr)
'le paramètre TTL indique si la plage a ou non une ligne d'entêtes
Sub GetExternalData(srcFile As String, _
srcSheet As String, _
srcRange As String, _
TTL As Boolean, _
outArr As Variant)
'd'après Héctor Miguel, mpep
Dim myConn As ADODB.Connection, myCmd As ADODB.Command
Dim HDR As String, myRS As ADODB.Recordset, RS_n As Integer, RS_f As Integer
Dim Arr

Set myConn = New ADODB.Connection
If TTL = True Then HDR = "Yes" Else HDR = "No"
myConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & srcFile & ";" & _
"Extended Properties=""Excel 8.0;" & _
"HDR=" & HDR & ";IMEX=1;"""
Set myCmd = New ADODB.Command
myCmd.ActiveConnection = myConn
If srcSheet = "" _
Then myCmd.CommandText = "SELECT * from `" & srcRange & "`" _
Else myCmd.CommandText = "SELECT * from `" & srcSheet & "$" & srcRange &
"`"
Set myRS = New ADODB.Recordset
myRS.Open myCmd, , adOpenKeyset, adLockOptimistic
ReDim Arr(1 To myRS.RecordCount, 1 To myRS.Fields.Count)
myRS.MoveFirst
Do While Not myRS.EOF
For RS_n = 1 To myRS.RecordCount 'lignes
For RS_f = 0 To myRS.Fields.Count - 1 'colonnes
Arr(RS_n, RS_f + 1) = myRS.Fields(RS_f).Value
Next
myRS.MoveNext
Next
Loop
myConn.Close
Set myRS = Nothing
Set myCmd = Nothing
Set myConn = Nothing

outArr = Arr

End Sub






"Raymond D'Anjou" a écrit dans le
message de news: 19bb01c4d237$1c0b8dd0$
Bonjour,

Est-ce possible, à partir de VBA, d'obtenir la valeur
d'une cellule provenant d'un autre classeur sans même
l'ouvrir?

Si oui, comment faire?

Merci
Avatar
Bruno LOUIS
Vas voir sur le site http://frederic.sigonneau.free.fr/

T'as des trucs vraiment géniaux pour accéder à un classeur avec un moteur de
base de données.



"Bruno LOUIS" a écrit dans le message de news:
41a4a999$0$17372$
Salut Raymond,

J'ai un bout de code qui traîne sur mon PC qui pourrait t'intéresser.

Avant de lancer la macro LitDatas, vas dans VB Editor, menu
Outils/Référence et coche Microsoft ActiveX Data Objects 2.0 Library (ou
une version plus récente)
Ensuite crée un classeur vierge et saisit qq données en feuil1 puis
enregistre-le sous C:Test.xls. Ferme-le.

Lance 'LitDatas'

Tu trouveras pas mal d'exemples sur les différents sites des spécialistes
présents dans ce NG.

Bon courage !


****************** Colle ce code dans un module

'obtenir des données d'un classeur fermé

'Héctor Miguel, mpep

Sub LitDatas()
Dim Fich$, Arr

Fich = "c:Test.xls"
'récup des données à partir de l'adresse d'une plage de cellules
GetExternalData Fich, "Feuil1", "A1:G20", False, Arr
'récup des données à partir du nom d'une plage de cellules ()
' GetExternalData Fich, "", "plagenommée", False, Arr
With ThisWorkbook.Sheets("Feuil1")
.Range("A1", .Cells(UBound(Arr, 1), UBound(Arr, 2))).Value = Arr
End With

End Sub

'renvoie les valeurs d'une plage de cellules contigües (srcRange)
'd'une feuille (srcSheet) d'un fichier (srcFile) fermé
'dans un tableau (outArr)
'le paramètre TTL indique si la plage a ou non une ligne d'entêtes
Sub GetExternalData(srcFile As String, _
srcSheet As String, _
srcRange As String, _
TTL As Boolean, _
outArr As Variant)
'd'après Héctor Miguel, mpep
Dim myConn As ADODB.Connection, myCmd As ADODB.Command
Dim HDR As String, myRS As ADODB.Recordset, RS_n As Integer, RS_f As
Integer
Dim Arr

Set myConn = New ADODB.Connection
If TTL = True Then HDR = "Yes" Else HDR = "No"
myConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & srcFile & ";" & _
"Extended Properties=""Excel 8.0;" & _
"HDR=" & HDR & ";IMEX=1;"""
Set myCmd = New ADODB.Command
myCmd.ActiveConnection = myConn
If srcSheet = "" _
Then myCmd.CommandText = "SELECT * from `" & srcRange & "`" _
Else myCmd.CommandText = "SELECT * from `" & srcSheet & "$" & srcRange
& "`"
Set myRS = New ADODB.Recordset
myRS.Open myCmd, , adOpenKeyset, adLockOptimistic
ReDim Arr(1 To myRS.RecordCount, 1 To myRS.Fields.Count)
myRS.MoveFirst
Do While Not myRS.EOF
For RS_n = 1 To myRS.RecordCount 'lignes
For RS_f = 0 To myRS.Fields.Count - 1 'colonnes
Arr(RS_n, RS_f + 1) = myRS.Fields(RS_f).Value
Next
myRS.MoveNext
Next
Loop
myConn.Close
Set myRS = Nothing
Set myCmd = Nothing
Set myConn = Nothing

outArr = Arr

End Sub






"Raymond D'Anjou" a écrit dans le
message de news: 19bb01c4d237$1c0b8dd0$
Bonjour,

Est-ce possible, à partir de VBA, d'obtenir la valeur
d'une cellule provenant d'un autre classeur sans même
l'ouvrir?

Si oui, comment faire?

Merci



Avatar
Misange
Bonjour
En complément des réponses données, regarde la rubrique ci dessous :
http://www.excelabo.net/xl/fichiers.php#liresansouvrir

Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta


on 24/11/2004 16:06:
Bonjour,

Est-ce possible, à partir de VBA, d'obtenir la valeur
d'une cellule provenant d'un autre classeur sans même
l'ouvrir?

Si oui, comment faire?

Merci


Avatar
Raymond D'Anjou
Bonjour Isabelle,

J'ai du enlever le ExecuteExcel4Macro, car j'obtenais une
erreur. J'ai essayé avec Workbooks("Nom de
fichier").Sheets("Sheet1").Range("F12").Value, mais cela
ne fonctionne pas...

As-tu une autre idée?

Merci!

-----Message d'origine-----
bonjour Raymond,

Sub valeurExterne()
Ligne = 1
colonne = 1
onglet = "Feuil1"
Fichier = "zaza1.xls"
rep = "c:zaza"
MsgBox ExecuteExcel4Macro _
("'" & rep & "[" & Fichier & "]" & onglet & "'!R" &
Ligne & "C" & colonne & "")

End Sub

isabelle


Bonjour,

Est-ce possible, à partir de VBA, d'obtenir la valeur
d'une cellule provenant d'un autre classeur sans même
l'ouvrir?

Si oui, comment faire?

Merci
.





Avatar
isabelle
si tu l'a enlever parce que la ligne était en rouge, c'est en fait que les deux lignes
sont en fait une seule ligne et qu'il y a eu un mauvait retour à la ligne

MsgBox ExecuteExcel4Macro("'" & rep & "[" & Fichier & "]" & onglet & "'!R" & Ligne & "C" & colonne & "")

si tu veux récupérer le résultat dans une cellule

Range("A1") = ExecuteExcel4Macro("'" & rep & "[" & Fichier & "]" & onglet & "'!R" & Ligne & "C" & colonne & "")

isabelle


Bonjour Isabelle,

J'ai du enlever le ExecuteExcel4Macro, car j'obtenais une
erreur. J'ai essayé avec Workbooks("Nom de
fichier").Sheets("Sheet1").Range("F12").Value, mais cela
ne fonctionne pas...

As-tu une autre idée?

Merci!

-----Message d'origine-----
bonjour Raymond,

Sub valeurExterne()
Ligne = 1
colonne = 1
onglet = "Feuil1"
Fichier = "zaza1.xls"
rep = "c:zaza"
MsgBox ExecuteExcel4Macro _
("'" & rep & "[" & Fichier & "]" & onglet & "'!R" &
Ligne & "C" & colonne & "")

End Sub

isabelle


Bonjour,

Est-ce possible, à partir de VBA, d'obtenir la valeur
d'une cellule provenant d'un autre classeur sans même
l'ouvrir?

Si oui, comment faire?

Merci
.