Q:

How to Pass multiple tables to a VBA function and back?

I already asked several questions on this subject, but here is a summary :
For work, I need to be able to pass through several technical files (excel and word) to gather data and bring all these data to a nice excel table.
I made a first attempt, and decided to restart from scratches (almost, I copy some nice code functions I already made on the first attempt)
And, there is the case where I need to have to get several tools references associated to their prices in Euro and Dollard.
Therefore, I have a pretty function called GetToolPrices() To which I give the list of tools references (through a table) and I'd like to get back 2 tables called ToolPriceEuro() and ToolPriceDollard().
The nice thing is that the "tool 1" has it's informations in the 1st place of each table, so, later, I'll just need to get all the tables, pick the first info and I know it's for the tool 1.
So, how to send back two tables through one function?
For example, in the function "GetTools", that gathers the tools references, I send it back through this GetTools = RCTable(), RCTable() being the temporary table that is filled with the tools references before sending it back to the main program. This works fine !
But I have no idea how to send back two tables that way... I'm a bit discovering the functions and that all, read a lot of things on different webpages but that was of no help :(
Main code
For Each Fol In Worksheets("Data").Range("TPIFold") 'For each Folder in all the adresses indexed in the cells called "TPIFold"
    For Each Fil In fso.GetFolder(Fol).Files  'For each file found in each one of these folders
        ReDim RCodeTab(1)  'reset the tables
        ReDim ToolTab(1)
        FileExt = fso.GetExtensionName(Fil)  'Get the extension name
        FileNm = fso.GetFileName(Fil) 'Get the file name
        If FileExt = "docx" Then
            If ReadFiles = vbYes Then
                FileTab(1) = GetCode(FileNm) 'Get the Code of the file present in the folders and copy it to the tables
                FileTab(2) = GetName(FileNm) 'Get the name of the file and delete the underscores
            End If
            If FileTab(1) <> "" And FileTab(2) <> "" Then 'If the file got a code and a name that have been recognized

'Opens the good Word file
                oApp.Visible = True
                FilAdress = Fil
                Set oDoc = oApp.Documents.Open(FilAdress, ReadOnly:=True)                   'Open the word document
'Gather everything needed from this word file and store that in Tables
                RCodeTab() = GetRCode(FileNm)   'That's not important for now ;)
                ToolTab() = GetTools(FileNm)    'Here we got the tools references

                ToolPrices() = GetToolPrices(ToolPriceEuro(), ToolPriceDollard()) 'This, obviously don't work...

            End If
        End If
    Next
Next

Here is the function which I would like to send back 2 tables...
Public Function GetToolPrices(ToolTab() As String) As Variant

Dim ToolPriceEuro() As String
Dim ToolPriceDollard() As String

Dim Collect As Collection
Set Collect = New Collection

PriceListFold = Worksheets("Data").Range("F2").Value & "\" & Worksheets("Data").Range("F3").Value   'The folder where there is the price list
PriceListFile = Worksheets("Data").Range("F3").Value 'The file where the price list is
PriceListSheet = Worksheets("Data").Range("F4").Value  'gets the name of the sheet on which all the data are written. Theorically, it should not change
Bidule = 1  'Initialisation

Workbooks.Open Filename:=PriceListFold, ReadOnly:=True 'open the file with the list of prices and references
EndRange = Range("A:A").SpecialCells(xlCellTypeLastCell).Address 'Gets the last used cell of the column A
EndRangePos = InStr(2, EndRange, "$")
EndRange = Right(EndRange, Len(EndRange) - EndRangePos)                                                 'And keeps just the line number
EndRange = CInt(EndRange)

 Do While Bidule <= UBound(ToolTab())
    PartNumber = ToolTab(Bidule)                                               'Gets the Part number
         If PartNumber <> "" Then
            PassThrough = 1
            SearchResult = False
            Do While PassThrough <= EndRange
                SheetCode = Worksheets(PriceListSheet).Range("A" & PassThrough).Text
                If SheetCode = PartNumber Then
                    Worksheets(PriceListSheet).Range("A" & PassThrough).Activate
                    ResultCell = Worksheets(PriceListSheet).Range("A" & PassThrough).Address
                    Tempo = ActiveCell.Offset(0, 2)
                    ReDim Preserve ToolPriceEuro(1 To Bidule)
                    ToolPriceEuro(Bidule) = Tempo
                    Tempo = ActiveCell.Offset(0, 5)
                    ReDim Preserve ToolPriceDollard(1 To Bidule)
                    ToolPriceDollard(Bidule) = Tempo
                    PassThrough = EndRange
                    SearchResult = True
                End If
                PassThrough = PassThrough + 1
            Loop
            If SearchResult = False Then
                ToolPriceEuro(Bidule) = "Not Found"
                ToolPriceDollard(Bidule) = "Not Found"
            End If
        End If
        Bidule = Bidule + 1
Loop

Collect.Add ToolPriceEuro()
Collect.Add ToolPriceDollard()

GetToolPrices = ToolPriceEuro() & ToolPriceDollard() 'That don't work, it's sad, it would be so easy...

End Function

There are surely things in this code that are illogical, useless or other, but IT IS OF NO IMPORTANCE, as said at the beginning, I'm recovering parts of the first attempt, I'll clean that after, when I'll have something working at least a bit.
For now, the great question is "how do I send back the two tables called ToolPriceEuro() & ToolPriceDollard()"
Thank's by advance !
Small bonus question : I've hurt the "Stackoverflow tags inputbox" and I can't create the "Table" tag... 
What is the name of these things I used and thought were called tables? Arrays? Aren't arrays something similar but slightly different? ;-)

A:

They are arrays indeed ("tableau" in French, which does reasonably translate to "table")! ;-)
Arrays are a bit special in VBA though. You can return an array as a Variant from a Function procedure, but if you need to return two of them then you leverage the [implicit default] ByRef modifier, so the caller can simply query the very same array pointers it passed to your function:
Public Sub Fill(ByRef foo() As Variant)
    ReDim foo(1 To 10)
    Dim i As Long
    For i = LBound(foo) To UBound(foo)
        foo(i) = i
    Next
End Sub

The caller of this procedure needs to supply an array:
Dim items() As Variant
Fill items
Debug.Print UBound(items)

Alternatively, if the two arrays are intimately related, you could wrap them in an object, and return an instance of that object. In its simplest, most naive form, that would be a Class1 module that might look like this:
Option Explicit
Public PricesEUR As Variant
Public PricesUSD As Variant

And then your function can do:
Dim result As Class1
Set result = New Class1
result.PricesEUR = ToolPriceEuro
result.PricesUSD = ToolPriceDollard
Set GetToolPrices = Class1

Requires changing the return type to Class1 (or whatever meaningful name you gave the class):
Public Function GetToolPrices(ByRef ToolTab() As String) As Class1

...but, if all "tools" have a price in the same currencies, then you're ending up with "parallel" arrays, and that's a design smell. A better solution would be to define some ItemPrice class - again a simple/naive implementation here:
Public ItemCode As String
Public CurrencyCode As String
Public Amount As Currency

And now you can return an array (or better, a Collection, which could be keyed by ItemCode & CurrencyCode to easily retrieve any Amount) of such ItemPrice items that each know what currency they're in and what item/tool code they're for.

GetToolPrices = ToolPriceEuro() & ToolPriceDollard() 'That don't work, it's sad, it would be so easy...

It doesn't work because & used that way is the string concatenation operator: VBA doesn't know what you mean to do when you give it array operands, since an array can't be coerced into a string, so you probably get a type mismatch error for it.

