importer données d'un classeur fermé avec nom fichier et nom feuilles variables

Yopub

XLDnaute Junior
Bonjour, comment importer des données d'un classeur fermé, sur un autre classeur, sachant que le nom du classeur source et le nom de feuille sont des variables ?
Les fonctions index et indirect devraient m'être utiles, mais je n'arrive pas à trouver la syntaxe. Je sais qu'indirect ne fonctionne pas sur un classeur fermé.
exemple :
Nom du classeur contenant les données = cellule C4
Nom de la feuille contenant les données = cellule A4
Ce qui pourrait donner (si j'étais bon) quelque chose comme ceci
=INDEX(INDIRECT("["&$C4&" 2018 test.xls]"&"'"&$A4&"'!$f$15:$G$26");15;6)
F15 et G26 étant la zone où se trouvent les données à récupérer.
Merci pour votre précieuse aide.
 

Yopub

XLDnaute Junior
Bonjour, comment importer des données d'un classeur fermé, sur un autre classeur, sachant que le nom du classeur source et le nom de feuille sont des variables ?
Les fonctions index et indirect devraient m'être utiles, mais je n'arrive pas à trouver la syntaxe. Je sais qu'indirect ne fonctionne pas sur un classeur fermé.
exemple :
Nom du classeur contenant les données = cellule C4
Nom de la feuille contenant les données = cellule A4
Ce qui pourrait donner (si j'étais bon) quelque chose comme ceci
=INDEX(INDIRECT("["&$C4&" 2018 test.xls]"&"'"&$A4&"'!$f$15:$G$26");15;6)
F15 et G26 étant la zone où se trouvent les données à récupérer.
Merci pour votre précieuse aide.

Y aurait-il une âme charitable et disponible pour me donner quelqu' indication(s) ?
 

job75

XLDnaute Barbatruc
Bonjour Yopub,

Les fichiers joints sont à télécharger dans le même répertoire (le bureau).

La macro se déclenche quand on modifie/valide une cellule quelconque de la feuille des résultats :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim chemin$, fichier$, feuille$, plage$, dest As Range
chemin = ThisWorkbook.Path & "\"
fichier = [C4]
feuille = [A4]
plage = "F15:G26"
Set dest = [B7]
Application.EnableEvents = False
On Error Resume Next
dest.Resize(Range(plage).Rows.Count, Range(plage).Columns.Count).FormulaArray = _
    "=IFERROR('" & chemin & "[" & fichier & "]" & feuille & "'!" & plage & ","""")"
Application.EnableEvents = True
End Sub
A+
 

Pièces jointes

  • Destination(1).xlsm
    20.4 KB · Affichages: 55
  • Source.xlsx
    14.6 KB · Affichages: 65

Yopub

XLDnaute Junior
Bonjour et merci job75 pour votre intérêt sur ma question.
J'avais espéré obtenir une syntaxe sans vba...
Je suis en train d'essayer la formule INDIRECT.EXT, après avoir charger MOREFUNC sur ma version excel 2010. Sans grand résultat également jusqu'à présent.
Cela dit, et comme vous avez pris le temps de m'apporter une solution, je vais essayer de la comprendre et de l'appliquer.
Cordialement
 

Yopub

XLDnaute Junior
Bonjour et merci job75 pour votre intérêt sur ma question.
J'avais espéré obtenir une syntaxe sans vba...
Je suis en train d'essayer la formule INDIRECT.EXT, après avoir charger MOREFUNC sur ma version excel 2010. Sans grand résultat également jusqu'à présent.
Cela dit, et comme vous avez pris le temps de m'apporter une solution, je vais essayer de la comprendre et de l'appliquer.
Cordialement

Dans la déclaration option explicit, le fichier est la feuille sont nommés ([C4] et [A4]). Dans votre exemple, ces cellules sont fixes. Dans mon cas, pour une ligne fichier = [C4], dans la suivante ce sera [C5] etc. Je suppose donc qu'il faudra introduire une boucle For, dépendant du nombre de lignes également variables. N'est-il pas plus simple alors de faire un programme allant chercher les données (ce que je voulais éviter) ? Mais peut être ais-je mal compris votre solution.
 

job75

XLDnaute Barbatruc
Bonjour Yopub,

Les cellules A4 et C4 sont fixes !

Si vous avez installé la macro complémentaire MoreFunc de Laurent Longre :

- dans Destination(1) sélectionnez B7:C18

- entrez cette formule dans la barre de formule :
Code:
=SIERREUR(INDIRECT.EXT("'"&GAUCHE(CELLULE("filename");TROUVE("[";CELLULE("filename")))&C4&"]"&A4&"'!F15:G26");"")
- validez matriciellement en bloc par Ctrl+Maj+Entrée.

Les 2 fichiers doivent être dans le même répertoire.

A+
 

Yopub

XLDnaute Junior
MERCI !
Cela fonctionne en modifiant un peu les adresses.
En fait j'aime beaucoup la subtilité de l'utilisation de la fonction CELLULE("filename") qui permet de trouver l'adresse exacte du fichier source et donc des autres, puisqu'ils sont dans le même dossier.
Maintenant j'ai une autre difficulté à surmonter. Toujours avec INDIRECT.EXT, mais en effectuant une recherche cette fois.
Je me permets de vous exposer le cas, si toutefois vous êtes toujours disponible.
RECHERCHEH serait parfaite si elle fonctionnait sur une suite horizontale de termes non alphabétiques.
Dans différents forums, j'ai compris que la fonction INDEX et EQUIV associés pouvaient fonctionner efficacement à la place de RECHERCHEH. Mais je suis toujours confronté à la même difficulté : la syntaxe.
A la base je devrais avoir :
INDEX($F$14:$U$26;EQUIV(BF$3;$F$14:$U$14;0);1)
Je recherche la valeur BF3 dans la ligne F14/U14 et je trouve la valeur correspondante dans la même colonne une ligne en dessous.
MAIS la zone de recherche F14/U26 se trouve dans un fichier extérieur dont le nom est toujours en B4 et la feuille en A4.
Alors INDIRECT.EXT peut-elle aussi fonctionner et si oui, comment ?
Cordialement
 

Yopub

XLDnaute Junior
Re,

Ce n'est pas du tout ce que fait votre formule, revoyez la question pour qu'elle soit compréhensible.

A+
Bonjour, je désire chercher dans la zoneF14/U26 d'un classeur fermé dont le nom est une variable (B4), dans une feuille variable (A4) une valeur (BF3) située quelque part entre F14 et U14 du classeur visé et trouver, si concordance, la valeur de la cellule 1 à 12 lignes en dessous.
 

Yopub

XLDnaute Junior
Bonjour Yopub, le forum,

Joignez les 2 fichiers avec les données et les résultats (sans formules) que vous voulez obtenir.

Bonne journée.

Ci joint des extraits de fichiers. Entretien et Périscolaire sont les fichiers ressources et l'extrait est le fichier devant recevoir les données.
Les colonnes Service 1 jusqu'à 4 contiennent la formule que vous m'avez donnée.
La nouvelle formule sollicitée, sera disposée dans les cellules BF à CT.
 

Pièces jointes

  • Extrait fichier.xls
    670.5 KB · Affichages: 26
  • Entretien 2018.xls
    146.5 KB · Affichages: 25
  • Périscolaire 2018.xls
    260 KB · Affichages: 22

Discussions similaires

Statistiques des forums

Discussions
312 201
Messages
2 086 171
Membres
103 152
dernier inscrit
Karibu