Liaison externe dynamique

Y compris Power BI, Power Query et toute autre question en lien avec Excel
M
Monsieur Fred
Nouveau venu
Nouveau venu
Messages : 9
Inscrit le : 21 janvier 2014
Version d'Excel : 2010

Message par Monsieur Fred » 21 janvier 2014, 14:31

C'est bien ce que j'ai fait, mais même en faisait un test la formule m'indique "#valeur!

C'est bien ce que j'ai fait, mais même en faisait un test la formule m'indique "#valeur!
E
EngueEngue
Membre impliqué
Membre impliqué
Messages : 1'493
Inscrit le : 12 décembre 2013
Version d'Excel : 2010

Message par EngueEngue » 21 janvier 2014, 16:00

Marche parfait chez moi
Avatar du membre
Jean-Eric
Fanatique d'Excel
Fanatique d'Excel
Messages : 14'741
Appréciations reçues : 439
Inscrit le : 27 août 2012
Version d'Excel : O365 32 bits

Message par Jean-Eric » 21 janvier 2014, 16:26

Bonjour,
bonjour EnguEngue,
Ton code n'impose-t-il pas une référence particulière dans VBA (library)?
Cdlt.
Jean-Eric

Je ne réponds pas aux M.P. non sollicités.
E
EngueEngue
Membre impliqué
Membre impliqué
Messages : 1'493
Inscrit le : 12 décembre 2013
Version d'Excel : 2010

Message par EngueEngue » 21 janvier 2014, 16:34

Non... Il ne veut pas marcher avec les XLSX... Je me penche sur le sujet.

Daniel nous donne la réponse: Merci Daniel:
Function RecupPlage( _
        Chemin As String, _
        Fichier As String, _
        Feuille As String, _
        Cellule As String) As Variant
    If Split(Fichier, ".")(1) = "xls" Then
        RecupPlage = RecupPlage2003(Chemin, Fichier, Feuille, Cellule)
    Else
        RecupPlage = RecupPlage2007(Chemin, Fichier, Feuille, Cellule)
    End If
End Function
Function RecupPlage2007( _
        Chemin As String, _
        Fichier As String, _
        Feuille As String, _
        Cellule As String) As Variant
'ADOExcel2007LirePlage
Dim Rst As New ADODB.Recordset
Dim Cnn As New ADODB.Connection
Dim Requete As String
Dim NbRecord As Long
Cellule = Range(Cellule).Resize(2).Address(0, 0)
With Cnn
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" _
            & Chemin & "\" & Fichier & ";Extended Properties=""Excel 12.0;HDR=NO;"""
    .Open
End With
texte_SQL = "SELECT * FROM [" & Feuille & "$" & Cellule & "]"
Rst.Open texte_SQL, Cnn, adOpenStatic
RecupPlage2007 = Rst(0)
Rst.Close
Cnn.Close
Set Rst = Nothing: Set Cnn = Nothing
End Function
Function RecupPlage2003( _
        Chemin As String, _
        Fichier As String, _
        Feuille As String, _
        Cellule As String) As Variant
 
    Application.Volatile
 
    Dim Source As Object, Rst As Object, ADOCommand As Object
 
    Feuille = Feuille & "$"
    Cellule = Range(Cellule).Resize(2).Address(0, 0)
    Set Source = CreateObject("ADODB.Connection")
    Source.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & Chemin & "\" & Fichier & _
        ";Extended Properties=""Excel 8.0;HDR=No;"";"
 
    Set ADOCommand = CreateObject("ADODB.Command")
    With ADOCommand
        .ActiveConnection = Source
        .CommandText = "SELECT * FROM [" & Feuille & Cellule & "]"
    End With
 
    Set Rst = CreateObject("ADODB.Recordset")
    '1 = adOpenKeyset, 3 = adLockOptimistic
    Rst.Open ADOCommand, , 1, 3
    Set Rst = Source.Execute("[" & Feuille & Cellule & "]")
 
    RecupPlage2003 = Rst(0).Value
 
    Rst.Close
    Source.Close
    Set Source = Nothing
    Set Rst = Nothing
    Set ADOCommand = Nothing
End Function
M
Monsieur Fred
Nouveau venu
Nouveau venu
Messages : 9
Inscrit le : 21 janvier 2014
Version d'Excel : 2010

Message par Monsieur Fred » 22 janvier 2014, 07:00

Et pour le code ci dessus, quelle manipulation dois je faire ?
E
EngueEngue
Membre impliqué
Membre impliqué
Messages : 1'493
Inscrit le : 12 décembre 2013
Version d'Excel : 2010

Message par EngueEngue » 22 janvier 2014, 07:58

=recupplage(chemin;fichier;feuille;plage)
M
Monsieur Fred
Nouveau venu
Nouveau venu
Messages : 9
Inscrit le : 21 janvier 2014
Version d'Excel : 2010

Message par Monsieur Fred » 22 janvier 2014, 09:49

Bon mon fichier est placé ici : c:\memoire\patate = C1

mon fichier s'appelle "002.xlsx" = C2
la feuille : "donnee" = C3
la cellule B1

Je rentre tout ca en formule, donc sous forme =Recupplage(C1;C2;C3;B1)
J'obtiens toujours le même résultat : "#valeur"
Avatar du membre
Jean-Eric
Fanatique d'Excel
Fanatique d'Excel
Messages : 14'741
Appréciations reçues : 439
Inscrit le : 27 août 2012
Version d'Excel : O365 32 bits

Message par Jean-Eric » 22 janvier 2014, 10:19

Bonjour,
A tester ;;)
Pour 'RecupPlage2007',
Ajoutes la déclaration suivante:
Dim texte_SQL As String
Jean-Eric

Je ne réponds pas aux M.P. non sollicités.
M
Monsieur Fred
Nouveau venu
Nouveau venu
Messages : 9
Inscrit le : 21 janvier 2014
Version d'Excel : 2010

Message par Monsieur Fred » 23 janvier 2014, 10:38

J'ai rajouté la ligne mais toujours rien...
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message