Séparer des chaines de caractères

Bonjour à tous,

Voici mon problème, simple a priori : j'ai une liste d'une centaine de destinataires mail, copiée de Outlook dans une seule cellule Excel, donc entre ' ' et separés par des ; que j'aimerais avoir sous la forme Prénom + NOM...

En gros, j'ai ça, dans une seule cellule :

'pierre.exemple@gmail.com'; 'jean.demo@yahoo.fr'....

...et j’aimerais arriver à ça, un destinataire dans une cellule :

Pierre EXEMPLE

Jean DEMO

Possible selon vous en jouant sur les chaines de caractères ? Précision utile, les domaines de messagerie suivant les @ sont très différents..

Merci d'avance de votre aide !!

Bonjour julking92, le VBA est autorisé?

LE VBA est autorisé, c'est d'ailleurs pour ça que je m'adresse à ce forum

Sub decoupage()

Dim decoupe As Variant
Dim chaine As String

chaine = "'pierre.exemple@gmail.com'; 'jean.demo@yahoo.fr'"

decoupe = Split(chaine, ";")
Dim i As Integer
For i = LBound(decoupe, 1) To UBound(decoupe, 1)
    Cells(i + 1, 1) = Replace(decoupe(i), "'", "")
Next i
End Sub

Voilà une proposition/solution.

Toutes les occurences sont sauvegardées en partant de la cellule A1, puis A2 etc...

Bonjour,

peut-on avoir cette fameuse cellule car j'imagine déjà une série d'exceptions et bizarreries que ton exemple ne montre pas!

A priori, une série de SPLIT et l'affaire est réglée!

A+

Bonjour, merci pour vos réponses ! En notant

    Sub decoupage()

    Dim decoupe As Variant
    Dim chaine As String

    chaine = Cells(1, 1)

    decoupe = Split(chaine, "; ")
    Dim i As Integer
    For i = LBound(decoupe, 1) To UBound(decoupe, 1)
        Cells(i + 1, 1) = Replace(decoupe(i), "'", "")
    Next i
    End Sub

Cela marche impeccable sauf qu'il manque à virer l'@ et ce qu'il y a après : pour l'instant il y a "juste" report de chaque adresse mail dans chaque cellule (ce qui est déjà super)

Curulis57 par souci de confidentialité étant donné que ce sont des adresses mails, je ne préfère pas donner son contenu, et il n'y a pas d'exceptions, toutes les adresses sont au format données dans l'exemple

Ah oui désolé

Sub decoupage()
Dim decoupe As Variant
Dim chaine As String

chaine = "'pierre.exemple@gmail.com'; 'jean.demo@yahoo.fr'"
decoupe = Split(chaine, ";")

Dim i As Integer
Dim adresse As String
Dim nom As String
For i = LBound(decoupe, 1) To UBound(decoupe, 1)
    adresse = Replace(decoupe(i), "'", "")
    nom = Left(adresse, InStr(adresse, "@") - 1)
    nom = Replace(nom, ".", " ")
    Cells(i + 1, 1) = nom
Next i

End Sub

EDIT: Attention la ligne avec les adresses mail semble merdouiller sur le forum!!

Bonjour,

Pour résumer ça devrait suffire :

Sub test()
Dim tmp
[A1].Hyperlinks.Delete
tmp = Split([A1], "; ")
For i = 0 To UBound(tmp)
   Cells(i + 1, 1) = Split(tmp(i), "@")
Next
End Sub

Après les replace faut voir... Si on peut à coup sur remplacer les virgules et les points par des espaces , le trait d'union est plus discutable...

Quand à mettre en majuscule les noms de famille faut pas trop y compter sauf risque d'erreur considérable !

A+

Bonjour le fil, bonjour le forum,

Bien que largement en retard je me permet qu'en même d'envoyer ma proposition...

Sub Macro1()
Dim T1 As Variant 'déclare la variable T1 (Tableau 1)
Dim T2() As Variant 'déclare la variable T2 (Tableau 2)
Dim T3() As Variant 'déclare la variable T3 (Tableau 3)

T1 = Split(Sheets("Feuil1").Range("A1").Value, ";") 'définit le tableau T1 en séparant les éléments entre les point-virgule (onglet et cellule à adapter a ton cas)
For I = 0 To UBound(T1) 'boucle sur tous les éléments du tableau 1
    ReDim Preserve T2(I) 'redimensionne le tableau 2
    T2(I) = Split(T1(I), "@")(0) 'définit le tableau T2 en ne prenant que la partie avant le @
    T2(I) = Replace(T2(I), "'", "", 1, 1) 'suprime les ' en debut d'élément
Next I 'prochain élément de la boucle
ReDim Preserve T3(UBound(T2, 1), 1) 'redimensionne le tableau à deux colonnes T3
For I = 0 To UBound(T2, 1) 'boucle sur tous les éléments du tableau T2
    On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante)
    T3(I, 0) = Split(T2(I), ".")(0) 'alimente la colonne 0 du tableau 3 avec la partie avant le point de l'élément de T2 (génère une erreur si il n'y a pas de point)
    T3(I, 1) = Split(T2(I), ".")(1) 'alimente la colonne 1 du tableau 3 avec la partie après le point de l'élément de T2 (génère une erreur si il n'y a pas de point)
    If Err <> 0 Then T3(I + 1, 0) = T2(I) 'si une erreur a été générée alimente la colonne 0 du tableau T3 avec l'élément complet de T2
Next I 'prochain élément de la boucle
Sheets("Feuil2").Range("A1").Resize(UBound(T3, 1) + 1, 2) = T3 'renvoie dans la cellule A1 de l'onglet "Feuil2" le tableau 3 (onglet et cellule à adapter)
End Sub

Salut tout le monde,

une façon de faire... puisqu'il n'y a pas de piège, exception ou bizarreries...

A+

37mails.xlsm (19.06 Ko)

Super, merci beaucoup pour toutes ces réponses

Bonjour à tous,

Je relance ce topic car j'ai un souci similaire mais les solutions proposes ci dessus ne semblent pas fonctionner dans mon cas.

J'ai besoin de "déconcaténer" le contenu des cellules de ma colonne 1.

Chaque mot est séparé par un espace.

J'utilise le code suivant:

Dim tableau As Variant

tableau = Split(Sheets("Liste2").Range("A1").Value, " ")

Merci d'avance à vous!

Note: Mes données vont de la ligne 1 à la ligne 181 dans la colonne 1.

Bonjour,

sélectionner la colonne et 'Données / Convertir'

eric

Bonjour eriiic,

Merci pour ta réponse, je ne connaissais pas cette function dans Excel.

Malheureusement cette solution ne marche pas dans mon cas, car ligne à ligne, les mots n'ont pas la meme longueur et ne sont donc pas alignés par rapport aux autres lignes.

Je m'explique:

Colonne de depart:

AUDI A5 mild hybrid PHEV

BMW SERIES 2 ACTIVE TOURER active hybrid HEV

Dans l'idéal, je voudrais modifier celà en 4 colones:

AUDI / A5 / mild hybrid / PHEV

BMW / SERIES 2 ACTIVE TOURER / active hybrid / HEV

Mais avec ton outil j'obtiens.

AUDI / A5 / mild hybrid / PHEV

BMW S / ER / IES 2 ACTIVE/ TOURER active hybrid HEV

Comme j'ai montré précédemmen, j'ai essayé avec la function SPLIT de séparer chaque mot dans une colonne en indiquant les espaces comme séparateurs. Je n'arrive pas à faire marcher cette function.

Aurais-tu une idée en employant une function VBA?

Merci d'avance.


J'ai parlé trop vite, j'ai trouvé comment bien le configure pour que ça ait le résultat attendu

Toutefois, je suis toujours à la recherche d'informations sur la function Split

Merci beaucoup

A-priori ce n'est pas un découpage sur les espaces puisque tu laisses groupés des mots.

Ceci dit l'aide de split est claire et simple. L'as-tu consultée ?

dim tmp
tmp=split("ta chaine"," ")

Tu peux aussi utiliser l'enregistreur de macro sur 'Données / Convertir', tu auras l'essentiel du code pour le faire avec cette technique.

eric

Rechercher des sujets similaires à "separer chaines caracteres"