Salut à tous. Je vous remercie premièrement pour votre beau travail ici. Voici mon problème:

J'ai un fichier source nommé "source.xlsm" et un fichier de destination nommé "destination.xlsm" qui sont situés dans le même répertoire.
Le ficher source contient un tableau structuré nommé "Tableau1". (Onglet accueil > Groupe Style > Mettre sous forme de tableau)

Mon but: Récupérer la référence de la plage occupée par le "Tableau1" en utilisant Application.Run depuis le fichier "destination.xlsm".

J'ai créé deux procédures quasiment identiques pour récupérer cette valeur dans le code du fichier "destination.xlsm":

- LirePlage() dans le module ordinaire "LirePlage" du fichier "destination.xlsm" qui appelle la fonction "Plage" dans le module ordinaire "Plage" (ou "Test_Plage") du fichier "source.xlsm".
- LirePlageTab() dans le module "Feuil1" du fichier "destination.xlsm" qui appelle la fonction "PlageTab" (ou "Test_PlageTab") dans le module "Feuil1" du fichier "source.xlsm".

Idéalement, je voudrais garder qu'une seule procédure par fichier et c'est justement ça le problème.

Dans le module "LirePlage" du fichier "destination.xlsm":

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
Sub LirePlage()
 
Dim X(0 To 4) As String
X(1) = ThisWorkbook.Path    'Chemin d'accès
X(2) = "source.xlsm"            'Nom de fichier
X(3) = "Plage"                     'Nom de la procédure
X(4) = "Tableau1"                'Nom du tableau structuré (argument de la procédure)
 
Range("C5") = Application.Run("'" & X(1) & "\" & X(2) & "'" & "!" & X(3), X(4))    'La cellule choisie (C5) n'a pas d'importance
Workbooks(X(2)).Close
 
End Sub
Dans le module "Feuil1" du fichier "destination.xlsm":

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
Sub LirePlageTab()
 
Dim X(0 To 4) As String
X(1) = ThisWorkbook.Path    'Chemin d'accès
X(2) = "source.xlsm"            'Nom de fichier
X(3) = "PlageTab"                'Nom de la procédure
X(4) = "Tableau1"                'Nom du tableau structuré (argument de la procédure)
 
Range("C5") = Application.Run("'" & X(1) & "\" & X(2) & "'" & "!" & "Feuil1." & X(3), X(4))    ' Ne pas oublié d'ajouter "Feuil1."
Workbooks(X(2)).Close
 
End Sub
Dans le fichier source j'ai deux fonctions par module. Deux dans le module "Plage" et deux dans le module "Feuil1". Il n'en faudrait qu'une seule idéalement.

Dans le module "Plage" du fichier source:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
Function Plage(NomTableau As String)
 
Plage = ThisWorkbook.Worksheets(1).ListObjects(NomTableau).Range.Address
Debug.Print "Plage(""" & NomTableau & """) = " & Plage
 
End Function
 
Function Test_Plage(NomTableau As String)
 
Test_Plage = Plage(NomTableau)
 
End Function
Dans le module "Feuil1" du fichier source:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
Function PlageTab(NomTableau As String) As String
 
PlageTab = ThisWorkbook.Worksheets(1).ListObjects(NomTableau).Range.Address
Debug.Print "PlageTab(""" & NomTableau & """) = " & PlageTab
 
End Function
 
Function Test_PlageTab(NomTableau As String)
 
Test_PlageTab = PlageTab(NomTableau)
 
End Function
Voici les résultats :

I. LirePlage avec X(3) = "Plage" => Erreur 1004
II. LirePlage avec X(3) = "Test_Plage" => OK

III. LirePlageTab avec X(3) = "PlageTab" => Chaîne vide "" en C5 , mais Débug.Print OK
IV. LirePlageTab avec X(3) = "Test_PlageTab" => Chaîne vide "" en C5 , mais Débug.Print OK

Précisions:
Erreur 1004 Impossible d'exécuter la macro ''<chemin d'accès>\source.xlsm'!Plage'. Il est possible qu'elle ne soit pas disponible dans ce classeur ou que toute les macros soient désactivées.

Question 1: Pouvez-vous me dire pourquoi la procédure fonctionne en II , mais pas en I ? Ce qu'il y a de bien, c'est que j'ai au moins une bonne solution, mais j'aimerais passer directement par la fonction "Plage" et laisser tomber la fonction "Test_Plage" qui appelle "Plage" avec l'argument "Tableau1" passé par Application.Run.

Question 2: Pourquoi la procédure III et IV me retournent ce que je veux dans la fenêtre d'exécution, mais que je ne peux retrouver cette même valeur en l'affectant à la cellule C5 ?

Un grand merci à tous les passionnées.
Exige beaucoup de toi-même et attends peu des autres. Ainsi beaucoup d'ennuis te seront épargnés.