Autres (RESOLU) Extraire des lettres âpres "KDL"

chaelie2015

XLDnaute Accro
Bonsoir Forum
Suivant le même principe de la discussion de "Extraire une année composée de quatre chiffres ("aaaa")" précédente , cette fois-ci, je souhaite extraire les lettres après 'KDL' soit L ou .L ou P ou .P
exemple un :dans A1 = 071/2011 KDL.P/11 donc j'aurai dans B1= .P
exemple deux : A1 =73/2012-KDLL/26 donc j'aurai dans B1= L
j'ai trouvé cette fonction
VB:
Function ExtraireLettreApresKDL(chaine As String) As String
    Dim positionKDL As Integer
    Dim extrait As String
    
    positionKDL = InStr(1, chaine, "KDL", vbTextCompare)
    
    If positionKDL > 0 And positionKDL < Len(chaine) - 2 Then
        extrait = Mid(chaine, positionKDL + 3, 1)
        If extrait = "L" Or extrait = ".L" Or extrait = "P" Or extrait = ".P" Then
            ExtraireLettreApresKDL = extrait
        Else
            ExtraireLettreApresKDL = ""
        End If
    Else
        ExtraireLettreApresKDL = ""
    End If
End Function
Mais elle n'affiche pas des résultats souhaité comme dans l'exemple un ci dessus
Merci
 
Dernière édition:
Solution
Salut,

Mid(chaine, positionKDL + 3, 1) te donne qu'un caractère dans la chaine,
si c'est P ou L la fonction retourne P ou l
si c'est le point il faut tester le caractère juste après pour voir si c'est L ou P.

un exemple de code

VB:
If positionKDL > 0 And positionKDL < Len(chaine) - 2 Then
      extrait = Mid(chaine, positionKDL + 3, 1)

      Select Case extrait
         Case "L", "P": ExtraireLettreApresKDL = extrait
         Case ".":
            extrait = Mid(chaine, positionKDL + 4, 1)
            If extrait = "L" Or extrait = "P" Then ExtraireLettreApresKDL = "." & Mid(chaine, positionKDL + 4, 1)
      End Select
   Else
      ExtraireLettreApresKDL = ""
   End If


A+++

Jacky67

XLDnaute Barbatruc
Bonsoir Forum
Suivant le même principe de la discussion de "Extraire une année composée de quatre chiffres ("aaaa")" précédente , cette fois-ci, je souhaite extraire les lettres après 'KDL' soit L ou .L ou P ou .P
exemple un :dans A1 = 071/2011 KDL.P/11 donc j'aurai dans B1= .P
exemple deux : A1 =73/2012-KDLL/26 donc j'aurai dans B1= L
Bonjour,
En formule à tester
Code:
=STXT(A1;TROUVE("KDL";A1)+3;TROUVE("/";STXT(A1;TROUVE("KDL";A1)+3;NBCAR(A1)))-1)
 

Zon

XLDnaute Impliqué
Salut,

Mid(chaine, positionKDL + 3, 1) te donne qu'un caractère dans la chaine,
si c'est P ou L la fonction retourne P ou l
si c'est le point il faut tester le caractère juste après pour voir si c'est L ou P.

un exemple de code

VB:
If positionKDL > 0 And positionKDL < Len(chaine) - 2 Then
      extrait = Mid(chaine, positionKDL + 3, 1)

      Select Case extrait
         Case "L", "P": ExtraireLettreApresKDL = extrait
         Case ".":
            extrait = Mid(chaine, positionKDL + 4, 1)
            If extrait = "L" Or extrait = "P" Then ExtraireLettreApresKDL = "." & Mid(chaine, positionKDL + 4, 1)
      End Select
   Else
      ExtraireLettreApresKDL = ""
   End If


A+++
 

Phil69970

XLDnaute Barbatruc
Bonjour à tous

@chaelie2015
Je te propose cette formule

=STXT(A1;TROUVE("KDL";A1)+3;2)

1691709666734.png


Et si tu ne veux pas le point donc juste le L ou le P
=STXT(A2;TROUVE("KDL";A2)+4;1)

1691709855164.png
 

Jacky67

XLDnaute Barbatruc
Bonsoir jacky67
Merci pour la formule , mais dans la cas suivant elle n'est pas fonctionnelle : A1= 142/2012 KDL.P 75?
A+
Re..
Et
Code:
=STXT(A1;TROUVE("KDL";A1)+3;SIERREUR(SI(TROUVE(".";STXT(A1;TROUVE("KDL";A1)+3;99));2);1))
En anglais
Code:
=MID(A1,FIND("KDL",A1)+3,IFERROR(IF(FIND(".",MID(A1,FIND("KDL",A1)+3,99)),2),1))
 

Pièces jointes

  • KDL.xlsx
    18.6 KB · Affichages: 5
Dernière édition:

chaelie2015

XLDnaute Accro
Salut,

Mid(chaine, positionKDL + 3, 1) te donne qu'un caractère dans la chaine,
si c'est P ou L la fonction retourne P ou l
si c'est le point il faut tester le caractère juste après pour voir si c'est L ou P.

un exemple de code

VB:
If positionKDL > 0 And positionKDL < Len(chaine) - 2 Then
      extrait = Mid(chaine, positionKDL + 3, 1)

      Select Case extrait
         Case "L", "P": ExtraireLettreApresKDL = extrait
         Case ".":
            extrait = Mid(chaine, positionKDL + 4, 1)
            If extrait = "L" Or extrait = "P" Then ExtraireLettreApresKDL = "." & Mid(chaine, positionKDL + 4, 1)
      End Select
   Else
      ExtraireLettreApresKDL = ""
   End If


A+++
Bonjour ZON
Donc cette fonction ExtraireLettreApresKDL() extrait une lettre suivant "KDL" dans la chaîne d'entrée et renvoie cette lettre, ou une combinaison avec le point si nécessaire, ou une chaîne vide si aucune lettre ne suit "KDL" dans la chaîne.
MERCI
 

Discussions similaires

Réponses
19
Affichages
2 K

Statistiques des forums

Discussions
313 192
Messages
2 096 072
Membres
106 488
dernier inscrit
mathieu.boiseau@semmaris.