IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Excel Discussion :

Trouver et remplacer une chaîne de caractèrec dans une autre


Sujet :

Excel

  1. #1
    Membre du Club
    Femme Profil pro
    Webmaster
    Inscrit en
    Octobre 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2014
    Messages : 98
    Points : 48
    Points
    48
    Par défaut Trouver et remplacer une chaîne de caractèrec dans une autre
    Bonjour,
    Je viens vers vous car je bloque sur une formule.

    Voila j'ai dans mes cellules du texte contenant des caractères que je veux enlever. (extrait d'une base de données)

    Ex:
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
     <p><span style="color: #374853; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10.909090995788574px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: #ffffff; display: inline !important; float: none;">Modèles d'appareils concernés:</span> <strong>SS-992134 FZ700000/12A FZ70000012A ACTIFRY (SEB</strong>)</p>

    Je souhaite enlever tout y compris ce qui se trouve entre <......> dans toute ma chaîne de caractère (balise HTML)

    J'ai donc vu qu'il me fallait utiliser la fonction SUBSTITUE, mais la ou je bloque c'est sur le 2ème argument de cette fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SUBSTITUTE("cellule-cible";"texte-a-enlever";" ")
    Dans mon exemple le résultat devra être : Modèles d'appareils concernés:SS-992134 FZ700000/12A FZ70000012A ACTIFRY (SEB)

    Comment puis je définir que le texte à enlever se commence par < et fini par >



    Merci

    Elwy

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Ce que tu veux faire n'est pas possible avec la fonction SUBSTITUE vu que le contenu est variable.
    (enfin... si, théoriquement c'est possible en le faisant sur plusieurs lignes, par itération, à grand coup de TROUVE() mais ça serait compliqué).

    La seule façon de le faire simplement, c'est d'utiliser deux boucles en VBA.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Bonjour elwy07,

    Est-ce que toutes tes extractions sont sous le même formalisme ?
    J'entends par là, est-ce que tu auras toujours une balise "p", une "span" et une "strong" ?

    Ou, au contraire, le nombre peut varier ?

    J'attends ton retour !
    Cordialement,
    Kimy

    EDIT : Menhir à tout dit ! C'était l'objectif de ma question !
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

  4. #4
    Membre du Club
    Femme Profil pro
    Webmaster
    Inscrit en
    Octobre 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2014
    Messages : 98
    Points : 48
    Points
    48
    Par défaut
    Merci pour vos réponses rapide.
    Je peux avoir toutes les balise HTML possible.
    Le plus souvent c'est : <p> </p> <strong> <br /> </span> et plein d'autre que je trouve au fur et a mesure que cherche dans mes 76000 lignes excel

    Ce que je veux enlever se trouve toujours entre < >

    Dans toutes mes lignes leur apparition est très variable

  5. #5
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Le plus souvent c'est : <p> </p> <strong> <br /> </span> et plein d'autre
    Le problème c'est qu'il y a beaucoup de balises différentes.
    Et, encore plus compliqué, il y a les balises dont le contenu peut être systématiquement variable comme "span style"

    Petit détail : je ne sais pas qui a codé ça mais il devrait faire un tour du côté d'un didacticiel CSS, ça lui faciliterait la vie et ça clarifierai son code.

    plein d'autre que je trouve au fur et a mesure que cherche dans mes 76000 lignes excel
    Dans toutes mes lignes leur apparition est très variable
    Le texte que tu as présenté au début, est-ce qu'il est dans une seule cellule ou est-ce que chaque balise est détaillée dans une cellule ?
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  6. #6
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    elwys07,

    Tu es obligée de passer par du VBA.

    Voici pour toi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Option Explicit
     
    Sub elwy07()
    Dim oRng As Range
    Dim i As Integer
     
    With Worksheets("elwy07")
        Set oRng = .Range("A1")
     
        For i = 0 To .Columns(1).Find("*", , , , , xlPrevious).Row - 1
            Do While InStr(oRng.Offset(i, 0), "<")
                oRng.Offset(i, 0) = Replace(oRng.Offset(i, 0), Mid(oRng.Offset(i, 0), InStr(oRng.Offset(i, 0), "<"), InStr(oRng.Offset(i, 0), ">") - InStr(oRng.Offset(i, 0), "<") + 1), "")
            Loop
        Next i
     
    End With
     
    End Sub
    Ceci enlèvera toutes les balises "<...>" de la colonne A !

    N'hésite pas à revenir vers moi !
    Cordialement,
    Kimy
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

  7. #7
    Membre du Club
    Femme Profil pro
    Webmaster
    Inscrit en
    Octobre 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2014
    Messages : 98
    Points : 48
    Points
    48
    Par défaut
    alors si je comprend bien,

    With Worksheets("elwy07") je remplace elwy07 par le nom de ma feuille? toujours entre " " ?

    De plus dois je placer ce code dans ma feuille (coté vba bien sûr)?

    Comment sera t il exécuté

    Merci

  8. #8
    Membre du Club
    Femme Profil pro
    Webmaster
    Inscrit en
    Octobre 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2014
    Messages : 98
    Points : 48
    Points
    48
    Par défaut
    tout le texte est dans une cellule, toujours

  9. #9
    Membre du Club
    Femme Profil pro
    Webmaster
    Inscrit en
    Octobre 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2014
    Messages : 98
    Points : 48
    Points
    48
    Par défaut
    alors pour l'exécution c'est bon, j'ai compris le fonctionnement, mais il me retourne le pb suivant:

    Dépassement de capacité

  10. #10
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Oups !

    Dim i As Integer => Dim i As Long.

    Désolé !
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

  11. #11
    Membre du Club
    Femme Profil pro
    Webmaster
    Inscrit en
    Octobre 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2014
    Messages : 98
    Points : 48
    Points
    48
    Par défaut
    un autre message maintenant

    Argument ou appel de procédure incorrect

    alors je reprend :

    J'ai collé ton code dans Feuil1
    Nom : tableau excel.jpg
Affichages : 262
Taille : 116,2 Ko

    Mon document est un classeur et non un modèle

    Ai je fait une erreur?

  12. #12
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par Kimy_Ire Voir le message
    Tu es obligée de passer par du VBA.
    En fait, ce n'est pas tout à fait impossible.

    Supposons que ta chaine source soit en A1.
    En A2, tapes la formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(STXT(A1;1;1)="<";"";STXT(A1;1;TROUVE("<";A1)-1))&STXT(A1;TROUVE(">";A1)+1;10000)
    Et tu la recopie sur les lignes d'en dessous (en tirant) autant de fois que nécessaire jusqu'à ce que le résultat soit une erreur.
    En fait, chaque ligne enlève une balise.
    La dernière ligne avant le message d'erreur est ton texte sans balise.

    Voici pour toi :
    Il serait préférable d'en faire une fonction (plus facilement réutilisable).
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  13. #13
    Membre du Club
    Femme Profil pro
    Webmaster
    Inscrit en
    Octobre 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2014
    Messages : 98
    Points : 48
    Points
    48
    Par défaut
    heu là sa va me poser problème dans le sens ou je vais devoir faire cette manip dans une autre feuille et la faire pour chacune de mes 76000 lignes.
    Ce que je fais actuellement manuellement afin d'enlever a la main le texte qui me gène

    Je cherche a automatiser toutes ces manipulations.
    Ma base de données ne sera jamais modifiée (malheureusement pour moi), les modifications doivent se faire à chaque fois que je suis sur mon fichier excel.

    1: mon fichier excel est en liaison (en lecture seule) avec ma base de donnée (liaison ODBC)
    2: je le met a jour en faisant dans l'onglet données, actualiser tous, afin de récupérer les derniers ajouts dans la base

    Mon fichier change en fonctions des modification faite sur la base, pas sur lui

    Donc a chaque fois que je le ré ouvre, les modification que j'aurais pu faire avec ta méthode n'y seront plus.

    je sais pas si j'explique bien

  14. #14
    Membre du Club
    Femme Profil pro
    Webmaster
    Inscrit en
    Octobre 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2014
    Messages : 98
    Points : 48
    Points
    48
    Par défaut
    vous allez dire mais pourquoi faire sa si sa s'enregistre pas.
    Mon fichier me sert a concevoir d'autres fichiers.

    il me permet d'extraire rapidement de la base de données les informations que j'ai besoins pour la créations d'autres fichiers (qui eux sont bien sauvegardés)

    en faite il est l'intermédiaire, et me permet de modeler la mise en forme des données à extraire.

    ce que je cherche a faire en enlevant toutes ces balises HTML

  15. #15
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Si tes données sont en ligne, alors place cette formule sur le droite et copie-la à droite.
    Ensuite, pour la mettre sur tes 76000 ligne, il suffit d'un copier/coller.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  16. #16
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    elwy07,

    Pour le code VBA, enregistre ton classeur en "Excel prenant en charge les macros".
    Ensuite, tu vas dans la fenêtre que tu présentes, clic droit (sur n'importe quelle feuille) > Insertion > Module.
    Dans le module nouvellement créé, tu insères le code.

    Ensuite, deux manières, soit tu lances la macro depuis cette fenêtre, c'est l'icone "Exécuter" (flèche verte) ou affiche le menu développeur dans Excel (je te laisse chercher sur le net), et tu cliques sur "Macro" et tu la lances (et là, tu n'as plus besoin de la fenêtre Visual Basic).

    En tout cas, mon code fonctionne, je crois ! =)

    A toi de voir si tu ne préfères pas la solution de Menhir !

    Cordialement,
    Kimy

    EDIT : A savoir pour la suite, tu pourras lancer cette macro depuis un autre classeur si tu le souhaites avec récupération d'un autre si cette action doit être réalisée de manière répétitive. Mais, dans un premier temps, essayons de faire en sorte que ça marche une fois !
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

  17. #17
    Membre du Club
    Femme Profil pro
    Webmaster
    Inscrit en
    Octobre 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2014
    Messages : 98
    Points : 48
    Points
    48
    Par défaut
    merci bien, je garde tout sa pour demain, je test a la première heure.

    Merci pour votre aide

    Je vous dirais si ça fonctionne (l'une ou l'autre des solutions ^^)

  18. #18
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut




    Bonjour, bonjour !

    Bien plus simple via les fonctions de l'ActiveX HTMLFile, voir les exemples dans le bon forum



    __________________________________________________________________________________________________
    Tous unis, tous Charlie
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  19. #19
    Membre du Club
    Femme Profil pro
    Webmaster
    Inscrit en
    Octobre 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2014
    Messages : 98
    Points : 48
    Points
    48
    Par défaut
    Bonjour

    Alors je viens de tester une des deux solutions (VBA)

    J'ai le message d'erreur "Erreur d'exécution '5': Argument ou appel de procédure incorrecte"

    et sa me sort une erreur sur cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oRng.Offset(i, 0) = Replace(oRng.Offset(i, 0), Mid(oRng.Offset(i, 0), InStr(oRng.Offset(i, 0), "<"), InStr(oRng.Offset(i, 0), ">") - InStr(oRng.Offset(i, 0), "<") + 1), " ")
    Je vais tester la deuxième solution

  20. #20
    Membre du Club
    Femme Profil pro
    Webmaster
    Inscrit en
    Octobre 2014
    Messages
    98
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Octobre 2014
    Messages : 98
    Points : 48
    Points
    48
    Par défaut
    La deuxieme méthode marche, mais le problème est que étant donné que le nombre de balises à supprimer est aléatoire dans la cellule, je ne sais donc pas à l'avance de combien je dois étirer la formule.
    Mais sinon elle marche bien.
    Je la garde sous le coude car elle va me servir sur de plus petit tableau ^^

    Je pense que la méthode 1 sera plus approprié pour mon tableau actuel
    Pour le moment elle me retourne cette erreur cité plus haut, mais elle me fait quand même sur certaine ligne le travail (qui est juste aussi ^^)

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/07/2015, 08h41
  2. [MySQL] Remplacer une chaîne de caractères dans une base de données
    Par Furius dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 27/11/2013, 21h06
  3. [Lazarus] Trouver l'occurence n d'un caractère dans une chaîne
    Par [ZiP] dans le forum Lazarus
    Réponses: 2
    Dernier message: 29/05/2013, 21h46
  4. Réponses: 1
    Dernier message: 26/12/2010, 21h20
  5. Remplacer une chaîne de caractères dans une base
    Par Furius dans le forum Requêtes
    Réponses: 4
    Dernier message: 19/10/2005, 23h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo