Problème avec INDIRECT.EXT

  • Initiateur de la discussion Initiateur de la discussion Ipno
  • Date de début Date de début

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 !

Ipno

XLDnaute Nouveau
Bonjour à tous,

même si je fréquente ce forum depuis quelques temps, ceci est mon premier message.

Je tente de réaliser un tableau synthétisant des données présentes dans beaucoup de classeurs excel mais j'éprouve quelques difficultés.
Dans le cadre d'une activité scolaire, des groupes d'étudiants doivent évaluer des dossiers (numérotés).
Chaque dossier est évalué au moins deux fois (tour 1 et tour 2) et chaque évaluation est retranscrite dans un classeur excel nommé numérodedossier_SME_numérodutour.xls (exemple 075_SME_02 pour al deuxième évaluation du dossier 75).

Le professeur encadrant cette activité souhaite synthétiser l'ensemble des évaluations dans un seul classeur pour pouvoir en sortir un classement. J'ai pour cela pensé utiliser la fonction INDIRECT mais il était compliqué de devoir garder ouvert des centaines de classeurs excel. J'ai donc tenté avec INDIRECT.EXT même s'il n'est pas conseillé de l'utiliser sur plus de 30 cellules, je n'ai de toutes façons pas de solutions plus confortable.
Cependant la fonction ne marche toujours que si le fichier est ouvert. Sinon j'obtiens une erreur #REF!

Je vous joins un exemple de mon fichier de synthèse et un exemple de fichier d'évaluation. Les données à récupérer sont sur la dernière feuille intitulée "Synthese". Je travaille sous office 2007.

Surtout, n'hésitez pas à me proposer d'autres solutions que INDIRECT.EXT si vous pensez que ce n'est pas adapté. Je n'ai pas cherché du coté de VBA puisque je suis totalement novice.

Fichier d'évaluation
Fichier de synthèse

Merci d'avance pour votre aide.

Ipno
 
Dernière édition:
Re : Problème avec INDIRECT.EXT

Bonjour et bienvenu sur le forum,

La fonction INDIRECT.EXT est une fonction complémentaire de Morefunc, non native sous Excel.
L'as-tu téléchargée ?

Si ce n'est pas le cas, fais-le en cherchant Morefunc sur la toile (le Net).
 
Re : Problème avec INDIRECT.EXT

Bonjour,

Dans la mesure où tu dois travailler impérativement avec des fichiers fermés et que tes connaissances en VBA ne permettent pas de faire des requêtes SQL (avec une connection ADO ) les deux solutions les plus simples qui te restent sont :

1. Malgré tes faibles connaissances en VBA, te lancer dans un code qui ouvre chaque dossier, copie ce qu'il y a à copier, le ferme et passe au suivant ... et, ainsi de suite ...
Beaucoup de personnes sur le Forum peuvent t'accompagner dans ce processus ...

ou

2. Utiliser la fonction de Harlan Grove qui s'appelle Pull()

VB:
Function Pull(xref As String) As Variant
  'inspired by Bob Phillips and Laurent Longre
  'but written by Harlan Grove
  '-----------------------------------------------------------------
  'Copyright (c) 2003 Harlan Grove.
  '
  'This code is free software; you can redistribute it and/or modify
  'it under the terms of the GNU General Public License as published
  'by the Free Software Foundation; either version 2 of the License,
  'or (at your option) any later version.
  '-----------------------------------------------------------------

  Dim xlapp As Object, xlwb As Workbook
  Dim b As String, r As Range, C As Range, n As Long

  n = InStrRev(xref, "\")

  If n > 0 Then
    If Mid(xref, n, 2) = "\[" Then
      b = Left(xref, n)
      n = InStr(n + 2, xref, "]") - n - 2
      If n > 0 Then b = b & Mid(xref, Len(b) + 2, n)

    Else
      n = InStrRev(Len(xref), xref, "!")
      If n > 0 Then b = Left(xref, n - 1)

    End If

    If Left(b, 1) = "'" Then b = Mid(b, 2)

    On Error Resume Next
    If n > 0 Then If Dir(b) = "" Then n = 0
    Err.Clear
    On Error GoTo 0

  End If

  If n <= 0 Then
    Pull = CVErr(xlErrRef)
    Exit Function
  End If

  Pull = Evaluate(xref)

  If IsArray(Pull) Then Exit Function

  If CStr(Pull) = CStr(CVErr(xlErrRef)) Then
    On Error GoTo CleanUp

    Set xlapp = CreateObject("Excel.Application")
    Set xlwb = xlapp.Workbooks.Add      'needed by .ExecuteExcel4Macro

    On Error Resume Next

    n = InStr(InStr(1, xref, "]") + 1, xref, "!")
    b = Mid(xref, 1, n)

    Set r = xlwb.Sheets(1).Range(Mid(xref, n + 1))

    If r Is Nothing Then
      Pull = xlapp.ExecuteExcel4Macro(xref)
    Else
      For Each C In r
        C.Value = xlapp.ExecuteExcel4Macro(b & C.Address(1, 1, xlR1C1))
      Next C
      Pull = r.Value
    End If

CleanUp:
    If Not xlwb Is Nothing Then xlwb.Close 0
    If Not xlapp Is Nothing Then xlapp.Quit
    Set xlapp = Nothing

  End If

End Function

A +
🙂
 
Re : Problème avec INDIRECT.EXT

@James007:
Merci pour ta réponse. Sur tes conseils je vais tenter d'en apprendre plus sur le VBA (il faut bien commencer un jour...)
Une question cependant; la macro ne risque-t'elle pas d'être extrêmement longue à exécuter étant donné qu'elle devra ouvrir, copier, coller et fermer près de 500 classeurs excel? J'ai du mal à me faire une idée du temps de traitement nécessaire.

Ipno
 
- 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
Retour