[VBA excel] chaine de caractere

Fermé
jax - 28 mai 2007 à 17:17
 jax - 1 juin 2007 à 14:42
Bonjour
Voila je voudrais crée un petit macro sous VBA.

Je voudrais diviser des cellules en 2 (avec des Noms et des Prenoms dedant), et faire en sorte d'avoir dans 2 nouvelles cellules d'un coté le Nom et de l'autre le Prenom.
Le nom etant toujours placé avant le prenom et il y a un espace entre le nom et prenom.

j'ai essayé un peu mais je bloque :

 
    dim cell as Range
    For Each cell In Selection
        cell = Split(cell, " ", 2)

        Debug.Print cell

      Next cell

Avec ce code, le nom reste dans la cellule, mais je n'arrive pas a recuper le Prenom et a l'afficher dans une nouvelle cellule.
Je suis novice donc si quelqu'un se sent de m'orienter. Merci
A voir également:

6 réponses

xjl Messages postés 232 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 12 juin 2007 183
28 mai 2007 à 17:37
Salut, tu peux utiliser ce code:

Selection.TextToColumns DataType:=xlDelimited, Space:=True

Bonne continuation !
1
Merci bcp !
Y-a-t-il un endroit ou l'on peut voir toutes ces procedures deja ecrites et sont elles expliquées?

En tout cas merci
0
xjl Messages postés 232 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 12 juin 2007 183 > jax
30 mai 2007 à 09:37
Oui, tu peux trouver pas mal de choses intéressantes dans l'aide de Visual Basic, il te suffit de faire F1 lorsque tu es dans ton éditeur !

Bonne continuation...
0
jax > xjl Messages postés 232 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 12 juin 2007
30 mai 2007 à 10:57
Merci, je connaissais deja l'aide de micro, mais travaillant sous vb editor (le plus basique possible) l'aide est relativement restreinte. Faudrais que je me retrouve la MSDN en francais.
Merci encore
0
Rebonjour :)

Ce code marche plutot bien mais gros soucis : lorsque je l'applique sur ma colonne, il m'efface les colones qui sont a droite de celle ci.
Meme en inserant de nouvelles colones, toutes les autres données sont effacées.

Sinon comment faire pour récuperer uniquement les 2 premiers mots de la cellule?

Merci encore
0
xjl Messages postés 232 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 12 juin 2007 183
1 juin 2007 à 10:07
salut,

si tu n'as que le nom et prénom dans ta colonne, ce code devrait suffire, sinon il faudra développer un peu:

For Each Cell In Selection.Cells
Position1 = InStr(1, Cell.Value, " ")
Cell.Offset(0, 1).Value = Right(Cell.Value, Len(Cell.Value) - Position1)
Cell.Value = Left(Cell.Value, Position1 - 1)
Next Cell

Attention, il te faut toujours une colonne de libre à côté de la colonne qui contient les cellules que tu veux séparer, et il faut que tu sélectionnes les cellules à séparer avant d'exécuter la macro...
Si tu trouves ça trop contraignant pour une quelconque raison, tu peux toujours remplacer Selection par une plage fixe Range(...)

Tiens-moi au courant... ;-)
0
Merci
Je vais tester voir ce que sa donne. Pour la colones a rajouter je savais, mais c'est dans ma colone il y avait trop d'espace (j'ai utilisé une fonction pour supprimé les espaces inutiles).

Sinon c'est bien en selectionnant la colone que je veux separer.

Je vais voir ce que je peux faire pour arrangé ton code. C'est un peu la merde parceque ma colone n'a pas des "données" parfaites; ya des caracteres qui sont la mais qui ne devraient pas (tableau recuperé et mal renseigné)

En tout cas merci bien
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
xjl Messages postés 232 Date d'inscription mardi 27 mars 2007 Statut Membre Dernière intervention 12 juin 2007 183
1 juin 2007 à 11:05
Si après le nom et le prénom, tu as de nouveau un espace et d'autres renseignements, tu peux utiliser ça si tu ne veux garder que le nom et le prénom, et si tu veux tout séparer, tu peux toujours créer le nombre de colonne nécessaires et adapter ce code:

Sub sépare()

For Each Cell In Selection.Cells
Position1 = InStr(1, Cell.Value, " ")
Position2 = InStr(Position1 + 1, Cell.Value, " ")
Position3 = InStr(Position2 + 1, Cell.Value, " ")
...
Cell.Offset(0, 1).Value = Mid(Cell.Value, Len(Cell.Value) - Position1, Len(Cell.Value) - Position1)
Cell.Offset(0,2).Value = Mid(Cell.Value, Len(Cell.Value) - Position2, Len(Cell.Value) - Position3)
...
Cell.Value = Left(Cell.Value, Position1 - 1)
Next Cell

End Sub
0
ya un bug dans ton code. Les mots sont mélangés. :)

je regarderais tout a lheure apres manger.

Sinon si on a une cellule vide, suffit juste de faire une condition pour qu'il ne s'arrete pas ?

Merci
0