Microsoft 365 Récupérer valeur cellule dans d'autres classeurs

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Thibault123

XLDnaute Junior
Bonjour,

Je souhaite récupérer dans un fichier Excel des valeurs de cellules situées dans d'autres fichiers Excel.
Ces fichiers sont dans des dossiers différents. La cellule par contre est toujours située au même endroit (même nom d'onglet et même case).

J'ai mis en case A1 le début du chemin d'accès et dans d'autres cases la partie changeante du chemin (cf. photo jointe).
Ayant pas mal de valeurs à récupérer ainsi (plusieurs valeurs dans plusieurs fichiers), j'aimerais avoir une formule du style: $A$1&Ai&\[nom du fichier.xlsx]10. Onglet'!$G$2.
Je n'arrive pas à trouver la bonne combinaison avec les bons symboles au bon endroit.
Je pense qu'il doit y avoir une solution avec des formules. J'aimerais me passer de macro pour cela.
Petite précision : la formule doit pouvoir marcher avec les classeurs fermés.

Merci d'avance pour votre aide.
 

Pièces jointes

  • Chemin.jpg
    Chemin.jpg
    63.8 KB · Affichages: 65
Bonjour Thibault123,
VB:
Sub Recuperation()
Dim chemin$, txt1$, txt2$, txt3$, tablo, resu, i&, x$
chemin = [A1]
txt1 = "]10. Quality KPI'!$G$2"
txt2 = "]10. Quality KPI'!$H$2"
txt3 = "]10. Quality KPI'!$I$2"
tablo = [A3].CurrentRegion.Resize(, 4) 'matrice, plus rapide
With [A3].CurrentRegion.Columns(5).Resize(, 4)
    resu = .Formula 'matrice, plus rapide
    For i = 2 To UBound(tablo)
        x = "='" & chemin & tablo(i, 2) & "\[" & tablo(i, 4)
        resu(i, 1) = x & txt1
        resu(i, 3) = x & txt2
        resu(i, 4) = x & txt3
    Next
    Application.DisplayAlerts = False
    .Formula = resu 'restitution
End With
End Sub
A+
 

Pièces jointes

Cela semble fonctionner effectivement.
Je testerai sur plus de valeurs.

Pourrais-tu stp me dire pourquoi tu mets les chiffres 4 ou 5 dans les fonctions suivantes?
tablo = [A3].CurrentRegion.Resize(, 4)
With [A3].CurrentRegion.Columns(5).Resize(, 4)

Question supplémentaire si tu le veux bien : comment faire pour que ces opérations de récupération de valeurs ne se fassent que si une date est précisée dans la colonne A? Si pas de date indiquée, laisser les cases de scores vides.
J'ai essayé mais sans succès.

Merci d'avance pour ton aide précieuse.
 
Cela semble fonctionner
ça marche ou ça ne marche pas, un point c'est tout !!!

tablo et resu font référence à 2 plages distinctes définies avec Resize (faites une recherche sur ce mot).

Pour la question supplémentaire (la dernière j'espère) :
VB:
Sub Recuperation()
Dim chemin$, txt1$, txt2$, txt3$, tablo, resu, i&, test As Boolean, x$
chemin = [A1]
txt1 = "]10. Quality KPI'!$G$2"
txt2 = "]10. Quality KPI'!$H$2"
txt3 = "]10. Quality KPI'!$I$2"
tablo = [A3].CurrentRegion.Resize(, 4) 'matrice, plus rapide
With [A3].CurrentRegion.Columns(5).Resize(, 4)
    resu = .Formula 'matrice, plus rapide
    For i = 2 To UBound(tablo)
        test = IsDate(tablo(i, 1))
        x = "='" & chemin & tablo(i, 2) & "\[" & tablo(i, 4)
        resu(i, 1) = IIf(test, x & txt1, "")
        resu(i, 3) = IIf(test, x & txt2, "")
        resu(i, 4) = IIf(test, x & txt3, "")
    Next
    Application.DisplayAlerts = False
    .Formula = resu 'restitution
End With
End Sub
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour