Bonjour à tous,

Je viens vers vous après de multiples tentatives infructueuses pour tenter de résoudre mon problème.
Je m'explique:
Dans un classeur "MyWB", une macro me permet d'ouvrir un classeur "EstimateFile". A l'aide d'un UserForm ("Dataselection"), j'invite l'utilisateur à sélectionner une colonne, puis une deuxième.

Ces paramètres vont me servir à faire un Index + Match pour renvoyer des valeurs dans l'onglet "DataExport" de mon classeur MyWB.
Or, lorsque j'exécute ma macro, aucune valeur n'est retournée.
Au fur et à mesure du code, j'ai mis des MsgBox pour tester les variables. Surprise, ils me renvoient les valeurs, mais mon Index Match ne marche pas.
J'ai fait de multiples tentatives (que j'ai mises en commentaires au fur et à mesure), mais je vous fais grâce de cela dans le code (ça allonge beaucoup trop).

J'ai isolé l'Index +Macth dans un autre module, en remplaçant les variables issues de l'UserForm, par leur valeur grâce à des "" . Et l'index marche.
J'ai donc un problème concernant le stockage et l'utilisation des variables issues de l'UserForm.

Voici le code de la macro en question :
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
Sub OpenFile2_Work()
Sheets("DataExport").Activate
 
Dim EstimateFile As String
Dim MyWB As String
Dim DerliData As Integer
MyWB = ThisWorkbook.Name
 
     With Application.FileDialog(3)
        .Title = "Please select your estimate file"
        .Show
 
        On Error Resume Next 'si annuler
        Fichier = .SelectedItems(1)
 
        If Err.Number <> 0 Then Exit Sub
        Workbooks.Open Fichier, UpdateLinks:=0 'désactive la MAJ des liaisons
 
 
    Dataselection.Show
    Dataselection.StartUpPosition = 3 'UserForm centré par rapport à l'écran
 
'Declaration des données du Userform
PartsSheet = Range(Dataselection.RefEditParts).Parent.Name
PartsCol = Dataselection.RefEditParts.Value
PriceSheet = Range(Dataselection.RefEditPrice).Parent.Name
PriceCol = Dataselection.RefEditPrice.Value
Application.ScreenUpdating = False
 
If Workbooks.Count = 2 Then
For i = 1 To 2
If Not Workbooks(i).Name = ThisWorkbook.Name Then EstimateFile = Workbooks(i).Name
Next i
End If
 
'Workbooks(MyWB).Sheets("DataExport").Activate
'MsgBox PriceSheet
'MsgBox PartsSheet
'MsgBox PartsCol
'MsgBox PriceCol
'MsgBox MyWB
'MsgBox EstimateFile
 
On Error Resume Next
'Index
DerliData = Workbooks(MyWB).Sheets("DataExport").Range("C" & Rows.Count).End(xlUp).Row
 
 
For Ligne = 2 To DerliData
Workbooks(MyWB).Sheets("DataExport").Cells(Ligne, 7) = WorksheetFunction.Index(Workbooks(EstimateFile).Sheets(PriceSheet).Rance(PriceCol).Columns, WorksheetFunction.Match(Workbooks(MyWB).Sheets("DataExport").Range(Cells(Ligne, 5), Cells(Ligne, 5)), Workbooks(EstimateFile).Sheets(PartsSheet).Range(PartsCol).Columns, 0))
Next
        On Error GoTo 0
End With
   Workbooks(MyWB).Sheets("DataExport").Activate
Application.ScreenUpdating = True
 
End Sub
Voici le code de l'index match qui fonctionne :
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
Sub IndexTest()
Sheets("DataExport").Activate
 
Dim EstimateFile As String
Dim MyWB As String
Dim DerliData As Integer
 
 
Windows("RT_Work_File_BOM Extract-v1.1.xlsm").Activate
Sheets("DataExport").Select
MyWB = ThisWorkbook.Name
'Récupère le nom du fichier ouvert
If Workbooks.Count = 2 Then
For i = 1 To 2
If Not Workbooks(i).Name = ThisWorkbook.Name Then EstimateFile = Workbooks(i).Name
Next i
End If
 
'Index
DerliData = Workbooks(MyWB).Sheets("DataExport").Range("C" & Rows.Count).End(xlUp).Row
 
Sheets("DataExport").Activate
  On Error Resume Next
 
    For Ligne = 2 To DerliData
Cells(Ligne, 7) = WorksheetFunction.Index(Workbooks(EstimateFile).Sheets("Chiffrage").Range("AC:ac"), WorksheetFunction.Match(Workbooks(MyWB).Sheets("DataExport").Range(Cells(Ligne, 5), Cells(Ligne, 5)), Workbooks(EstimateFile).Sheets("Chiffrage").Range("B:B"), 0))
Next
On Error GoTo 0
 
End Sub
Auriez-vous une idée pour résoudre mon problème svp ?

En vous remerciant par avance pour votre aide précieuse,