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

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

jmfmarques

XLDnaute Accro
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.
 

job75

XLDnaute Barbatruc
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

  • Classeur(1).xlsx
    10.3 KB · Affichages: 7

Billize38

XLDnaute Nouveau
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

XLDnaute Barbatruc
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.
 

mapomme

XLDnaute Barbatruc
Supporter XLD
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

  • Billize38- extraction texte- v1.xlsm
    15.7 KB · Affichages: 6

Membres actuellement en ligne

Statistiques des forums

Discussions
314 079
Messages
2 105 469
Membres
109 375
dernier inscrit
anderson2