Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim l As Byte 'déclare la variable l (Longueur)
Dim c As Byte 'déclare la variable c (Compteur)
Dim mot As String 'déclare la variable mot
If Target.Address <> "$B$2" Then Exit Sub 'si le changement a lieu ailleurs qu'en B2, sort de la procédure
If Target.Value = "" Then Target.Offset(0, 1).Value = "": Exit Sub 'si B2 est effacé, efface C2 et sort de la procédure
UserForm1.ListBox1.Clear 'vide la ListBox1 du l'UserForm1
With Sheets("Liste") 'prend en compte l'onglet "Liste"
dl = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée dl de la colonne 1 (=A)
Set pl = .Range("A2:A" & dl) 'définit la plage pl
End With 'fin de la en compte de l'onglet "Liste"
l = Len(Range("B2")) 'définit la longueur (nombre de caractères) du texte en B2
For Each cel In pl 'boucle sur toutes les cellules cel de la plage pl
Select Case l 'agit en fonction de la longueur l
Case 1 'cas 1 (un seul caractère en B2)
If UCase(Left(cel.Value, l)) = UCase(Target.Value) Then 'condition : si le premier caractère à gauche de cel est égal au caractère en B2 (majuscule ou minuscule)
UserForm1.ListBox1.AddItem cel.Value 'ajoute la valeur de la cellule cel à la ListBox1 de l'UserForm1
mot = cel.Value 'définit le mot (valeur de la cellule cel
c = c + 1 'incrémente le compteur c
End If 'fin de la condition
Case 2 'cas 2 (deux caractères en B2)
On Error Resume Next 'gestion des ereurs (en cas d'erreur, passe a la ligne suivante)
'condition 1 : si premier caractère à gauche du premier mot de cel est égal au premier caractère en B2 (majuscule ou minuscule) et
'si le premier caractère à gauche du second mot de cel est égal au second caractère en B2 (majuscule ou minuscule)
'(si il n'y a qu'un seul mot cela provoque une erreur)
If UCase(Left(Split(cel.Value, " ")(0), 1)) = UCase(Left(Target.Value, 1)) And UCase(Left(Split(cel.Value, " ")(1), 1)) = UCase(Right(Target.Value, 1)) Then
If Err <> 0 Then 'condition 2 : si une erreur a été généré
Err = 0 'annule l'erreur
GoTo suite: 'va à l'étiquette "suite"
End If 'fin de la condition 2
On Error GoTo 0 'annule la gestion des erreurs
UserForm1.ListBox1.AddItem cel.Value 'ajoute la valeur de la cellule cel à la ListBox1 de l'UserForm1
mot = cel.Value 'définit le mot (valeur de la cellule cel
c = c + 1 'incrémente le compteur c
End If 'fin de la condition 1
End Select 'fin de l'action en fonction de la longueur l
suite: 'étiquette
Next cel 'prochaine cellule de la boucle
If c > 1 Then 'condition : si C est supérieur a 1
UserForm1.Show 'affiche l'UserForm1
Else 'sinon
Range("C2").Value = mot 'place le mot en c2
End If
End Sub