Private Sub Worksheet_Change(ByVal Target As Range)
Dim ad As Range 'déclare la variabe ad (Anciennes Données)
Dim o As Object 'déclare la variabe o (Onglet)
Dim r As Range 'déclare la variabe r (Recherche)
Dim pa As String 'déclare la variabe pa (Première Adresse)
Dim dest As Range 'déclare la variabe dest (cellule de DESTination)
If Target.Address <> "$A$1" Then Exit Sub 'si le changement a lieu ailleurs que dans A1, sort de la procédure
Set ad = Range("A1").CurrentRegion 'définit la plage AD
If ad.Cells.Count > 1 Then 'condition : si la plage ad contient plus d'une seule cellule
Set ad = ad.Offset(0, 1).Resize(ad.Rows.Count, ad.Columns.Count - 1) 'redéfinit la plage ad (sans la colonne A)
ad.ClearContents 'vide le contenu de la plage ad
End If 'fin de la condition
If Target.Value = "" Then Exit Sub 'si la cellule est effacée, sort de la procédure
For Each o In Sheets 'boucle sur tous les onglet du classeur
pa = "" 'réinitialise la variable pa
If o.Name <> "SYNTHESE" Then 'condition 1 : si le nom de l'onglet est différent de "SYNTHESE"
Set r = o.Cells.Find(Target.Value, , xlValues, xlWhole) 'de'finit la recherche r
If Not r Is Nothing Then 'condition 2 : si il existe au moins une occurrence trouvé
pa = r.Address 'définit l'adresse pa de la première ocurrence
Do 'exécute
'définit la cellule de destination (B1 si B1 est vide, sinon la permière ligne vide en colonne B)
Set dest = IIf(Range("B1").Value = "", Range("B1"), Cells(Application.Rows.Count, 2).End(xlUp).Offset(1, 0))
dest.Value = o.Name 'place le nom de l'onglet
dest.Offset(0, 1).Value = r.Offset(0, 1).Value 'place la valeur à droite
Set r = o.Cells.FindNext(r) 'redéfinit la recherche r (occurrence suivante)
Loop While Not r Is Nothing And r.Address <> pa 'boucle tant qu'il existe de nouvelles occurrence ailleurs qu'en pa
End If 'fin de la condition 2
End If 'fin de la condition 1
Next o 'prochain onglet de la boucle
Range("A2").Select
End Sub