Sub Test()
'* Déclaration des variables
Dim tableauA As Range, tableauB As Range, tableauC As Range, curCell As Range, zoneConcatA As Range, zoneConcatB As Range
Dim i As Long
Dim formule As String
'* Initialisation des variables
Set tableauA = ThisWorkbook.Sheets("bdd 1").Range("A3:C5") 'données du premier trimerstre
Set tableauB = ThisWorkbook.Sheets("bdd 2").Range("A3:C10") 'données du premier et deuxième trimerstre
Set tableauC = ThisWorkbook.Sheets("bdd 3").Range("A3") 'première case du tableau résultat (deuxième trimerstre uniquement)
'* On va écrire (par formule) dans la colonne à droite du tableauA la concaténation avec "|" des colonnes du tableau
' Remarque : cela implique que la colonne à droite du tableau doit être vide
'définir la zone ou sera écrite la concaténation
Set zoneConcatA = tableauA(1, 1).Offset(0, tableauA.Columns.Count).Resize(tableauA.Rows.Count, 1)
'générger la formule
formule = "="
For i = tableauA(1, 1).Column To tableauA(1, 1).Column + tableauA.Columns.Count - 1
formule = formule & "RC" & i & "&""|""&"
Next i
formule = Left(formule, Len(formule) - 5)
'appliquer la formule à la zone à droite du tableauA
zoneConcatA.FormulaR1C1 = formule
'* On fait la même chose à droite du tableauB
Set zoneConcatB = tableauB(1, 1).Offset(0, tableauB.Columns.Count).Resize(tableauB.Rows.Count, 1)
formule = "="
For i = tableauB(1, 1).Column To tableauB(1, 1).Column + tableauB.Columns.Count - 1
formule = formule & "RC" & i & "&""|""&"
Next i
formule = Left(formule, Len(formule) - 5)
zoneConcatB.FormulaR1C1 = formule
'* On écrit dans tableauC ce qui est dans tableauB et pas dans tableauA
'on filtre avec les valeurs concaténées
i = 0
For Each curCell In zoneConcatB
If zoneConcatA.Find(curCell.Text, , xlValues, xlWhole) Is Nothing Then
i = i + 1
tableauC(1, 1).Offset(i - 1, 0) = curCell.Text
End If
Next curCell
'on "dé-concatène"
If i <> 0 Then
tableauC(1, 1).Resize(i).TextToColumns tableauC(1, 1), xlDelimited, xlDoubleQuote, , , , , , True, "|"
End If
'effacer les formules de concaténation
zoneConcatA.Clear
zoneConcatB.Clear
End Sub