Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Excel.Range) 'au changement sur n'importe quel onglet du classeur
Dim feuille As Worksheet 'déclare la variable feuille
Application.ScreenUpdating = False 'masque les changements à l'écran
On Error GoTo GestErr 'si une erreur se produit, va à l'étiquette "GestErr"
For Each feuille In ThisWorkbook.Worksheets 'boucle sur tous les onglets de ce classeur
With feuille 'prned en compte l'onglet de la boucle
'condition 1 : si le nom de l'onglet est différent de "LV" et si le nom de l'onglet est différent de "Récap. (Edition)"
If feuille.Name <> "LV" And feuille.Name <> "Récap. (Edition)" Then
'condition 2 : si la cellule Q1 n'est pas vide et si la valeur de la cellule Q1 est diférente du nom de l'onglet,
'alors l'onglet est renommé avec la valeur de la cellule Q1
If .Range("Q1") <> "" And .Range("Q1") <> .Name Then .Name = .Range("Q1").Value
End If 'fin de la condition 1
End With 'fin de la prise en compte de l'onglet de la boucle
Next feuille 'prochain onglet de la boucle
Application.ScreenUpdating = True 'affiche les changements à l'écran
Exit Sub 'sort de la procédure
GestErr: 'étiquette
'message
MsgBox "Vous ne pouvez pas nommer l'onglet " & feuille.Name & " : " & feuille.Range("Q1") & " !", _
vbCritical + vbOKOnly
End Sub