Eliminar una cadena de caracteres comprendida entre dos símbolos

Resuelto
Greg le novice -  
 Claire -
Hola,

Como indica mi título, quiero eliminar cadenas de caracteres comprendidas entre dos símbolos: "<" y ">".

Ejemplo:

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

Debe quedarse en mi celda:

il fait beau aujourd'hui

¿Es obligatorio pasar por VBA? Si es así, me bloqueo en cómo indicar en mi código que se deben eliminar los símbolos ("<", ">") y cómo incorporar en la eliminación los caracteres comprendidos entre estos dos símbolos. Y sobre todo que la eliminación se repita porque los símbolos aparecen varias veces en una misma celda.

Gracias de antemano por vuestra ayuda.

Cordialmente,

Greg el novato

2 respuestas

  1. Vaucluse Mensajes publicados 27336 Fecha de registro   Estado Colaborador Última intervención   6 453
     
    =Hola
    sin VBA, hay que suponer que sus datos siempre tienen las configuraciones siguientes
    es decir, un espacio delante de < o un espacio detrás de > independientemente del número de palabras a eliminar delante o detrás del texto
    Entonces se puede ejecutar en dos pasos:

    primer paso, ingresar el campo (por ejemplo A:A) y reemplazar (tecla ctrl y tecla h
    Reemplazar: colocar > < (con un espacio)
    por: colocar: >< (sin espacio)

    después en B la fórmula:

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

    Atención: > seguido de un espacio entre comillas
    < y precedido de un........

    a probar en todos sus casos

    crdlmnt

    y para completar en caso de celda vacía en A y si el texto a extraer empieza al inicio de la frase:
    siempre después del tratamiento de “reemplazar”

    =SI(A1="";"";SI(IZQUIERDA(A1;1)<>"<";EXTRAE(A1;1;ENCONTRAR(" <";A1;1));EXTRAE(A1;ENCONTRAR(" <";A1;1);ENCONTRAR(" <";A1;1)-ENCONTRAR(" <";A1;1))))

    y para terminar, si quieres evitar la manipulación de reemplazar, puedes usar:

    =SI(IZQUIERDA(A1;1)<>"&lt";EXTRAE(SUSTITUYE(A1;"> <";"><");1;ENCONTRAR(" <";SUSTITUYE(SUSTITUYE(A1;"> <";"><");"> <";"><");1));EXTRAE(SUSTITUYE(A1;"> <";"><");ENCONTRAR("> ";SUSTITUYE(SUSTITUYE(A1;"> <";"><");"> <";"><");1)+2;ENCONTRAR(" <";SUSTITUYE(A1;"> <";"><");1)-ENCONTRAR("> ";SUSTITUIR(A1;"> <";"><");1)-2))

    crdlmnt

    Errare humanum est, perseverare diabolicum
    0
    1. Greg le novice
       
      Hola Vaucluse,

      Gracias por responder tan rápido a mi problema.
      Estoy contento, hay un avance con mi problema.
      Sin embargo, después de haber reemplazado todos los ""> <"" por ""><"" y haber aplicado la fórmula en una celda, solo se extrae la primera cadena de caracteres y no la continuación.
      Ejemplo:
      <bateau>dauphin < camion ></b> toto
      Noobtengo más que: dauphin
      En lugar de obtener: dauphin toto

      Gracias de antemano,

      Greg el novato

      ps: no entiendo cómo funciona la fórmula, por cierto..
      0
    2. Vaucluse Mensajes publicados 27336 Fecha de registro   Estado Colaborador Última intervención   6 453
       
      No estaba anunciado en la pregunta inicial??

      Lo que habría que hacer antes de buscar más lejos es conocer el conjunto de sus casos de figura. ¿Cuántas palabras separadas así hay que sacar?

      Mientras tanto echen un vistazo a los complementos de mi mensaje anterior
      .. y para ir más allá, creo que será necesario pasar por VBA para eliminar las palabras en adrés por <> pero no es mi área.
      0
    3. Greg le novice Mensajes publicados 11 Estado Miembro
       
      Las fórmulas anteriores funcionan perfectamente y efectivamente responden a la primera solicitud que hice.
      Muchas gracias, eso me avanza mucho.
      ----
      Sí, en mi ejemplo habría tenido que poner toto fuera de los corchetes para que obtengamos: dolphin toto
      Y propuse estos ejemplos para que mi petición quedara más clara.
      En mi caso se trata de párrafos completos en una celda de Excel, o dentro de ellos hay mezclados como "</b> por ejemplo o </g>. Hay muchos.
      ----
      Así que supongo que debo pasar por VBA. No me molesta. Pero sigo estando atascado para expresar estas fórmulas en VBA.
      0
    4. Greg le novice Mensajes publicados 11 Estado Miembro
       
      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
  2. Morgothal Mensajes publicados 1350 Estado Miembro 184
     
    Hola,
    He hecho esta macro, funciona con todos los ejemplos que publicaste arriba (hace buen tiempo, el delfín y el SGBD).
    Esta macro debe ejecutarse varias veces, hasta que detecte que ya no queda nada por eliminar:

    Sub suppression() Dim chaine, chaine2 As String chaine = Range("A1") If InStr(chaine, "<") = 0 Then MsgBox ("¡Ya no queda nada que eliminar!") 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+ !

    --
    -------------------
    Cordialement,
    Clément
    0
    1. Morgothal Mensajes publicados 1350 Estado Miembro 184
       
      Una pequeña precisión, en mis pruebas, la cadena a procesar estaba en A1, y escribía en A2 esa cadena sin los .
      0
    2. Greg le novice Mensajes publicados 11 Estado Miembro
       
      Hola,

      Gracias Morgothal, tu macro funciona perfectamente. Algunos detalles por modificar pero por lo demás ¡muchísimas gracias!

      Atentamente,

      Greg el novato
      0
    3. Claire
       
      Hola,

      Gracias por su macro. ¿Podría indicarme los cambios a realizar para que se aplique a todas las celdas de mi columna N y que los nuevos valores se muestren, por ejemplo, en la columna M?

      Gracias de antemano
      0