Private Sub Worksheet_Change(ByVal Target As Range)
Dim f As Byte 'décalre la variable f
Dim li As Byte 'déclare la variable li
Dim nc As Variant 'déclare la variable nc
If Target.Address <> "$D$1" Then Exit Sub 'si le changement n'a pas lieu en D1, sort de la procédure
If Target.Value = "" Then Target.Offset(1, 0).Value = "": Exit Sub 'si on efface D1, D2 est éffacé aussi
nc = Target.Value 'définit la variable nc
For f = 1 To 150 'boucle 1 : sur 150 onglets
With Sheets(f) 'prend en compte l'onglet de la boucle
'boucle 2 : sur les lignes 2 à 150 de l'onglet pris en compte
For li = 2 To 150
If .Cells(li, 1).Value = nc Then 'condition : si la valeur de la cellule correspond au numéro édité en D1
ActiveSheet.Range("D2") = Sheets(f).Name 'écrit en D2 le nom de l'onglet correspondant
GoTo fin 'sort de la procédure via la balise "fin"
End If 'fin de la condition
Next li 'prochaine ligne de la boucle 2
End With 'fin de la prise en compte de l'onglet
Next f 'prochain onglet de la boucle 1
MsgBox "ce numéro de facture n'existe pas" 'ce message apparaît si tous les onglets on été vérifiés
ActiveSheet.Range("D1").Select 'sélectionne la cellule D1 (pour une éventuelle nouvelle édition ou pour être effacée)
fin: 'balise
End Sub