Supprimer une chaine de caractères compris entre deux symboles

Résolu/Fermé
Greg le novice - 19 avril 2013 à 09:56
 Claire - 27 févr. 2017 à 15:32
Bonjour,

Je souhaite comme mon titre l'indique, supprimer des chaînes de caractères compris entre deux symboles : "<" et ">".
----------------------
Exemple :

<bateau> il fait beau aujourd'hui </b le petit lapin> </h> <toto>

Il devra rester dans ma cellule :
il fait beau aujourd'hui
---------------------
Est ce qu'on est obligé de passer par VBA ?
Si oui, je bloque sur comment indiquer dans mon code qu'il faut supprimer les symboles ("<", ">") et comment intégrer dans la suppression les caractères compris entre ces deux symboles.
Et surtout a faire répéter la suppression car les symboles apparaissent plusieurs fois dans une seule cellule.

Je vous remercie d'avance pour votre aide.

Cordialement,

Greg le novice
A voir également:

2 réponses

Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 394
Modifié par Vaucluse le 19/04/2013 à 10:50
=Bonjour
sans VBA, il faut supposer que vos données aient toujours les configurations suivante
soit un blanc devant < ou un blanc derriére> quelque soit le nombre de mots à éléminer devant ou derrière le texte
On peut alors exécuter en deux temps:

premier temps, saisir le champ (exemple A:A) et remplacer (touche ctrl et touche h
Remplacer: placer > < (avec un blanc)
par : placer: >< (sans blanc)

ensuite en B la formule:

=STXT(A1;TROUVE("> ";A1;1)+2;TROUVE(" <";A1;1)-TROUVE("> ";A1;1)-2)

Attention > et suivi d'un blanc dans les guillemets
< et précédé d'un........

à tester dans tous vos cas de figure

crdlmnt

et pour complèter en cas de cellule vide en A et si le texte à sortir commence en début de phrase:
toujours après le traitement "remplacer"

=SI(A1="";"";SI(GAUCHE(A1;1)<>"<";STXT(A1;1;TROUVE(" <";A1;1));STXT(A1;TROUVE(" <";A1;1);TROUVE("> ";A1;1)-TROUVE(" <";A1;1))))

et pour terminer, si vous voulez éc)viter la manip remplacer, vous pouvez uytiliser:

=SI(GAUCHE(A1;1)<>"<";STXT(SUBSTITUE(A1;"> <";"><");1;TROUVE(" <";SUBSTITUE(SUBSTITUE(A1;"> <";"><");"> <";"><");1));STXT(SUBSTITUE(A1;"> <";"><");TROUVE("> ";SUBSTITUE(A1;"> <";"><");1)+2;TROUVE(" <";SUBSTITUE(A1;"> <";"><");1)-TROUVE("> ";SUBSTITUE(A1;"> <";"><");1)-2))

crdlmnt


Errare humanum est, perseverare diabolicum
0
Bonjour Vaucluse,

Merci d'avoir répondu si rapidement à mon problème.
Je suis content il y a une avancée à mon problème.
Cependant, après avoir remplacé tous les "> <" par "><" et avoir appliqué la formule sur une cellule, seule la première chaîne de caractères est extraire et non la suite.
Exemple :
<bateau>dauphin < camion ></b> toto
Je n'obtiens que : dauphin
Au lieu d'obtenir : dauphin toto

Merci d'avance,

Greg le novice

ps : je ne comprends pas comment fonctionne la formule au passage..
0
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 394
19 avril 2013 à 10:54
Ce 'était pas annoncé dans la question initiale ??

Ce qu'il faudrait avant qu'on cherche plus loin, c'est connaitre l'ensemble ,de vos cas de figure. Des mots séparés comme ça, il y en a combien à sortir?

En attendant jetez un oeil sur les compléments de mon message précédent
.. et pour aller plus loin, je pense qu'il faudra passer par VBA pour supprimer les mots en adrés par <> mais ce n'est pas mon rayon
0
Greg le novice Messages postés 11 Date d'inscription vendredi 19 avril 2013 Statut Membre Dernière intervention 26 avril 2013
Modifié par Greg le novice le 19/04/2013 à 11:06
Les formules ci-dessus fonctionnent parfaitement et répondent en effet à la première demande que j'ai faite.
Un grand merci cela m'avance beaucoup.
----
Oui lors de mon exemple j'aurai du mettre toto hors des crochets afin qu'on obtienne : dauphin toto
ET j'ai proposé ces exemples pour que ma demande soit plus claire.
Dans mon cas cela corresponds a des paragraphes entiers dans une cellule excel, ou dedans y sont mélangés des "</b> par exemple ou des </g>. Il y en a beaucoup.
----
Donc je suppose que je dois passer par vba. Cela ne me dérange pas. Mais je reste tout de même coincé pour exprimer ses formules en vba.
0
Greg le novice Messages postés 11 Date d'inscription vendredi 19 avril 2013 Statut Membre Dernière intervention 26 avril 2013
19 avril 2013 à 11:13
Un exemple de cellule pour être claire au maximum :

<div style="border: 1px solid #C0C0C0; text-align: justify; font-family: Calibri; padding: 10 10 15 10px; font-size: 12px; background-color: #FFE; width: 500px;">
<h1 style="text-align: center; color: #069; font-size: 16px;"> Access </h1>
<br/>

Cette offre vous propose la mise à disposition du logiciel ACCESS, SGBD de Microsoft pour des applications bureautiques.
</p>
<div style="color: #069">
<strong>Merci d'indiquer dans le champ commentaire ci-contre : </strong>
<ul style="list-style-type: square; margin-top: 5px;">
<li>la justification du besoin</li>
<li>les références du poste concerné par l'installation</li>
</ul>
</div>
</div>
0
Morgothal Messages postés 1236 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 19 mai 2015 183
19 avril 2013 à 11:44
Bonjour,
J'ai fait cette macro, elle fonctionne avec tous les exemples que tu as posté ci-dessus (il fait beau, le dauphin, et le SGBD).
Cette macro est à exécuter plusieurs fois, jusqu'à ce qu'elle détecte qu'il n'y a plus rien à supprimer :

Sub suppression()
Dim chaine, chaine2 As String

chaine = Range("A1")
If InStr(chaine, "<") = 0 Then
    MsgBox ("Plus rien à supprimer !")
    Exit Sub
End If

If Left(chaine, 1) = "<" Then
    chaine = Right(chaine, Len(chaine) - InStr(chaine, ">"))
End If

If InStr(chaine, "<") <> 0 Then
    chaine2 = Range("A2")
    
    chaine2 = chaine2 & Left(chaine, InStr(chaine, "<") - 1)
    chaine = Right(chaine, Len(chaine) - InStr(chaine, "<") + 1)
    
    Range("A1") = chaine
    Range("A2") = chaine2
Else
    chaine2 = Range("A2")
    chaine2 = chaine2 & chaine
    
    Range("A1") = chaine
    Range("A2") = chaine2
End If
End Sub

A+ !

0
Morgothal Messages postés 1236 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 19 mai 2015 183
19 avril 2013 à 11:48
Petite précision, dans mes tests, la chaine à traiter était en A1, et écrivait en A2 cette chaine sans les <textes_a_supprimer>
0
Greg le novice Messages postés 11 Date d'inscription vendredi 19 avril 2013 Statut Membre Dernière intervention 26 avril 2013
19 avril 2013 à 12:32
Bonjour,

Merci Morgothal, ta macro marche parfaitement. Quelques détails a modifier mais sinon un grand grand merci !

Cordialement,

Greg le novice
0
Bonjour,

Merci pour votre macro. pourriez vous m'indiquer les changements à faire pour qu'elle s'applique sur toutes les cellules de ma colonne N et que les nouvelles valeurs s'affichent en colonne M par exemple?

merci d'avance
0