Public Sub Macro1()
Dim f As Object 'déclare la variable f (onglet Feuil1)
Dim o As Object 'déclare la variable o (Onglet)
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim nd As String 'déclare la variable nd (Numéro du Dossier)
Dim v As String 'déclare la variavle v (Version)
Set f = Sheets("Feuil1") 'définit l'onglet f
On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
Set o = Sheets(f.Range("B16").Value) 'définit l'onglet o (génère une erreur si cet onglet n'existe pas)
If Err <> 0 Then 'condition : si une ereur a été générée
Err = 0 'annule l'ereur
MsgBox "L'onglet " & f.Range("C3").Value & " n'existe pas !" 'message
f.Select 'sélectionne l'onglet f (au cas où...)
f.Range("C3").Select 'sélectionne la cellule C3 de l'onglet f
Exit Sub 'sort de la procédure
End If 'fin de la condition
On Error GoTo 0 'annule la gestion des ereurs
nd = CStr(f.Range("C16").Value) 'définit le numéro de dossier nd
v = CStr(f.Range("D16").Value) 'définit la version v
dl = o.Cells(Application.Rows.Count, 4).End(xlUp).Row 'définit la dernière ligne dl de la colonne 4 (=D)
f.Range("B16:D16").Copy 'copie B16:D16
o.Range(o.Cells(dl + 1, 3), o.Cells(dl + 1, 5)).Insert shift:=xlShiftDown 'insère dans la ligne li
Application.CutCopyMode = False 'supprime le clignotement des cellule copiées
Set pl = o.Range(o.Cells(3, 3), o.Cells(dl + 1, 5)) 'définit la plage pl
pl.Interior.ColorIndex = xlNone 'enlève la couleur à la plage pl
'tri la plage pl par ordre croissant de numéro de dossier et par ordre croissant de version
pl.Sort Key1:=o.Range("D3"), Order1:=xlAscending, _
Key2:=o.Range("E3"), Order2:=xlAscending, _
Header:=xlNo, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:=xlSortNormal
o.Range("C2").AutoFilter field:=2, Criteria1:=nd 'filtre le tableau para rapport au numéro de dossier
pl.SpecialCells(xlCellTypeVisible).Interior.ColorIndex = 15 'colore la plage visible de gris
'si le nombre de ligne visible est supérieur à 1, ajoute la date en coloone F de l'avant dernière cellule de la plage visible
If pl.SpecialCells(xlCellTypeVisible).Rows.Count > 1 Then o.Cells(pl.SpecialCells(xlCellTypeLastCell).Row - 1, 6).Value = Date
o.Range("C2").AutoFilter field:=3, Criteria1:=v 'filtre la plage visible par rapport à la version
pl.SpecialCells(xlCellTypeVisible).Interior.ColorIndex = xlNone 'supprime la couleur de la ligne visible
o.Range("C2").AutoFilter 'supprime le filtre
o.Select 'sélectionne l'Onglet
End Sub