Sub Valider()
Dim pl As Range 'déclare la variable pl (PLage)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim o As Worksheet 'déclare la variable o (Onglet)
Dim dt As Date 'déclare la variable dt (DaTe)
Dim r As Range 'déclare la variable r (Recherche)
Dim dest As Range 'déclare la variable dest (DESTInation)
''Sheets("ALAIN").Select
''Range("A4:H8359").Select
''Range("A4").Select
Application.ScreenUpdating = False 'masque les changements à l'écran
Set pl = Sheets("FORMULAIRE").Range("A4:A" & Sheets("FORMULAIRE").Range("A65536").End(xlUp).Row) 'définit la plage pl
For Each cel In pl 'boucle sur toutes les cellules éditées cel de la plage pl
If cel.Value <> "" Then 'condition 1 : si la cellule n'est pas vide
On Error Resume Next 'en cas d'erreur passe à la ligne suivante
Set o = Sheets(CStr(cel.Value)) 'définit l'onglet o (génère une erreur si l'onglet n'existe pas)
On Error GoTo 0 'annule la gestion des erreurs
If Not o Is Nothing Then 'condition 2 : si l'onglet o existe
'définit la recherche r (recherche la date en B de cel dans la colonne A de l'onglet o)
dt = cel.Offset(0, 1).Value 'définit la date dt
Set r = o.Columns(1).Find(dt, , xlFormulas, xlWhole) 'définit la recherche r
If Not r Is Nothing Then 'condition 3 : si la date existe
Set dest = r 'définit la cellule de destination (cellule de la date trouvée)
Else 'sinon
'définit la cellule de destination (première cellule vide rencontrée)
Set dest = o.Range("A65536").End(xlUp).Offset(1, 0)
End If 'fin de la condition 3
Range(cel.Offset(0, 1), cel.Offset(0, 7)).Copy dest 'copie les données dans dest
End If 'fin de la condition 2
End If 'fin de la condition 1
Next cel 'prochaine cellule cel de la boucle
Application.ScreenUpdating = True 'affiche les changements à l'écran
End Sub