FORMULE supprimer texte entre parenthèse

Hervé

XLDnaute Barbatruc
coucou

j'aurais besoin d'une formule pour supprimer du texte entre parenthèse se trouvant dans une chaine

j'ai : toto (titi) tata
je voudrais : toto tata

D'avance merci pour l'aide

j'ai pas trouvé dans la recherche, mais ca c'est normal suis nul

bye
 

Tibo

XLDnaute Barbatruc
Re : FORMULE supprimer texte entre parenthèse

Bonjour,

Histoire de participer au jeu, cette version :

Code:
=SUPPRESPACE(GAUCHE(" "&A1;TROUVE("(";A1)-1)&STXT(A1;TROUVE(")";A1)+1;99))

Je ne sais pas si on peut faire plus court

@+
 

Caro2452

XLDnaute Nouveau
Bonjour,

En me basant sur vos échanges précédents pour effacer du texte entre parenthèse d'une cellule j'obtiens bien ce que je veux SI il y a du texte entre parenthèse.
Ce qui me donne la formule suivante:
=SUPPRESPACE(GAUCHE(D36,CHERCHE("(","x"&D36)-2)&STXT(D36,CHERCHE(")",D36)+1,255))
ça fonctionne ... si toutes les cellules de la colonne traitée contienent du texte entre paranthèses.
Mais dans le cas où une malheureuse cellule n'a pas de texte entre parenthèse, ça ne fonctionne plus!

Comment indiquer que si aucune parenthèse n'est trouvé, alors il faut retourner le texte tel que.

Cdt,

Caro
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir @herve30 et bienvenue sur XLD :),

Par formule cela risque d'être très très compliqué voire infaisable pour couvrir tous les cas. Voir dans le fichier une fonction personnalisée SansParenthèse(). La fonction prend en compte l'imbrication 'logique' des parenthèses. Si les imbrications sont incohérentes, la fonction renvoie une erreur.

Le code de la fonction est dans module1:
VB:
Function SansParenthèse(ByVal x) As String
Dim nouvr&, nferm&, n&, i&, c$
  nouvr = InStr(x, "("): nferm = InStr(x, ")")
  If nouvr + nferm = 0 Then
    SansParenthèse = x
    Exit Function
  End If
  n = 1
  For i = nouvr + 1 To Len(x)
    c = Mid(x, i, 1)
    Select Case c
    Case "("
      n = n + 1
    Case ")"
      n = n - 1
      If n = 0 Then
        Mid(x, nouvr, i - nouvr + 1) = String(i - nouvr + 1, Chr(0))
        SansParenthèse = SansParenthèse(Replace(x, Chr(0), ""))
        Exit Function
      End If
    Case Else
    End Select
  Next i
  If n <> 0 Then SansParenthèse = CVErr(xlErrValue)
End Function

edit : bonjour @job75 ;)
 

Pièces jointes

  • herve30- sans ()- v1..xlsm
    19.2 KB · Affichages: 11
Dernière édition:

job75

XLDnaute Barbatruc
Bonjour le fil, mapomme,

Surtout ne pas se compliquer la vie inutilement :rolleyes:
Code:
Function Suppr$(t$)
Dim i%, flag As Boolean
For i = 1 To Len(t)
    If Mid(t, i, 1) = "(" Then flag = True
    If Mid(t, i, 1) = ")" Then flag = False: i = i + 1
    If Not flag Then Suppr = Suppr$ & Mid(t, i, 1)
Next
Suppr = Application.Trim(Suppr) 'SUPPRESPACE
End Function
A+
 

Pièces jointes

  • Fonction Suppr(1).xlsm
    14.1 KB · Affichages: 25

herve30

XLDnaute Nouveau
Bonsoir,
La fonction et le fichier joint de job75 qui me conviennent parfaitement
Mais lorsque je créer la macro dans mon fichier xl impossible de la faire fonctionner !
Je suis sur Mac OS X 10.10.5 avec Excel 2011
..../....



Bonsoir MaPomme,
Merci pour votre réponse,
Je mets en place cette fonction et je reviens vers vous.
J'aurai préféré une formule mais cela semble impossible ...
Cordialement
Bonjour le fil, mapomme,

Surtout ne pas se compliquer la vie inutilement :rolleyes:
Code:
Function Suppr$(t$)
Dim i%, flag As Boolean
For i = 1 To Len(t)
    If Mid(t, i, 1) = "(" Then flag = True
    If Mid(t, i, 1) = ")" Then flag = False: i = i + 1
    If Not flag Then Suppr = Suppr$ & Mid(t, i, 1)
Next
Suppr = Application.Trim(Suppr) 'SUPPRESPACE
End Function
A+
Bonjour le fil, mapomme,

Surtout ne pas se compliquer la vie inutilement :rolleyes:
Code:
Function Suppr$(t$)
Dim i%, flag As Boolean
For i = 1 To Len(t)
    If Mid(t, i, 1) = "(" Then flag = True
    If Mid(t, i, 1) = ")" Then flag = False: i = i + 1
    If Not flag Then Suppr = Suppr$ & Mid(t, i, 1)
Next
Suppr = Application.Trim(Suppr) 'SUPPRESPACE
End Function
A+
Bonjour le fil, mapomme,

Surtout ne pas se compliquer la vie inutilement :rolleyes:
Code:
Function Suppr$(t$)
Dim i%, flag As Boolean
For i = 1 To Len(t)
    If Mid(t, i, 1) = "(" Then flag = True
    If Mid(t, i, 1) = ")" Then flag = False: i = i + 1
    If Not flag Then Suppr = Suppr$ & Mid(t, i, 1)
Next
Suppr = Application.Trim(Suppr) 'SUPPRESPACE
End Function
A+
 

herve30

XLDnaute Nouveau
Bonjour,
Je ne comprends pas ...
Dans votre fichier tout fonctionne à merveille !
Mais lorsque je veux appliquer cette fonction dans mes fichiers xlsm impossible de la faire fonctionner
j'ai crée un fichier xlsm avec les même critères:
- macro -Modules-Module 1 et idem insertion du code

1025716
1025717


Résultat lorsque je veux insérer cette macro dans une cellule j'ai ce message:
1025718

qu'est ce que je dois modifier pour que cela fonctionne ?
Bien que je ne possède pas une grande expérience en macro, j'en ai vraiment besoin pour que cela fonctionne pour mes nombreux fichiers
Merci d'avance
 

Robert

XLDnaute Barbatruc
Repose en paix
Bonjour le fil, bonjour le forum,

Désolé de venir polluer ce fil mais il y apparaît une majorité de personnes qui me tiennent à cœur et je profite pour les saluer... Je profite aussi pour saluer la nouvelle présentation du forum. Enfin un truc efficace ! Merci David...
 

Discussions similaires

Réponses
11
Affichages
564

Statistiques des forums

Discussions
312 239
Messages
2 086 508
Membres
103 237
dernier inscrit
smbt-excel