Bonjour !

Je souhaiterais créer un tableau avec trois colonnes : la première colonne est une colonne avec des montants (en milliers d'euros de sorte qu'une cellule va typiquement être 2 500 KEUR). Ma deuxième colonne récupère un taux de change qui se trouve dans une autre feuille et la troisième colonne fait un produit des deux.

Ce que j'ai fait, c'est que j'ai créé une fonction qui extrait la partie devise de ma cellule

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
Function extractLetters(vRge As Variant, j As Long, k As Long)
'extrait lettres
Dim Texte As String
Dim oReg As Object
Set oReg = CreateObject("vbscript.regexp")
    With oReg
        .Global = True
        .IgnoreCase = True
        .Pattern = "\d"
        Texte = .Replace(vRge(j, k).Text, "")
    End With
End Function
Puis ensuite je fais un vLookUp qui est censé récupéré le taux de change associé au montant indiqué dans la cellule
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
Sub ComputeNumbers()
 
Dim oWsh As Excel.Worksheet
Dim oRg As Excel.Range
Dim vTmp As Variant
Dim j As Long
Dim sName As String
 
For Each oWsh In ThisWorkbook.Worksheets
	Select Case sName
        	Case "Sheet 1"
                Set oRg = oWsh.UsedRange
                vTmp = oRg.Value
 
		For j = LBound(vTmp) To UBound(vTmp)
			vTmp(j + 1, 2) = Application.VLookup(extractLetters(vTmp(j + 1, 1)), "K" & ThisWorkbook.Worksheets("Taux de change").Range("A:B"), 2, False)
		Next j
 
        	Case "Sheet 2"
                Set oRg = oWsh.UsedRange
                vTmp = oRg.Value
 
		For j = LBound(vTmp) To UBound(vTmp)
			vTmp(j + 1, 2) = Application.VLookup(extractLetters(vTmp(j + 1, 1)), "K" & ThisWorkbook.Worksheets("Taux de change").Range("A:B"), 2, False)
 
		Next j
 
        	Case "Sheet 3"
                Set oRg = oWsh.UsedRange
                vTmp = oRg.Value
 
		For j = LBound(vTmp) To UBound(vTmp)
			vTmp(j + 1, 2) = Application.VLookup(extractLetters(vTmp(j + 1, 1)), "K" & ThisWorkbook.Worksheets("Taux de change").Range("A:B"), 2, False)
 
		Next j
	End Select
Next
 
End Sub
Le seul problème c'est que quand je lance la sub ComputeNumbers() j'ai l'erreur "Argument non facultatif" quand il y a utilisation de la fonction extractLetters.

Comme vous l'aurez remarqué, le code doit fonctionner pour les trois feuilles Sheet 1, Sheet 2 et Sheet 3, les taux de change se trouve dans la feuille "Taux de Change" sous le format EUR et non KEUR et enfin il faut garder les données de chaque feuille en tant que Variant.

Voilà un grand merci par avance pour votre aide ! Je suis disponible si vous avez besoin de précisions !