Option Explicit
Dim initBaseOk As Boolean
Dim datas, dictDep, dictPallet, dictPays
Function Forwarding(pays As String, codePostal, palette As String, index As Long)
Dim lig As Long, numlig
If Not initBaseOk Then initbase
numlig = Split(dictDep(dictPays(pays) & codePostal), ",")
If index - 1 <= UBound(numlig) Then lig = CLng(numlig(index - 1))
If lig > 0 Then Forwarding = datas(lig, 2) Else Forwarding = ""
End Function
Function cout(pays As String, codePostal, palette As String, index As Long)
Dim lig As Long, numlig
If Not initBaseOk Then initbase
numlig = Split(dictDep(dictPays(pays) & codePostal), ",")
If index - 1 <= UBound(numlig) Then lig = CLng(numlig(index - 1))
If lig > 0 Then cout = datas(lig, dictPallet(palette)) Else cout = ""
End Function
Sub initbase()
Dim lig As Long, col As Long
Set dictDep = CreateObject("Scripting.Dictionary")
Set dictPallet = CreateObject("Scripting.Dictionary")
Set dictPays = CreateObject("Scripting.Dictionary")
' dict pays
With Sheets("Liste déroulante")
datas = .[F9:F10].Resize(, .Cells(9, Columns.Count).End(xlToLeft).Column - 5).Value
End With
For col = 1 To UBound(datas, 2)
dictPays(datas(1, col)) = datas(2, col)
Next col
' datas
datas = Sheets("DATABASE").[A7].CurrentRegion.Value
' dict départements
For lig = 7 To UBound(datas)
If dictDep.exists(datas(lig, 1)) Then
dictDep(datas(lig, 1)) = dictDep(datas(lig, 1)) & "," & lig
Else
dictDep(datas(lig, 1)) = lig
End If
Next lig
' dict palettes
For col = 4 To UBound(datas, 2)
dictPallet(datas(4, col)) = col
Next col
initBaseOk = True
End Sub