Extraire plusieurs chaînes de caractères entre deux caractères identiques [Résolu/Fermé]

Signaler
Messages postés
34
Date d'inscription
jeudi 27 octobre 2011
Statut
Membre
Dernière intervention
3 juin 2020
-
Messages postés
34
Date d'inscription
jeudi 27 octobre 2011
Statut
Membre
Dernière intervention
3 juin 2020
-
Bonjour,

Voici un exemple de situation que j'aimerais résoudre:

"ahshshdhshdha bonjour/maison/porte ififiifofeofoejfefe

ahsdadasdasdad bonjour/voiture/porte fefefefefefefefef

frgtrgrgrgrgrggrg bonjour/igloo/porte grgrgrgrgrgrgrgr

dwdgrgrgrgrgrgr bonjour/bateau/porte grgrgrgrgrgrgrgr"


(ce texte se trouve sur un fichier Word et je peux le mettre sur une cellule excel)

Je recherche un moyen automatique pour extraire les mots maison, voiture, igloo, bateau et les mettre en colonne sur un fichier excel. J'imagine qu'il faudra utiliser VBA et dire que dans ce texte je veux extraire tous les mots qui se trouvent entre "bonjour/" et "/porte".

J'ai suivi un cours sur le VBA, mais je ne sais pas du tout comment je vais devoir m'y prendre. Auriez-vous un indice?

(Déjà: est-ce que c'est faisable? :euh:)

Merci!

6 réponses

Messages postés
1411
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
18 décembre 2020
148
Bonjour Tanvir, bonjour le forum,

Peut-être comme ça (à adapter) :

Sub Macro1()
Dim O As Worksheet 'décalre la variable O (Onglet)
Dim TV As Variant 'décalre la variable TV (Tableau des Valeurs)
Dim TM() As Variant 'décalre la variable TM (Tableau des Mots)

Set O = Worksheets("Feuil1") 'définit l'onglet O (à adapter à ton cas)
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
    ReDim Preserve TM(1 To I) 'redimensionne le tableau des lignes TM
    TM(I) = Split(TV(I, 1), "/")(1) 'récupère le premier mot apres le symbole "/"
Next I 'prochaine ligne de la boucle
'renvoie dans la cellule F1 (à adapter) redimensionnée, le tableau TM transposé
O.Range("F1").Resize(UBound(TM), 1).Value = Application.Transpose(TM)
End Sub

Messages postés
34
Date d'inscription
jeudi 27 octobre 2011
Statut
Membre
Dernière intervention
3 juin 2020

Salut, merci pour ta réponse.

j'ai mis le texte sur une cellule A1 sur une feuil1, et insérer le code sur VBA, mais ça bug:


Messages postés
1247
Date d'inscription
vendredi 13 février 2015
Statut
Membre
Dernière intervention
15 janvier 2021
385
Bonjour,

Dans la colonne A, tu mets tes textes les uns au dessous des autres,
Dans la colonne B1, tu mets la formule suivante :

=STXT(A1;(CHERCHE("bonjour/";A1)+8);(CHERCHE("/porte";A1)-(CHERCHE("bonjour/";A1)+8)))

et tu la dragues sur les cases B2, B3 etc. pour que la formule s'incrémente. Tu auras ton résultat dans la colonne B

Cldt
Messages postés
1411
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
18 décembre 2020
148
Re,

Ben oui... J'avais précisé "à adapter" car de ton coté tu n'as rien précisé du tout. Où se trouvent les cellules initiales, avant traitement de la macro ?
Mon exemple fonctionne si tu fais un copier/coler de Word vers Excel. L'onglet se nomme Feuil1 et tu colles à partir de la cellule A1. Le tableau sera renvoyé à partir de F1...
Messages postés
15393
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
16 janvier 2021
642
Bonsoir

c'est aussi possible avec une regex
(?<=bonjour/).*(?=/porte)

Ici un exemple


Et là un tuto
https://analystcave.com/excel-regex-tutorial/

Messages postés
34
Date d'inscription
jeudi 27 octobre 2011
Statut
Membre
Dernière intervention
3 juin 2020

Hello!

J'ai réussi à avoir ce que je voulais, merci à tous!