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

Résolu
Romain21410 Messages postés 7 Statut Membre -  
Romain21410 Messages postés 7 Statut Membre -
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 71831 Date d'inscription   Statut Contributeur Dernière intervention   17 379
 
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 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 279
 
Bonjour,

j'ajouterai : les noms sont toujours en majuscule et prénoms avec juste l'initiale ?
eric
0
Romain21410 Messages postés 7 Statut Membre
 
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 14730 Statut Membre 2 750
 
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 Statut Membre
 
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 25847 Date d'inscription   Statut Contributeur Dernière intervention   7 279 > Romain21410 Messages postés 7 Statut Membre
 
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 Statut Membre > eriiic Messages postés 25847 Date d'inscription   Statut Contributeur Dernière intervention  
 
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 14730 Statut Membre 2 750 > Romain21410 Messages postés 7 Statut Membre
 
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 Statut Membre > via55 Messages postés 14730 Statut Membre
 
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 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 318
 
Bonjour à tous

Proposition avec seulement identité et adresse mail



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

0
Romain21410 Messages postés 7 Statut Membre
 
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