' classeur
Dim Shd As Worksheet, ShR As Worksheet
Dim MonTab As Variant, Compt1 As Long
Sub copyData()
Dim Pas As Integer
Pas = 12 ' a modifier
Set ShR = Worksheets("Récap")
For Each Shd In Worksheets
Select Case Shd.Name
Case "Janvier"
MoisNom Shd, 3
Case "Février"
MoisNom Shd, (3 + Pas)
Case "Mars"
MoisNom Shd, (3 + 2 * Pas)
Case "Avril"
MoisNom Shd, (3 + 3 * Pas)
Case "Mai"
MoisNom Shd, (3 + 4 * Pas)
Case "Juin"
MoisNom Shd, (3 + 5 * Pas)
Case "Juillet"
MoisNom Shd, (3 + 6 * Pas)
Case "Aout"
MoisNom Shd, (3 + 7 * Pas)
Case "Septembre"
MoisNom Shd, (3 + 8 * Pas)
Case "Octobre"
MoisNom Shd, (3 + 9 * Pas)
Case "Novembre"
MoisNom Shd, (3 + 10 * Pas)
Case "Décembre"
MoisNom Shd, (3 + 11 * Pas)
End Select
Next Shd
End Sub
Private Function RechercheLigne(Nom As String, Prenom As String) As Long
RechercheLigne = 0
With ShR
Set Plg1 = .Range("A1:B" & .Range("a" & .Rows.Count).End(xlUp).Row)
MonTab = Plg1.Value
For Compt1 = LBound(MonTab, 1) To UBound(MonTab, 1)
If MonTab(Compt1, 1) = Nom And MonTab(Compt1, 2) = Prenom Then
RechercheLigne = Compt1
Exit Function
End If
Next Compt1
End With
End Function
Private Sub MoisNom(Shd As Worksheet, Colonne As Long)
Dim Cellule1 As Range, Plg1 As Range, Lig As Long
With Shd
For Each Cellule1 In .Range("a2:a" & .Range("a" & .Rows.Count).End(xlUp).Row)
Lig = RechercheLigne(CStr(Cellule1.Value), CStr(Cellule1.Offset(0, 1).Value))
If Lig = 0 Then 'ajout
Dl1 = ShR.Range("A" & Rows.Count).End(xlUp).Row + 1
ShR.Range("a" & Dl1) = Cellule1
ShR.Range("b" & Dl1) = Cellule1.Offset(0, 1)
Lig = Dl1
.Range(Cellule1.Offset(0, 2).Address(0, 0) & ":M" & Cellule1.Row).copy _
Destination:=ShR.Cells(Lig, Colonne)
Else
.Range(Cellule1.Offset(0, 2).Address(0, 0) & ":M" & Cellule1.Row).copy _
Destination:=ShR.Cells(Lig, Colonne)
End If
Next Cellule1
End With
End Sub