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":
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 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 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.
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 module "Plage" du fichier source:
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 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
Voici les résultats :
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
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.
Partager