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 58 59 60 61 62 63 64 65 66 67 68 69
| Option Explicit
Sub Traitement()
Dim oWksh As Worksheet
Dim oRng As Range, oRng_2 As Range, oResult As Range
Dim i As Integer, n As Integer
Dim oList1() As String
Dim oCell As Range, oCell_2 As Range
'Supprime la feuille "Recap" si déjà existante
For Each oWksh In Worksheets
If oWksh.Name = "Recap" Then
Application.DisplayAlerts = False
oWksh.Delete
Application.DisplayAlerts = True
End If
Next oWksh
'Créé la feuille "Recap"
Set oWksh = Worksheets.Add(After:=Worksheets(Worksheets.Count))
oWksh.Name = "Recap"
With oWksh
.Range("A1") = "Mon titre 1"
.Range("B1") = "Mon titre 2"
.Range("C1") = "Mon titre 3"
.Range("D1") = "Mon titre 4"
End With
'Avec la feuille "Liste1"
With Worksheets("Liste1")
Set oRng = .Range("A1")
n = 1
For i = 0 To .Cells(.Rows.Count, oRng.Column).End(xlUp).Row - oRng.Row
ReDim Preserve oList1(1 To 2, 1 To n)
oList1(1, n) = oRng.Offset(i, 0)
oList1(2, n) = oRng.Offset(i, 1)
n = n + 1
Next i
End With
'Avec la feuille "Liste2"
With Worksheets("Liste2")
For i = LBound(oList1, 2) To UBound(oList1, 2)
Set oRng = FindAll(.Columns(1), oList1(1, i))
If Not oRng Is Nothing Then
For Each oCell In oRng
'Sur la feuille "Liste3"
Set oRng_2 = FindAll(Worksheets("Liste3").Columns(1), oCell.Offset(0, 1))
If Not oRng_2 Is Nothing Then
For Each oCell_2 In oRng_2
Set oResult = oWksh.Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0)
oResult.Offset(0, 0) = oList1(1, i)
oResult.Offset(0, 1) = oCell.Offset(0, 1)
oResult.Offset(0, 2) = oCell_2.Offset(0, 1)
oResult.Offset(0, 3) = oList1(2, i)
Next oCell_2
Else
'Possibilité d'ajouter de la gestion d'erreur si on ne trouve pas de correspondance entre Liste2 et Liste3
End If
Set oRng_2 = Nothing
Next oCell
Else
'Possibilité d'ajouter de la gestion d'erreur si on ne trouve pas de correspondance entre Liste1 et Liste2
End If
Set oRng = Nothing
Next i
End With
End Sub |
Partager