Lire une valeur cellule d'un classeur fermé

Bonjour,

Dans un fichier Excel (Situation), j'ai besoin de récupérer la valeur d'une cellule d'un autre classeur fermé (Ex: CE190).

Dans le fichier Situation, la colonne CodeEngin correspond au nom de fichier du classeur, où je dois récupérer une valeur quelconque, puis glisser la même formule pour récupérer les mêmes valeurs des autres codes engins.

Avez vous une piste ?

Merci d'avance.

38situation.xlsx (10.51 Ko)
22ce190.xlsx (8.74 Ko)
16ce191.xlsx (8.76 Ko)

Bonjour compteabdou,

Comment voulez-vous récupérer cette valeur ?

Par formule : impossible si classeur fermé.

Par macro : c'est possible !

Oui j'ai essayé d'utiliser la formule Indirect en vain, puis j'ai utilisé un code VBa:

Function GetField(Path As String, WorksheetName As String, CellRange As String) As Variant

       Dim wb As Workbook
       Dim ws As Worksheet
       Dim rng As Range

       Set wb = GetObject(Path)
       Set ws = wb.Worksheets(WorksheetName)
       Set rng = ws.Range(CellRange)

       Application.DisplayAlerts = False
       wb.Saved = True
       wb.Close SaveChanges:=False
       Application.DisplayAlerts = True
End Function

mais la valeur renvoyée est toujours 0.

Je suis dessus !

Bonjour compteabdou,

Après des heures de tests et recherches, je peux te dire qu'il n'est pas possible de fabriquer via macro, une formule qui permet d'aller chercher les valeurs dans classeurs fermés. Du moins, cela est peut-être possible mais pas mais avec mes compétences je n'y arrive pas (et internet non plus ).

Du coup je t'ai créer une petite macro qui effectue ce que tu désires via un bouton.

Est-ce que cela te conviendrait ?

Bonne journée,

Baboutz

85situation.xlsm (26.07 Ko)

Bonjour et je vous remercie pour vos efforts,

j'ai mis le fichier dans le même répertoire que les autres fichiers (codengin), et dès que je clique sur le bouton, je reçois le message:.

erreur d'exécution '1004.

Merci,

À quelle ligne l'erreur se produit svp ?

C'est sûrement une petite erreur mais il me faudrait plus de précision de ta part...

Bonjour à tous,

Voici un exemple de code à adapter pour copier/coller une plage de valeurs d'un fichier externe sans l'ouvrir :

Sub ImporterDonneesSansOuvrir()
Dim Cheminsource As String, Fichiersource As String

    Cheminsource = "M:\04 - INDUSTRIE\4- PRODUCTION\RB\2-DOCUMENTS USINE\"
    Fichiersource = "Base Mère.xlsm"

    ThisWorkbook.Names.Add "plage", _
            RefersTo:="='" & Cheminsource & "[" & Fichiersource & "]Base Qualité'!$A$1:JOF$1000"

        Worksheets("Feuil2").Range("A1:JO1000").Value = "=plage"   
End Sub

Pierre

6situation.xlsm (24.56 Ko)

Merci Baboutz, après plusieurs tentatives et fermeture de tous les classeurs, maintenant ça marche.

le souci est que je veux récupérer les valeurs d'une façon aléatoire selon mon choix.

voir fichiers ci-joints.

Merci également pierrep56 pour le code, malgré que je cherche que la récupération des valeurs soit d'une façon dynamique par rapport au contenu des cellules (qui représentent les noms des fichiers).

A+

11ce190.xlsx (8.87 Ko)
10ce191.xlsx (8.86 Ko)
14situation.xlsm (24.56 Ko)

Bonjour à tous,

le souci est que je veux récupérer les valeurs d'une façon aléatoire selon mon choix.

Tu veux dire que la cellule dans la quelle tu vas chercher l'info varie selon tes désirs ?

Voici un exemple de code à adapter pour copier/coller une plage de valeurs d'un fichier externe sans l'ouvrir :

Le problème est qu'il souhaite une cellule précise dans plusieurs fichiers, et que la cellule en question varie en fonction de la colonne.

Je n'ai pas réussi sans l'aide d'un bouton, mais si tu as une solution, je suis preneur...

Bonjour,

Tu veux dire que la cellule dans la quelle tu vas chercher l'info varie selon tes désirs ?

Oui effectivement, les infos récupérés varient selon mon choix. comme montré dans les fichiers en PJ.

Bonjour compteabdou,

C'est bien compris. Une question, les colonnes où tu cherches les valeurs ne sont plus à côtés, c'est normal ?

Un essai :

8situation-1.xlsm (34.78 Ko)

Si tu peux me donner le nom exacte des colonnes où il faut afficher le résultat (Valeur Choisie1, Valeur Choisie2, etc...), je peux sûrement te faire un code un peu plus amélioré

Bonjour compteabdou, Pierre, Baboutz et compagnie

je peux te dire qu'il n'est pas possible de fabriquer via macro, une formule qui permet d'aller chercher les valeurs dans classeurs fermés. Du moins, cela est peut-être possible mais pas mais avec mes compétences je n'y arrive pas (et internet non plus ).

je ne suis pas internet, mais j'y arrive ...

Sub formule()
Dim fichier As String, onglet As String, adresse As String, chemin As String
chemin = ThisWorkbook.Path ' si différent, mettre le chemin du dossier dans lequel se trouvent les fichiers de base
onglet = "Feuil1"
For li = 2 To 3
    For co = 4 To 12
        If Cells(1, co) <> "" Then
            adresse = Cells(1, co)
            fichier = Cells(li, 3) & ".xlsx"
            Cells(li, co).FormulaLocal = "='" & chemin & "\[" & fichier & "]" & onglet & "'!" & adresse
            ' on peut figer en copiant en valeur la cellule sur elle-même
        End If
    Next
Next
End Sub

si les 3 fichiers sont dans le même dossier ...

39situation.xlsm (21.31 Ko)
21ce190.xlsx (8.87 Ko)
18ce191.xlsx (8.86 Ko)

je ne suis pas internet, mais j'y arrive ...

Tu es Steelson, c'est quand même vachement mieux et bigrement plus impressionnant

J'ai découvert cela il y a longtemps, lors de ma première macro pour récupérer des données de 1500 fichiers-résultats d'essais moteur ... tout simplement parce que je ne savais pas que

impossible

c'était impossible !

Ahah Steelson tu m'as fait peur !

Mais je crois que tu m'as mal compris, je parlais plus de créer une fonction que l'on pourrai utiliser du genre : =RechercheClasseurFerme(NomDuClasseur ; CelluleCherchée) ! Puis, il suffirait après de simplement dérouler la formule sur la plage et obtenir le résultat souhaité.

Mais il semble, du moins je n'ai pas réussi à trouver/réaliser, que ce n'est pas possible à faire... Après parfois avec les API on arrive à faire des trucs assez fous mais je ne maîtrise pas du tout cela...

ah oui, genre

Function RechercheClasseurFerme(fichier As String, adresse As String)
Dim onglet As String, chemin As String
    chemin = ThisWorkbook.Path ' si différent, mettre le chemin du dossier dans lequel se trouvent les fichiers de base
    onglet = "Feuil1"
    RechercheClasseurFerme = "'='" & chemin & "\[" & fichier & ".xlsx]" & onglet & "'!" & adresse
End Function

avec pour activer la fonction

Private Sub Worksheet_Change(ByVal Target As Range)
Target.Value = Replace(Target.Value, "'=", "=")
End Sub

l'avantage c'est que la valeur est figée, l'inconvénient c'est que la fonction de base disparait au profit de la valeur...

Mais de toute façon, je me méfie de plus en plus de fonction personnalisée dont je n'arrive pas à maîtriser le déclenchement, même avec application.volatile

Je maintiens ma proposition qui paraît simple.

Oh très habile ! Bien joué !

En effet, c'est faisable mais pas le plus pratique.

Je trouve aussi que ce que tu as fait et ce que j'ai fait également (mais d'une manière différente de toi) est plus pratique à l'aide d'un bouton.

On va voir si cela satisfait compteabdou !

Rechercher des sujets similaires à "lire valeur classeur ferme"