RechercheV qui va chercher dans un lien hypertexte

mexitinoco

XLDnaute Nouveau
Bonjour à tous,

Je bute depuis quelques jours sur un problème : j'ai 2 fichiers Excel, l'un contenant les données sources, et l'autre allant chercher automatiquement ces mêmes données avec une fonction RechercheV.
Ce que j'aimerais bien faire, c'est coller le lien hypertexte vers le fichier source dans mon 2e fichier, et que toutes mes formules RechercheV se réfèrent à ce lien hypertexte pour aller chercher les données. Le problème est que j'ai l'impression qu'Excel ne prend pas en compte les liens hypertexte comme argument pour "Table_matrice", lorsqu'on fait une RechercheV.

Est-il possible donc d'entrer un lien hypertexte en "table_matrice" ? ou alors ne serait-ce qu'un texte qui permette d'aller chercher dans le bon fichier ?

J'espère que l'explication est claire, merci de vos retours !
 

Fichiers joints

Brice G

XLDnaute Occasionnel
Bonsoir mexitinoco,

Les explications me sont claires, merci.:)
En effet comme vous le supposez, la fonction RECHERCHEV a besoin d'une table pour aller chercher les données.

Je vous conseille d'utiliser une requête à l'aide de Power Query. Connaissez-vous cela ? Selon la version d'Excel que vous utilisez, elle sera directement intégrée ou non (2016 oui 2010 non).

Pour expliquer brièvement : la requête permet d'aller chercher dans un autre classeur (typiquement le fichier source) un tableau et de l'afficher dans une nouvelle feuille dans votre fichier principal, ainsi dans votre formule recherchev, vous pourrez utiliser directement le tableau source affiché dans la requête. L'avantage c'est quoi me direz-vous s'il s'agit de copier/coller la source ?
==> Pas besoin que le fichier source soit ouvert, et vous pouvez mettre à jour la requête comme bon vous semble (à l'ouverture du fichier travail le plus souvent).

Si besoin d'exemples et/ou plus d'explications, n'hésitez-pas. Tout se trouve sous "Données", "extraires des données depuis...un autre classeur".
 

job75

XLDnaute Barbatruc
Bonjour mexitinoco, Brice G,

Cette histoire de lien hypertexte et la formule RECHERCHEV n'ont strictement aucun sens.

Pour copier les cellules sources utilisez des formules de liaison c'est très classique :

- ouvrez les fichiers source et destination ci-joints

- en D2 du fichier destination entrez la formule =[Fichier_source.xlsx]Sheet1!B3

- tirez la formule vers la droite et le bas

- fermez le fichier source et voyez ce que deviennent les formules de liaison...

A+
 

Fichiers joints

mexitinoco

XLDnaute Nouveau
Je vous conseille d'utiliser une requête à l'aide de Power Query. Connaissez-vous cela ? Selon la version d'Excel que vous utilisez, elle sera directement intégrée ou non (2016 oui 2010 non).

Pour expliquer brièvement : la requête permet d'aller chercher dans un autre classeur (typiquement le fichier source) un tableau et de l'afficher dans une nouvelle feuille dans votre fichier principal, ainsi dans votre formule recherchev, vous pourrez utiliser directement le tableau source affiché dans la requête. L'avantage c'est quoi me direz-vous s'il s'agit de copier/coller la source ?
==> Pas besoin que le fichier source soit ouvert, et vous pouvez mettre à jour la requête comme bon vous semble (à l'ouverture du fichier travail le plus souvent).
Bonjour Brice G, merci beaucoup pour votre aide.

Non je connaissais pas Power Query, mais ce que vous avez l'air de décrire résoudrait parfaitement mon problème :) Cela me permettrait d'importer automatiquement le tableau du classeur voulu et donc d'aller chercher les données directement dans ce tableau ce qui me permettrait de garder toujours les mêmes formules.

Je vais tester et je vous dis si cela marche.

Cette histoire de lien hypertexte et la formule RECHERCHEV n'ont strictement aucun sens.

Pour copier les cellules sources utilisez des formules de liaison c'est très classique :

- ouvrez les fichiers source et destination ci-joints

- en D2 du fichier destination entrez la formule =[Fichier_source.xlsx]Sheet1!B3

- tirez la formule vers la droite et le bas

- fermez le fichier source et voyez ce que deviennent les formules de liaison...
Merci de votre réponse job75,

Oui je connais cette formule pour aller chercher les données d'une cellule d'un autre classeur, mais ici j'ai besoin de la rechercheV car dans le classeur sources les données ne restent pas toujours à la même place (des données sont rentrées tous les jours, ce qui décale les cellules).

Et l'objectif initial avec le lien hypertexte c'était de pouvoir le rentrer dans une de mes cellules, et qu'ensuite toutes mes formules RechcercheV y fassent référence, car mon classeur sources ne sera pas toujours le même. Il faut donc que les formules puissent se modifier automatiquement en fonction du classeur sources choisit, sans avoir à resaisir toutes les coordonnées des cellules.

La méthode de Brice G pourrait donc marcher car j'aurais juste à entrer le nom du fichier dont je veux que le tableau soit extrait, et de cette façon je pourrais faire une rechercheV toujours au sein même de mon classeur.
 

Brice G

XLDnaute Occasionnel
Bonsoir mexitinoco, bonsoir job:)

Avez-vous réussi à trouver comment vous débrouiller avec les requêtes, ou avez-vous besoin d'un exemple ?
 

mexitinoco

XLDnaute Nouveau
Bonsoir mexitinoco, bonsoir job:)

Avez-vous réussi à trouver comment vous débrouiller avec les requêtes, ou avez-vous besoin d'un exemple ?
Bonjour Brice G, je viens d'essayer et j'ai réussi à importer un tableau venant d'un autre classeur. Mais après je ne connais pas bien toutes les fonctionnalités, est-il possible par exemple de définir précisément à quel emplacement va être importé le tableau ? (définir dans quelles cellules il va être importé, et peut-on également l'importer dans une feuille de classeur déjà existante ?) Est-il possible également d'automatiser plus la chose ? par exemple : rentrer le nom du fichier source dans une cellule, puis d'appuyer sur un bouton qui via une macro importera le tableau.

Si cela est faisable ça répondra parfaitement à mon besoin :)
 

mexitinoco

XLDnaute Nouveau
Bonsoir le forum, Brice G, job75, mexitinoco,
Une piste en pièces jointes,
Bonne soirée
Bonjour Amilo, merci beaucoup pour ta réponse,

J'avoue que je ne comprends pas très bien les deux formules.
Est-ce que tu rentres les informations relatives au fichier source en ligne 2, le lien hypertexte se créé automatiquement et à partir de là les deux formules en C6 et D6 vont chercher dans le fichier dont le lien est en C4 ?
Parce que tout mon problème c'est de pouvoir changer le fichier source (via un lien hypertexte ou en entrant ses coordonnées dans une cellule) et qu'ensuite toutes les formules RechercheV se modifient en conséquence.
 

Amilo

XLDnaute Impliqué
Bonsoir à tous,

@mexitinoco, la ligne 2 sert effectivement de paramètres à la cellule C4 (vous pouvez placer cette zone à l'endroit qui vous convient, dans un onglet dédié, nommé "Paramètres" par exemple)
Vous pouvez placer des formules ou des listes de validation de données pour rendre certaines cellules de la ligne 2 dynamiques.
A voir si vous avez de nombreux classeurs et d'onglets.
Sinon, j'ai légèrement adapté les formules en C4 et C6 pour je l'espère une meilleure compréhension.

Edit : si vos onglets comportent des espaces, il sera nécessaire d'adapter la formule en conséquence sinon d'indiquer des noms d'onglets sans espace.

Bonne soirée
 

Fichiers joints

Dernière édition:

mexitinoco

XLDnaute Nouveau
Bonjour @Amilo

D'accord oui merci je comprends mieux la formule en C6, donc ça veut dire qu'en utilisant "INDIRECT" il peut faire une rechercheV directement dans le fichier source qui est mis en lien en C4 ? Si c'est ça ce serait parfait, mais tu disais qu'avec cette formule il faut que le fichier source soit ouvert ?
Je pencherai plus dans ce cas pour la formule qui permet de le faire tout en gardant le fichier source fermé, comme tu le proposais dans ton précédent fichier joint.
 

Amilo

XLDnaute Impliqué
Bonjour @Amilo

D'accord oui merci je comprends mieux la formule en C6, donc ça veut dire qu'en utilisant "INDIRECT" il peut faire une rechercheV directement dans le fichier source qui est mis en lien en C4 ? Si c'est ça ce serait parfait, mais tu disais qu'avec cette formule il faut que le fichier source soit ouvert ?
Je pencherai plus dans ce cas pour la formule qui permet de le faire tout en gardant le fichier source fermé, comme tu le proposais dans ton précédent fichier joint.
Bonsoir à tous,
@mexitinoco, malheureusement la fonction Indirect() ne fonctionne qu'avec le fichier ouvert,
Dans mon message #7, j'ai utilisé une formule Index/Equivaut mais avec une formule qui ne pointait pas vers la cellule C4 (lien hypertexte) donc non dynamique.
La formule RechercheV aurait également fonctionné de cette manière avec le classeur fermé mais sans répondre à votre souhait.

Sinon, en espérant qu'un membre ait une solution par formule, je ne vois que 2 possibilités : en VBA ou Power query comme suggéré par Brice G précédemment.
Cependant, il faudrait en savoir davantage sur la présentation du fichier final et le nombre de fichiers sources.

En attendant, je me suis inspiré de ce lien trouvé sur le site de Boisgontier pour une solution VBA,
Dans le fichier en pièce jointe, la plage du fichier source était renommée "Table_Source" donc ne pas oublier de modifier dans le code selon le nom de la plage.

Il faudra également l'adapter si vous avez plusieurs zones de RechercheV

Code à placer dans la feuille de l'éditeur VBA :

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$4" Or Target.Address = "$C$2" And Target.Count = 1 Then
  If [C4] <> "" And [C2] <> "" Then
    ChampFormule = "C6"
    chemin = Range("C4")
    fichier = Range("C2")
    NomTableRecherche = "Table_Source"    ' nom du champ
    If Dir(chemin & "\" & fichier) <> "" Then
      Range(ChampFormule).Formula = _
        "=VLOOKUP(B6," & "'" & chemin & "\" & fichier & "'!" & NomTableRecherche & ",2,false)"
    Else
      MsgBox "fichier inconnu"
    End If
  End If
End If
End Sub
Cordialement
 

Fichiers joints

Dernière édition:

mexitinoco

XLDnaute Nouveau
Bonsoir à tous,
@mexitinoco, malheureusement la fonction Indirect() ne fonctionne qu'avec le fichier ouvert,
Dans mon message #7, j'ai utilisé une formule Index/Equivaut mais avec une formule qui ne pointait pas vers la cellule C4 (lien hypertexte) donc non dynamique.
La formule RechercheV aurait également fonctionné de cette manière avec le classeur fermé mais sans répondre à votre souhait.

Sinon, en espérant qu'un membre ait une solution par formule, je ne vois que 2 possibilités : en VBA ou Power query comme suggéré par Brice G précédemment.
Cependant, il faudrait en savoir davantage sur la présentation du fichier final et le nombre de fichiers sources.

En attendant, je me suis inspiré de ce lien trouvé sur le site de Boisgontier pour une solution VBA,
Dans le fichier en pièce jointe, la plage du fichier source était renommée "Table_Source" donc ne pas oublier de modifier dans le code selon le nom de la plage.

Il faudra également l'adapter si vous avez plusieurs zones de RechercheV

Code à placer dans la feuille de l'éditeur VBA :

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$C$4" Or Target.Address = "$C$2" And Target.Count = 1 Then
  If [C4] <> "" And [C2] <> "" Then
    ChampFormule = "C6"
    chemin = Range("C4")
    fichier = Range("C2")
    NomTableRecherche = "Table_Source"    ' nom du champ
    If Dir(chemin & "\" & fichier) <> "" Then
      Range(ChampFormule).Formula = _
        "=VLOOKUP(B6," & "'" & chemin & "\" & fichier & "'!" & NomTableRecherche & ",2,false)"
    Else
      MsgBox "fichier inconnu"
    End If
  End If
End If
End Sub
Cordialement
Bonjour Amilo, bonjour tout le monde,

Désolé pour cette réponse très tardive, j'étais occupé par d'autres soucis vba ^^

Merci beaucoup pour vos solutions, mais finalement j'ai fait autrement : j'ai simplement fait une macro qui importe une plage de cellule du fichier source dans le fichier destination. On entre juste le lien répertoire du fichier source dans une cellule, on appuie sur un bouton et le tableau souhaité est importé. Ensuite j'ai juste à faire une rechercheV classique vers ce tableau, puisqu'il se situe maintenant dans le même classeur.

En termes du nombre de manipulations à faire c'est la même chose et c'est surtout beaucoup plus simple à coder que ce que je voulais faire initialement.
 

job75

XLDnaute Barbatruc
Bonjour mexitinoco, le fil,
En termes du nombre de manipulations à faire c'est la même chose et c'est surtout beaucoup plus simple à coder que ce que je voulais faire initialement.
Il vous a fallu un mois pour vous rendre compte que votre demande initiale était débile, mais bon, mieux vaut tard que jamais.

Et si vous utilisez les formules de liaison comme indiqué au post #4 c'est encore plus simple, pas besoin de VBA.

A+
 

mexitinoco

XLDnaute Nouveau
Bonjour mexitinoco, le fil,

Il vous a fallu un mois pour vous rendre compte que votre demande initiale était débile, mais bon, mieux vaut tard que jamais.

Et si vous utilisez les formules de liaison comme indiqué au post #4 c'est encore plus simple, pas besoin de VBA.

A+
La demande initiale n'avait rien de débile, vous n'avez pas compris ma requête.

Ce que vous proposez en post #4 je le connais bien entendu, mais ce dont j'avais besoin c'était justement d'une astuce quand le nom du fichier source est variable, de ne pas avoir besoin de retaper les formules et qu'il puisse tout de même aller effectuer sa rechercheV.

Enfin bref j'ai finalement trouvé un moyen un peu plus simple de le faire, merci quand même
 

Amilo

XLDnaute Impliqué
Bonjour Amilo, bonjour tout le monde,

Désolé pour cette réponse très tardive, j'étais occupé par d'autres soucis vba ^^

Merci beaucoup pour vos solutions, mais finalement j'ai fait autrement : j'ai simplement fait une macro qui importe une plage de cellule du fichier source dans le fichier destination. On entre juste le lien répertoire du fichier source dans une cellule, on appuie sur un bouton et le tableau souhaité est importé. Ensuite j'ai juste à faire une rechercheV classique vers ce tableau, puisqu'il se situe maintenant dans le même classeur.

En termes du nombre de manipulations à faire c'est la même chose et c'est surtout beaucoup plus simple à coder que ce que je voulais faire initialement.
Bonjour mexitinoco, le forum,
Merci mexitinoco pour votre retour, heureux que vous ayez trouvé la solution qui vous convienne,
Cordialement
 

mexitinoco

XLDnaute Nouveau
Comme promis voici ma solution :
VB:
Sub copier_tableau_pas_machine_SpinAccess()

Dim classeurSource As Workbook, classeurDestination As Workbook

'ouvrir le classeur source (en lecture seule)
Set classeurSource = Application.Workbooks.Open(Range("D15"), , True)
'définir le classeur destination
Set classeurDestination = ThisWorkbook

'copier les données de la "FORMATS" du classeur source (FLG) vers la "FORMATS" du classeur destination
classeurSource.Sheets("verification").Range("R2:AE19").Copy classeurDestination.Sheets("Data").Range("B31")

'fermer le classeur source
classeurSource.Close False

End Sub
La macro ouvre le fichier source dont j'ai mis le lien en cellule D15, puis copie le tableau de R2 à AE19 dans le fichier source, pour l'importer en cellule B31 dans mon classeur destination. Ensuite je n'ai plus qu'à adapter mes formules RechercheV dans mon classeur destination pour qu'elles aillent chercher dans le tableau que j'ai importé.

Au final ça revient au même en nombre de manipulations que ce que je voulais faire au départ : il y a juste à changer en cellule D15 le fichier source duquel on veut extraire, appuyer sur le bouton de la macro et le tour est joué, les formules recherchev font le reste. Après là ça marche bien pour mon cas car mes différents fichiers sources ont tous la même structure (donc la matrice de recherche est toujours la même), c'est peut-être plus compliqué avec des fichiers sources dont la structure diffère à chaque fois.

En tout cas merci pour vos propositions !
 

Discussions similaires


Haut Bas