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

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: 59

job75

XLDnaute Barbatruc
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

  • Recuperation(1).xlsm
    23.5 KB · Affichages: 12

Thibault123

XLDnaute Junior
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.
 

job75

XLDnaute Barbatruc
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

  • Recuperation(2).xlsm
    23.8 KB · Affichages: 6

Discussions similaires

Statistiques des forums

Discussions
311 709
Messages
2 081 774
Membres
101 816
dernier inscrit
Jfrcs