[résolu] retrouver mot de la liste dont on a l'initiale

Rrradassse

XLDnaute Junior
Bonjour,

Je souhaite pouvoir retrouver un mot d'une liste à partir de son initiale (cf. exemple joint).

Connaissez-vous une formule simple permettant de le faire? (par la formule "SI", cela engendre une formule tès longue qu'il faut prolonger à chaque fois qu'on ajoute un terme dans la liste)

Merci beaucoup,

Rrradassse
 

Pièces jointes

  • Exemple.xlsx
    9.7 KB · Affichages: 50
  • Exemple.xlsx
    9.7 KB · Affichages: 48
  • Exemple.xlsx
    9.7 KB · Affichages: 46
Dernière édition:

Rrradassse

XLDnaute Junior
Re : retrouver mot de la liste dont on a l'initiale

Non en effet, puisque ce n'est pas l'intitulé exact que l'on cherche mais la première (voire la première et la deuxième) lettre de l'intitulé ><

Merci cependant :)

Edit : La deuxième solution semble marcher :). Je vais voir si ça marche tout le temps. Merci

Au cas où, d'autres idées?
 
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : [résolu] retrouver mot de la liste dont on a l'initiale

Bonjour Rrradassse, JHA, bonjour le forum,

En pièce jointe ton fichier modifié avec le code commenté. J'ai rajouté une UserForm qui s'affiche si il y a plusieurs choix possibles. Pour les noms composés (Marrons Foncés) il suffit de taper en B2 les initiales (MF) en majuscule ou minuscule...
Le code de la macro événementielle Change :
Code:
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

Le fichier :
 

Pièces jointes

  • Rrradassse_v01.xls
    55 KB · Affichages: 44

Rrradassse

XLDnaute Junior
Re : [résolu] retrouver mot de la liste dont on a l'initiale

(hola je n'avais jamais vu cette réponse! ^^ Merci Robert. En fait je n'utilise jamais de macros car mes fichiers doivent pouvoir être lus dans plusieurs pays du monde et avec plusieurs version d'Excel ou open office etc., et que souvent ca complique beaucoup le fichier (plein de lignes de commande au lieu de =RECHERCHEV(B2&"*";Yeux;1;FAUX) par exemple...) Mais merci bcp d'avoir travaillé sur ma question)
 

Discussions similaires

Statistiques des forums

Discussions
312 162
Messages
2 085 858
Membres
103 005
dernier inscrit
gilles.hery