XL 2016 Garder uniquement le contenu situé entre les parenthèses

FAFA01

XLDnaute Nouveau
Bonjour,
je cherche un moyen de ne conserver que les chiffres situé à l'intérieur d'une cellule (quelque soit l'endroit)
ou
comment ne conserver que les caractères qui se trouvent à l'intérieur des parenthèses

ex : MONT-BLANC/LEMAN F+18 à X (20232420010159RST) ou R C LAPALISSOIS (5826H)
dans ces deux exemples je souhaiterai qu'il ne conserve que 20232420010159 et 5826

merci pour votre retour

cordialement
alain
 

Pièces jointes

  • Classeur1 club.xlsx
    18.4 KB · Affichages: 12

Dudu2

XLDnaute Barbatruc
J'ai pris les 2 exemples fournis comme référence.
Alors tu as raison, j'ai ouvert le fichier et constaté que l'énoncé de la demande était incomplet.
Qu'à cela ne tienne, en supposant que le bon contenu est toujours à la fin...

Par contre je ne suis pas allé jusqu'à traiter les parenthèses potentiellement imbriquées.
Ni traité les cas où il n'y a PAS de parenthèses.
Edit: bon allez, je les traite ces 2 cas ! C'est pas ce que ça coûte.

Fichier supprimé, voir plus loin.
 
Dernière édition:

Dudu2

XLDnaute Barbatruc
Oui Val(S) c'eut été possible. Il y a quand même des gros nombres genre 20 232 420 010 162 où le début semble être l'année.
Dans la dernière version pour les parenthèses imbriquées, je fais ça au début k = InStrRev(S, "("). En principe je tombe sur celle la plus incluse du dernier groupe et je pars de là pour chercher la fermante. Quoique je trouve, avec ou sans ouvrante et/ou fermante, je prends les chiffres.
 

Dudu2

XLDnaute Barbatruc
En fait je m'embête bien à chercher la parenthèse fermante, ça sert à rien.
Il n'est pas nécessaire d'avoir un code plus long que ça.
VB:
Function CEP(Cellule As Range) As String
    Dim S As String
    Dim k As Integer
    
    S = CStr(Cellule.Value)
    k = InStrRev(S, "(")
    If k > 0 Then S = Mid(S, k + 1)
    For k = 1 To Len(S)
        If Not (Mid(S, k, 1) >= "0" And Mid(S, k, 1) <= "9") Then Exit For
    Next k
    CEP = Left(S, k - 1)
End Function
 

Pièces jointes

  • Classeur1 club.xlsm
    32.1 KB · Affichages: 1

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir à tous :),

La p'tite formule de ma pomme en B2 à copier vers le bas :
=SI(DROITE(A2;1)<>")";"";SUPPRESPACE(SUBSTITUE(SUBSTITUE(DROITE(SUBSTITUE(A2;" ";REPT(" ";255));255);"(";"");")";"")))

nota : le demandeur a demandé les caractères entre parenthèses mais il ne donne en exemple que l'extraction des chiffres !!! Donc la réponse de mapomme est incomplète...
 

Pièces jointes

  • FAFA01- extraction- v1.xlsx
    26.3 KB · Affichages: 1

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

Une autre formule (matricielle cette fois) en B2 à copier vers le bas :
=SIERREUR(GAUCHE(SI(DROITE(A2;1)<>")";"";SUPPRESPACE(SUBSTITUE(SUBSTITUE(DROITE(SUBSTITUE(SI(DROITE(A2;1)<>")";"";SUPPRESPACE(SUBSTITUE(SUBSTITUE(DROITE(SUBSTITUE(A2;" ";REPT(" ";255));255);"(";"");")";"")));" ";REPT(" ";255));255);"(";"");")";"")));EQUIV(99;SIERREUR(1*STXT(SI(DROITE(A2;1)<>")";"";SUPPRESPACE(SUBSTITUE(SUBSTITUE(DROITE(SUBSTITUE(A2;" ";REPT(" ";255));255);"(";"");")";"")));COLONNE($A:$ZZ);1);"")));"")

1702068424008.png
 

Pièces jointes

  • FAFA01- extraction- v2.xlsx
    39 KB · Affichages: 4

patricktoulon

XLDnaute Barbatruc
Bonjour,
je cherche un moyen de ne conserver que les chiffres situé à l'intérieur d'une cellule (quelque soit l'endroit)
ou
comment ne conserver que les caractères qui se trouvent à l'intérieur des parenthèses

ex : MONT-BLANC/LEMAN F+18 à X (20232420010159RST) ou R C LAPALISSOIS (5826H)
dans ces deux exemples je souhaiterai qu'il ne conserve que 20232420010159 et 5826

merci pour votre retour

cordialement
alain
si je me fis a la demande initiale c'est à dire concerver toutes les chaines numérique
alors une petite fonction qui recupère toute les chaines numeriques sans les fins en lettre
chaque chaine numerique séparées par un espace pour bien les différencier
exemple
sub
VB:
Sub test2()
    Dim cc As String
    cc = "toto mange(533 bannanes pas ans) et (422 kiwy) et detemps en temps (mais pas ouvent une 10 aines de grenade)"
    MsgBox GetNumericChain(cc)
End Sub


Code:
Function GetNumericChain(txt As String, Optional A& = 1) As String
    Dim b As Long, c$, d$: Static chain As String
    If A = 1 Then chain = ""
    A = InStr(A, txt, "(")
    If A > 0 Then
        b = InStr(A + 1, txt, ")")
        c = Trim(Mid(txt, A + 1, (b - A) - 1))
        For i = 1 To Len(c)
            If IsNumeric(Mid(c, i, 1)) Then d = d & Mid(c, i, 1)
        Next
        If Val(d) > 0 Then chain = chain & d & " "
        GetNumericChain txt, b
    End If
    GetNumericChain = Trim(chain)
End Function

il va de soi que l'on peut l'utiliser en formule
=GetNumericChain(A1)

pour info c'est une fonction récursive

pour les parentèses je boucle en récursif avec instr(index texte,"recherche")
pour les caractères numerique dans le portions instr je boucle for sur le len(de la portion)
terminé
;)
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Re,

Ma petite fonction personnalisée. J'extrais uniquement le dernier groupe (...) le plus à droite.
Voir cellule B2 à recopier vers le bas.

Le code dans moduler1 :
VB:
Function ChiffresEntrePar(ByVal x As String) As String
Dim i&, c, r
   If Not x Like "*(*)*" Then Exit Function
   x = Split(x, "(")(UBound(Split(x, "(")))
   If x = "" Then Exit Function
   For i = 1 To Len(x): c = Mid(x, i, 1): r = r & IIf(c Like "#", c, ""): Next
   ChiffresEntrePar = r
End Function
 

Pièces jointes

  • FAFA01- extraction- v3.xlsm
    39.3 KB · Affichages: 4
Dernière édition:

Statistiques des forums

Discussions
312 209
Messages
2 086 266
Membres
103 167
dernier inscrit
miriame