Bonjour,
Je dois faire le même travail avec des fichiers différents, en fonction d'un contexte choisit par l'utilisateur. Aujourd'hui, j'ai reproduis la même macro pour chacun des contextes. Donc la maintenance peut devenir compliquée.
Je voudrais utiliser des variables de variable...
Voici un extrait de mon code
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Sub PrepaBo()
'Ouvre les fichiers Req du type souhaité et les met en forme
Public Lo As ListObject, WbBo1 As Workbook, WbBo2 As Workbook, WbBo3 As Workbook
Public Req1 As String, Req2 As String, Req3 As String  'Type de requête utilisée 
Application.ScreenUpdating = False
if Contexte1 = true then Req1 = "FichierA.xlsx": Req2 = "FichierB.xlsx": Req3 = "FichierC.xlsx"
if Contexte2 = true then Req1 = "FichierD.xlsx": Req2 = "FichierE.xlsx": Req3 = "FichierF.xlsx"
if Contexte3 = true then Req1 = "FichierG.xlsx": Req2 = "FichierH.xlsx": Req3 = "FichierI.xlsx"
...
'1er traitement
        Set WbBo1 = Workbooks.Open(ChemBo & Req1)    'Req1 cf.ConTxt()
        DoEvents
            Set Lo = .ListObjects.Add(xlSrcRange, .Range("$C$7").CurrentRegion, , xlYes)
            With Lo
                .Name = "TbBoSce1"
                .TableStyle = "tablestylemedium5" 'sans mise en forme
            End With
        ... suite du code
'2e traitement
        Set WbBo2 = Workbooks.Open(ChemBo & Req2)    'Req2 cf.ConTxt()
        DoEvents
            Set Lo = .ListObjects.Add(xlSrcRange, .Range("$C$7").CurrentRegion, , xlYes)
            With Lo
                .Name = "TbBoSce2"
                .TableStyle = "tablestylemedium5" 'sans mise en forme
            End With
        ... suite du code
'3er traitement
        Set WbBo3 = Workbooks.Open(ChemBo & Req3)    'Req3 cf.ConTxt()
        DoEvents
            Set Lo = .ListObjects.Add(xlSrcRange, .Range("$C$7").CurrentRegion, , xlYes)
            With Lo
                .Name = "TbBoSce3"
                .TableStyle = "tablestylemedium5" 'sans mise en forme
            End With
        ... suite du code
... suite du code est strictement identique pour les 3 traitements ET les fichiers restent ouverts pour traiter tous les fichiers de travail du contexte.
Mon Pb vient des variables WbBo1, Req1, TbBoSce1 qui prennent l'indice 2 et 3 dans les 2e et 3e traitement.

J'ai essayé d’insérer une variable Sce as Byte et une boucle For comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
For Sce =1 to 3        
        Set WbBo & Sce = Workbooks.Open(ChemBo & Req & Sce )    'Req1 cf.ConTxt()
        DoEvents
            Set Lo = .ListObjects.Add(xlSrcRange, .Range("$C$7").CurrentRegion, , xlYes)
            With Lo
                .Name = "TbBoSce" & Sce 
                .TableStyle = "tablestylemedium5" 'sans mise en forme
            End With
        ... suite du code
Next Sce
Mais cela ne fonctionne pas
Il y a ensuite des traitements sur les fichiers WbBo ouverts toujours identiques, d’où l’intérêt de le faire qu'une fois.
Est-ce que qq'1 peut me dire comment procéder ou ce n'est pas possible ?