If Not shDest Is Nothing Then
shDest.Cells(Rows.Count, 1).End(xlUp)(2).Resize(, 8).Value = .Cells(lig, 1).Resize(, 8).Value
End If
[quote="Hasco, post: 1324481"]Re,
J'ai trouvé l'erreur:
Mettre: Set shSource = Nothing
après la ligne : Next lig
et non avant comme je l'ai Fait
[CODE]Sub Traitement(ByVal an As Integer)
Dim wkSource As Workbook, shDest As Worksheet, shSource As Worksheet
Dim lig As Long, dif As Integer, idxFeuille As Integer
'Récupérer le fichier idoine ou sortir
Set wkSource = GetWorkbook("Conso " & an & ".xls", True, ThisWorkbook.Path)
If wkSource Is Nothing Then Exit Sub
'Récupérer la feuille source ou sortir
Set shSource = GetSheet(CStr(an), wkSource, True)
If shSource Is Nothing Then Exit Sub
'Traiter les données de la feuille source de la ligne 2 à n
For lig = 2 To shSource.Cells(Rows.Count, 1).End(xlUp).Row
'travailler à partir de la feuille source
With shSource.Cells(lig, 7)
If IsDate(.Value) Then
'établir un index de nom de feuille suivant la valeur de dif
dif = Date - .Value
idxFeuille = (((dif <= 0) * 0) + ((dif >= 1 And dif <= 30) * 1) + ((dif >= 31 And dif <= 90) * 2) + ((dif > 90) * 3)) * -1
'Récupérer la feuille destination en fonction de son index
Set shDest = GetSheet("R" & idxFeuille, ThisWorkbook, False)
If Not shDest Is Nothing Then
'Copier les valeur de la ligne source dans la feuille destination
shDest.Cells(Rows.Count, 1).End(xlUp)(2).Resize(, 8).Value = .Cells(lig, 1).Resize(, 8).Value
End If
End If
End With
Next lig
Set shSource = Nothing
'fermer le classeur source et réinitialiser sa variable
wkSource.Close False
Set wkSource = Nothing
End Sub