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, 11:51

Bonjour,

Je vous expose rapidemment mon problème.

Je cherche une fonction qui me permettrait de visionner une information issu d'un autre fichier excel. En gros, une formule qui aille chercher l'information sur un autre fichier excel (dont le nom comprend des contenu de cellule), le tout dynamisé.
Par exemple :

A1=X
B1=001


la destination du fichier serait C:\memoire\X\001.xslx
et l'information situé sur le document excel à la cellule B1

J'ai déjà essayer les fonctions indirect qui ne marche que quand le fichier est ouvert...
J'ai regardé d'autre post qui portent sur le meme sujet mais aucun n'a la réponse qu'il me faut.

Merci de l'attention que vous me porterez !
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, 12:06

Function LireCellule_ClasseurFerme( _
        Chemin As String, _
        Fichier As String, _
        Feuille As String, _
        Cellule As Variant) As Variant
 
    Application.Volatile
 
    Dim Source As Object, Rst As Object, ADOCommand As Object
    Dim Cible As String
 
    Feuille = Feuille & "$"
    Cible = Cellule.Address(0, 0, xlA1, 0) & ":" & _
        Cellule.Address(0, 0, xlA1, 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 & Cible & "]"
    End With
 
    Set Rst = CreateObject("ADODB.Recordset")
    '1 = adOpenKeyset, 3 = adLockOptimistic
    Rst.Open ADOCommand, , 1, 3
    Set Rst = Source.Execute("[" & Feuille & Cible & "]")
 
    LireCellule_ClasseurFerme = Rst(0).Value
 
    Rst.Close
    Source.Close
    Set Source = Nothing
    Set Rst = Nothing
    Set ADOCommand = Nothing
End Function
=LireCellule_ClasseurFerme(A1;A2;A3;B1)

A1
C:\Documents and Settings\mimi\dossier

A2
ClasseurY.xlsx

A3
Feuil1

Si tu veux fixer le nom de la feuille tu peux le faire sur le code.

Si tu veux fixer la variable A2 pour ne pas mettre l'extension tu peux aussi de même pour le début de chemin.
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, 12:23

Merci beaucoup de ta réponse aussi rapide !

J'essaye de comprendre un peu et j'essaye ca !

Je te tiens au courant :)
s
skybloo
Jeune membre
Jeune membre
Messages : 34
Inscrit le : 20 septembre 2013
Version d'Excel : 2010

Message par skybloo » 21 janvier 2014, 12:38

Bonjour

ou alors on peut ouvrir les deux documents et dans la barre de formule du document cible taper "=" et aller cliquer sur la cellule du document source. cela lies les deux cellules et la valeur de la cellule cible se met a jour même si le document source est fermé.


cela donne dans fichier cible "document B"

cellule A1 "='C:\dossier 1\[document A.xls]feuille 1!'A1

Bonne recherches
Modifié en dernier par skybloo le 21 janvier 2014, 12:46, modifié 1 fois.
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, 12:45

EngueEngue a écrit :
=LireCellule_ClasseurFerme(A1;A2;A3;B1)

A1 
C:\Documents and Settings\mimi\dossier

A2 
ClasseurY.xlsx

A3 
Feuil1

Si tu veux fixer le nom de la feuille tu peux le faire sur le code.

Si tu veux fixer la variable A2 pour ne pas mettre l'extension tu peux aussi de même pour le début de chemin.[/quote]

La formule doit être de type 
=LireCellule_ClasseurFerme(A1;A2;A3;B1)
en A1 je dois rentrer l'addresse de mon fichier, en A2, il s'agit bien de mon nom de document à savoir 001.xlsx,
en revanche pour A3 je comprend pas trop comment inscrire "feuil1" ???
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, 13:10

C'est le nom de la feuille ....
Si elle s'appelle "Toto" tu mets en A3 Toto
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, 13:43

Bon j'ai essayé d'utiliser la fonction mais rien bien productif...

l'addresse du fichier est du type (pour automatiser le tout) : C:\memoire\A2\B2.xlsx
L'information comme je l'ai dit se situe sur la cellule B1 du fichier secondaire.

Même en essayant avec ta formule, je n'arrive à aucun résultat...
s
skybloo
Jeune membre
Jeune membre
Messages : 34
Inscrit le : 20 septembre 2013
Version d'Excel : 2010

Message par skybloo » 21 janvier 2014, 13:55

Bonjour,

on peut lier des cellules de deux fichier différents ouvrant les deux fichiers excel, en se mettant dans une cellule du fichier cible. de taper dans la barre de formule "=" (comme une formule) et aller cliquer sur la cellule du fichier source et de valider.

cela donne des syntaxes du genre :

='C:\dossier 1\[document A.xls]feuille 1'!A1

bonnes recherches
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:01

C'est ce que j'avais fait dans un premiers temps, mais vu qu'il y aura plusieurs fichiers, il me faut une formule automatique. Les informations qui vont apparaitre changeront en fonction de ce qu'il y aura inscrit dans les cellules de départ
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, 14:12

Il faut copier le code dans un module...
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message