Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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

  • Initiateur de la discussion Initiateur de la discussion FAFA01
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

Bonsoir,
Dudu, tu aurais ouvert le fichier, tu aurais (peut-être) vu des cas (spéciaux)...
Parfois, 2 parenthèses ouvrantes, parfois aucune...
Mais pas de difficultés particulières en VBA, toutefois
Bonne soirée
 
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:
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.
 
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

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

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);"")));"")

 

Pièces jointes

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é
😉
 
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

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…