XL 2019 Supprimer caractères entre dernier symbole d'un type et symbole d'un autre type

  • Initiateur de la discussion Initiateur de la discussion Billize38
  • 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 !

Billize38

XLDnaute Nouveau
Bonjour,

Je suis totalement nouveau ici.
Et un peu d'aide serait la bienvenue!

Voici mon problème:
Dans un grand nombre de cellules excel, je souhaite supprimer tous les éléments situés entre le dernier le symbole "+" (il peut y en avoir de 1 à 10) et le symbole "(" (il ne peut y en avoir qu'un).
C'est à dire que le nombre de symboles "+" varie suivant les cellules.

Exemple 1:
Cellule avant modification: brown+impediments to integrated urban stormwater management: the need for institutional reform (2005)
Cellule après modification: brown+(2005)

Exemple 2:
Cellule avant modification: berkhout+hanegraaff+braun+is the eu different? comparing the diversity of national and eulevel systems of interest organisations (2017)
Cellule après modification: berkhout+hanegraaff+braun+(2017)

Merci par avance pour votre aide!
 
Solution
Bonjour @Billize38,
Surtout pour saluer @job75😉 et @jmfmarques 😉,

deux autres manières:
  • l'une avec formule ordinaire (en B2)
  • l'autre avec fonction personnalisée (en C2)

VB:
=SUPPRESPACE(SUBSTITUE(SUPPRESPACE(A2);SUPPRESPACE(DROITE(SUBSTITUE(SUPPRESPACE(A2);"+";REPT(" ";500));500));"")) & SUPPRESPACE(DROITE(SUBSTITUE(SUPPRESPACE(A2);" ";REPT(" ";500));500))

VB:
Public Function Extr(ByVal x) As String
Dim n&, m&
   n = InStrRev(x, "+"): m = InStrRev(x, "(")
   If n >= 0 And m > n Then Extr = Left(x, n) & Mid(x, m)
End Function
Bonjour
Je vais en ce qui me concerne te mettre en mesure de le faire toi-même, sur ces bases
La fonction Instrrev de VBA te permet d'obtenir la position pos1 du dernier "+"
La fonction Instr de vba te permet d'obtenir la position pos2 du "("
La fonction Mid de VBA te permet d'obtenir la chaine de caractères commençant en Pos1 et d'une longueur égale à Pos2 - Pos1
Je ne reviendrai en cas de besoin, que si tu montres ce que tu as au moins tenté sur la base de ces indications.
 
Bonjour Billize38, bienvenue sur XLD, salut jmfmarques,

Voyez le fichier joint et cette formule matricielle en B2 :
Code:
=SIERREUR(GAUCHE(A2;MAX(SI(STXT(A2;LIGNE(INDIRECT("1:"&NBCAR(A2)));1)="+";LIGNE(INDIRECT("1:"&NBCAR(A2))))))&STXT(A2;TROUVE("(";A2);9^9);"")
A valider par les touches Ctrl+Maj+Entrée et tirer vers le bas.

A+
 

Pièces jointes

Bonjour à vous deux,
Et merci pour votre retour rapide et efficace pour cette première question!

Suivant les conseils de jmfmarques, j'étais en train de m'initier à VBA - langage complètement nouveau pour moi. Voilà où j'en étais (pas très loin donc - et sûrement pas sur le bon chemin).

InStrRev("+", "A2") = pos1
InStr(1, "(", "A2") = pos2
Mid(A2, "pos1", ["pos2"-"pos1"]) = asupprimer
Dim pos1 As Integer
Dim pos2 As Integer
Dim asupprimer As String

Quand j'ai testé la formule de job75 qui donne le résultat escompté.
job75 pourrais-je vous demander d'expliquer l'articulation des différentes formules? (Que je puisse apprendre par moi-même)?

Un grand merci à vous deux, donc!
Tout complètement d'information est le bienvenu!
 
job75 pourrais-je vous demander d'expliquer l'articulation des différentes formules?

Il y a 2 parties concaténées dans la formule :
Code:
GAUCHE(A2;MAX(SI(STXT(A2;LIGNE(INDIRECT("1:"&NBCAR(A2)));1)="+";LIGNE(INDIRECT("1:"&NBCAR(A2))))))
c'est elle qui nécessite la validation matricielle pour le calcul de la fonction MAX (qui donne la position du dernier caractère "+")
Code:
STXT(A2;TROUVE("(";A2);9^9)
cette partie est facile à comprendre.

SIERREUR(XXX;"") est là uniquement pour ne pas afficher les valeurs d'erreur.
 
Bonjour @Billize38,
Surtout pour saluer @job75😉 et @jmfmarques 😉,

deux autres manières:
  • l'une avec formule ordinaire (en B2)
  • l'autre avec fonction personnalisée (en C2)

VB:
=SUPPRESPACE(SUBSTITUE(SUPPRESPACE(A2);SUPPRESPACE(DROITE(SUBSTITUE(SUPPRESPACE(A2);"+";REPT(" ";500));500));"")) & SUPPRESPACE(DROITE(SUBSTITUE(SUPPRESPACE(A2);" ";REPT(" ";500));500))

VB:
Public Function Extr(ByVal x) As String
Dim n&, m&
   n = InStrRev(x, "+"): m = InStrRev(x, "(")
   If n >= 0 And m > n Then Extr = Left(x, n) & Mid(x, m)
End Function
 

Pièces jointes

- 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
Retour