Isoler une chaîne de caractère contenant un input

Bonjour à tous,

Tout d'abord, merci pour ce beau forum que je parcours depuis pas mal de temps et qui est d'une aide précieuse.

Je me lance enfin pour poser quelques questions, car mon expérience n'est pas aussi avancée que certains membres ici. Après avoir longtemps cherché, je n'ai pas trouvé ma solution, donc je sollicite les membres qui ont envie de m'aider

Voici mon problème actuel :

Dans un texte, je dois identifier tous les termes qui contiennent le caractère "@". Plus généralement, j'entrerai un 'input', et je souhaiterai ressortir toutes les chaînes de caractères qui contiennent cet 'input', comprises entre 2 espaces.

J'ai écrit la solution suivante pour les termes qui commencent par @ :

=STXT(H3;CHERCHE("@";H3;1);(CHERCHE(" ";H3;CHERCHE("@";H3;1))-CHERCHE("@";H3;1)))

Ca me retourne bien ma chaîne de caractère, qui commence par mon input, en l'occurrence '@'. Il faut ensuite que j'incrémente cette formule pour trouver toutes les chaînes qui commencent par @.

Mais cette solution ne me convient pas, car je ne peux identifier que les chaînes de caractères qui commencent par mon input. Si l'input est placé au milieu du mot, il faudrait que j'arrive à identifier l'espace avant l'input, et l'espace après... Ensuite, je pourrais extraire la chaîne de caractère.

Si quelqu'un a une idée pour mettre tout ça au clair, je vous en serai grandement reconnaissant.

Merci d'avance à ceux qui m'aideront

Bonjour, c'est possible de poster le fichier en question ?

Oui bien sur Voici un exemple avec un texte pris au hasard.

D'abord, je récupère tout le texte sur une seule ligne, sans retour à la ligne. Après, j'aimerai récupérer toutes les chaînes de caractères contenant "@"...

Mais je m'aperçois que j'ai trouvé ma solution, sauf que je ne sais pas tout coder en VBA. Voici le détail de la solution que j'ai trouvé :

1) Enlever toutes les tabulations comme dans mon exemple joint, en récupérant tout sur une ligne.

2) Utiliser la fonction convertir avec comme séparateur "espace". De cette manière je récupère une chaîne de caractère par cellule... Il ne me reste plus qu'à identifier les cellules contenant mon caractère recherché, ici "@". Cette partie là, aucun problème, je l'ai.

C'est la partie "Convertir' qui me pose problème, car ma chaîne de caractère est trop longue et la commande ne fonctionne pas en macro. J'ai le message "trop de caractère de continuïté de ligne".


Voilà le code de la solution que je décris au dessus, qui coince au niveau de l'utilisation de la fonction convertir à cause du nombre de lignes :

Mon texte étant assez long, ma macro s'arrête de fonctionner en m'indiquant le problème de continuïté de ligne.

Manuelle, étape par étape, ma solution fonctionne bien. Mais je n'arrive pas à résoudre ça ...

Sub NETTOYAGE()

'

' NETTOYAGE Macro

'

'

Range("H3").Select

ActiveCell.FormulaR1C1 = "=SUBSTITUTE(R[-1]C[-7],CHAR(10),"" "")"

Range("H3").Select

Selection.Copy

Range("H4").Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _

:=False, Transpose:=False

Application.CutCopyMode = False

Selection.TextToColumns Destination := Range("A12"), DataType := xlDelimited, _

TextQualifier := xlDoubleQuote, ConsecutiveDelimiter := TRUE, Tab := FALSE, _

Semicolon := TRUE, Comma := TRUE, Space := TRUE, Other := TRUE, OtherChar := _

".", FieldInfo := Array(Array(1,1),Array(2,1),Array(3,1),Array(4,1),Array(5,1), _

Array(6,1),Array(7,1),Array(8,1),Array(9,1),Array(10,1),Array(11,1),Array(12,1) _

,Array(13,1),Array(14,1),Array(15,1),Array(16,1),Array(17,1),Array(18,1),Array( _

19,1),Array(20,1),Array(21,1),Array(22,1),Array(23,1),Array(24,1),Array(25,1), _

Array(26,1),Array(27,1),Array(28,1),Array(29,1),Array(30,1),Array(31,1),Array( _

32,1),Array(33,1),Array(34,1),Array(35,1),Array(36,1),Array(37,1),Array(38,1), _

Array(39,1),Array(40,1),Array(41,1),Array(42,1),Array(43,1),Array(44,1),Array( _

45,1),Array(46,1),Array(47,1),Array(48,1),Array(49,1),Array(50,1),Array(51,1), _

Array(52,1),Array(53,1),Array(54,1),Array(55,1),Array(56,1),Array(57,1),Array( _

58,1),Array(59,1),Array(60,1),Array(61,1),Array(62,1),Array(63,1),Array(64,1), _

Array(65,1),Array(66,1),Array(67,1),Array(68,1),Array(69,1),Array(70,1),Array( _

71,1),Array(72,1),Array(73,1),Array(74,1),Array(75,1),Array(76,1),Array(77,1), _

Array(78,1),Array(79,1),Array(80,1),Array(81,1),Array(82,1),Array(83,1),Array( _

84,1),Array(85,1),Array(86,1),Array(87,1),Array(88,1),Array(89,1),Array(90,1), _

Array(91,1),Array(92,1),Array(93,1),Array(94,1),Array(95,1),Array(96,1),Array( _

97,1),Array(98,1),Array(99,1),Array(100,1),Array(101,1),Array(102,1),Array(103, _

1),Array(104,1),Array(105,1),Array(106,1),Array(107,1),Array(108,1),Array(109,1 _

),Array(110,1),Array(111,1),Array(112,1),Array(113,1),Array(114,1),Array(115,1) _

,Array(116,1),Array(117,1),Array(118,1),Array(119,1),Array(120,1),Array(121,1), _

Array(122,1),Array(123,1),Array(124,1),Array(125,1),Array(126,1),Array(127,1), _

Array(128,1),Array(129,1),Array(130,1),Array(131,1),Array(132,1),Array(133,1), _

End Sub

17test.xlsm (17.95 Ko)

C'est quelque chose comme ceci que vous voulez ?

sans titre

Exactement!

J'arrive à ce résultat manuellement, mais en le faisant avec une macro, ça coince au niveau de la fonction "Convertir" avec le problème de "continuïté de ligne".

Comment avez-vous procédez s'il vous plait ?

Globalement...

la macro découpe chaque portion de phrase séparée par alt+ entrée

puis dans chacune de ses portions elle cherche s'il y a un "@" avec un mot derrière et l'extrait

Il faut maintenant s'assurer qu'il y a le compte...

24test.xlsm (17.30 Ko)

Ok, j'ai bien compris, merci beaucoup !

Sauf que ce n'est pas tout à fait ce que je recherche. Là ce sont toutes les chaînes de caractères qui commencent par "@". Mais moi je voudrais toutes les chaines de caractères qui contiennent "@".

Exemple, si dans mon texte il y a une adresse email, cette version va me retourner tout ce qu'il y a après le "@". Alors que je voudrais toute la chaine de caractère contenant le "@", comprise entre les 2 espaces.

Voici un exemple de texte :

Je m'appelle Marc, mon adresse email est mp911@orange.fr et mon compte Twitter est @mp911.

Je voudrais récupérer en sortie, en colonne : "mp911@orange. fr" et "@mp911".

Sachant que, bien entendu, mon texte est beaucoup plus long que ce simple exemple.

En tout cas, merci beaucoup, j'avance déjà plus vite !

CPk a écrit :

Globalement...

la macro découpe chaque portion de phrase séparée par alt+ entrée

puis dans chacune de ses portions elle cherche s'il y a un "@" avec un mot derrière et l'extrait

Il faut maintenant s'assurer qu'il y a le compte...

Pour être plus clair, j'aurai juste besoin de la macro qui découpe le texte à chaque espace et me le rend en colonne. Ensuite, le test pour savoir si la cellule contient "@" est très facile

Sub chaine()
    a = Split(Feuil2.[A2], vbLf)
    For b = 0 To UBound(a)
        Feuil2.Cells(Rows.Count, 2).End(xlUp).Offset(1, 0) = a(b)
    Next
End Sub

Super merci beaucoup !

J'ai juste remplacer la consigne de retour à la ligne par "espace" et ça me donne exactement ce que je veux.

Merci beaucoup !!!!

De rien mais vous vouliez récuperer quoi exactement ? Ques les "@truc" ou aussi les "jean pierre @ truc.fr " ?

Les 2

Bonjour, je suis très sceptique à l'idée de récupérer "jean pierre @ machin.fr" car rien ne permet de distinguer si les deux mots avant le @ sont issu d'une phrase normal ou si ce sont les expressions qui constitue un email.

CPk a écrit :

Bonjour, je suis très sceptique à l'idée de récupérer "jean pierre @ machin.fr" car rien ne permet de distinguer si les deux mots avant le @ sont issu d'une phrase normal ou si ce sont les expressions qui constitue un email.

J'ai la solution, votre bout de code m'a bien aidé, merci

Je récupère ce qu'il y a entre 2 espaces et qui contient un @, c'est parfait : si c'est une adresse email ou un compte Twitter ça fonctionne parfaitement.

Rechercher des sujets similaires à "isoler chaine caractere contenant input"