[VBA excel] chaine de caractere

jax -  
 jax -
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
Configuration: Windows XP
Firefox 2.0.0.3

6 réponses

  1. xjl Messages postés 232 Statut Membre 183
     
    Salut, tu peux utiliser ce code:

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

    Bonne continuation !
    1
    1. jax
       
      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
      1. xjl Messages postés 232 Statut Membre 183 > jax
         
        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
      2. jax > xjl Messages postés 232 Statut Membre
         
        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
  2. jax
     
    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
  3. xjl Messages postés 232 Statut Membre 183
     
    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
  4. jax
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. xjl Messages postés 232 Statut Membre 183
     
    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
  7. jax
     
    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