Découper une chaîne de caractère et la ranger en lignes et colonnes

Résolu/Fermé
Romain21410 Messages postés 7 Date d'inscription mercredi 7 octobre 2020 Statut Membre Dernière intervention 1 décembre 2020 - 7 oct. 2020 à 21:18
Romain21410 Messages postés 7 Date d'inscription mercredi 7 octobre 2020 Statut Membre Dernière intervention 1 décembre 2020 - 8 oct. 2020 à 12:33
Bonjour,

J'ai un petit problème excel.

A partir d'une chaîne de caractère du même type que celle ci-dessous, je souhaiterais créer une macro VBA ou utiliser une fonction prédefinie d'excel afin de :

- 1) séparer la chaîne de caractère en 3 colonnes : nom / prenom / @mail
- 2) aller à la ligne pour chaque nouvelle personne
- 3) enlever les séparateurs comme les < ; >

BOTTRAS Nicolas <bottrasn@gmail.com>; LARRIEU Cedric <cedric.larrieu@gmail.com>; MICHUD Daniel <d.michud@gmail.com>;

L'idée serait d'obtenir le même résultat que sur l'image.

https://img-19.ccm2.net/4igqnU4fIEZdAprKqPFX3crpmMM=/b0ce375c82f54dd69cf1f17b03f5d292/tmp/Capture.PNG
|fancy]

Merci d'avance pour votre aide.

R.L.
A voir également:

4 réponses

Raymond PENTIER Messages postés 58771 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 24 décembre 2024 17 259
7 oct. 2020 à 22:10
Bonjour.

Et, dans les noms, il n'y en a jamais un qui ressemble à DE MONTAIGNAC ? Ni, dans les prénoms, un qui ressemble à Max Henri ou à William Jr ? C'est-à-dire avec des espaces ...

Dans ta chaîne de caractères, il y a combien de personnes ? Seulement 3 ou plutôt une centaine ?
Il y a une seule chaîne avec toutes les personnes, ou plusieurs chaînes à gérer ?
Cette chaîne (ou ces chaînes) provient de quelle source : Web, cvs, Access ... ?
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248
7 oct. 2020 à 22:18
Bonjour,

j'ajouterai : les noms sont toujours en majuscule et prénoms avec juste l'initiale ?
eric
0
Romain21410 Messages postés 7 Date d'inscription mercredi 7 octobre 2020 Statut Membre Dernière intervention 1 décembre 2020
8 oct. 2020 à 07:32
Bonjour Raymond et Eric, les noms sont toujours en majuscule et les initiales des prénoms également. Dans les prénoms il est possible de rencontrer ce type de personne

Noms à particule: DE HERDT Marc <marc.deherdt2@laposte.net>
Prénoms composés: ANGEON Rose Aimee <roseaimeeangeon@gmail.com>

Il y aurait une seule chaîne d'environ 1500 personnes à gérer. Cette chaîne provient d'une liste de diffusion outlook. L'idée serait d'importer directement la liste outlook au format cvs sur excel mais je n'ai pas trouvé de plugins permettant de faire le transfert (seuls le nom de la liste de diffusion est importé sur excel). Je suis donc obligé de dérouler la liste de diffusion pour la copier-coller dans une cellule excel, ce qui donne cette longue chaîne de caractères.

Merci beaucoup de vous l'intérêt que vous portez à cette question.

R.L.
0
via55 Messages postés 14504 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 21 décembre 2024 2 738
7 oct. 2020 à 23:04
Bonjour Romain
Coucou Raymond et eriiic

A condition qu'il n'y ait pas comme l'a bien précisé Raymond des espaces entre 2 parties de noms ou de prénoms un exemple par macro à adapter
https://mon-partage.fr/f/c2zlIUhN/

Cdlmnt
Via
0
Romain21410 Messages postés 7 Date d'inscription mercredi 7 octobre 2020 Statut Membre Dernière intervention 1 décembre 2020
Modifié le 8 oct. 2020 à 08:45
Bonjour Via 55,

Merci beaucoup pour cette macro ! Effectivement elle marche très bien, à l'exception des noms et prénoms composés. Finalement il serait possible de contourner le problème des noms et prénoms composés en récupérant uniquement les adresses mail. Auriez-vous une idée de la partie du programme à modifier ? (il n'y aurait qu'une seule colonne composée des mails)

Merci encore pour ce très beau programme.

R.L.
0
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248 > Romain21410 Messages postés 7 Date d'inscription mercredi 7 octobre 2020 Statut Membre Dernière intervention 1 décembre 2020
Modifié le 8 oct. 2020 à 09:06
Bonjour,

On aurait pu se baser sur les majuscules pour distinguer les noms des prénoms.
Mais bon, si les mails te suffisent, pas la peine de s'embêter.
Par contre il y a une limite aux tailles des chaines en vba (que j'ai oubliée). Contrôle que le dernier élément sort bien.
eric

PS : qq chose m'échappe. Le csv fournit un enregistrement par ligne, pas tout sur une seule ligne...
Ah vu, c'est une liste de diffusion, pas un export
0
Romain21410 Messages postés 7 Date d'inscription mercredi 7 octobre 2020 Statut Membre Dernière intervention 1 décembre 2020 > eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024
8 oct. 2020 à 11:14
Rebonjour Eric,

Merci beaucoup pour ton message et ton conseil : effectivement les chaînes vba sont limitées, je séparerai l'opération en 2 fois pour que tous les éléments sortent bien.

Merci encore pour vos conseis avisés et bonne journée :)

R.L.
0
via55 Messages postés 14504 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 21 décembre 2024 2 738 > Romain21410 Messages postés 7 Date d'inscription mercredi 7 octobre 2020 Statut Membre Dernière intervention 1 décembre 2020
8 oct. 2020 à 11:17
Re

Remplace la macro par celle-ci, tu auras dans la 1ere colonne les nom prénom et dans la 2nde le mail
Sub decoupe()
chaine = ActiveCell.Value

If Right(chaine, 1) = ";" Then chaine = Left(chaine, Len(chaine) - 1) ' suppression du ; final s'il existe

tablo = Split(chaine, ";") ' découpe chaine en fonction des ;

For n = 0 To UBound(tablo) ' boucle sur les élements du tableau

    newchaine = WorksheetFunction.Substitute(tablo(n), ">", "") 'supprime le >
    
    If Left(newchaine, 1) = " " Then newchaine = Right(newchaine, Len(newchaine) - 1) 'suppression du caractère espace en début s'il existe
    
    tablo2 = Split(newchaine, "<") ' découpe la nouvelle chaîne en fonction d u <
    
    x = Sheets("Feuil2").Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row + 1 ' 1ere ligne vide en col A de Feuil2
    
    'remplit les cellules des 2 colonnes de feuille 2
    Sheets("Feuil2").Cells(x, 1) = tablo2(0)
    Sheets("Feuil2").Cells(x, 2) = tablo2(1)

Next n

Sheets("Feuil2").Activate
End Sub


Cdlmnt
Via
0
Romain21410 Messages postés 7 Date d'inscription mercredi 7 octobre 2020 Statut Membre Dernière intervention 1 décembre 2020 > via55 Messages postés 14504 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 21 décembre 2024
Modifié le 8 oct. 2020 à 12:33
Bonjour Via,

Ta version est vraiment au top et très fonctionnelle. Merci beaucoup pour ton aide.

En te souhaitant une excellente journée.

Cordialement,

R.L.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
Modifié le 8 oct. 2020 à 10:42
Bonjour à tous

Proposition avec seulement identité et adresse mail



la maquette
https://mon-partage.fr/f/VnKJ6Tbe/

0
Romain21410 Messages postés 7 Date d'inscription mercredi 7 octobre 2020 Statut Membre Dernière intervention 1 décembre 2020
8 oct. 2020 à 11:11
Trop fort Michel !

La macro marche super bien (seule la dernière ligne n'est pas prise en compte mais pour 1 personne ça se fait facilement manuellement).

Merci beaucoup pour votre aide, sans vous je n'y serais pas arrivé.

En vous souhaitant une bonne journée !

R.L.
0