Excel macro séparant NOMPrénom ds une cellule
Fermé
Burocrate
-
10 mars 2010 à 16:55
Le Pingou Messages postés 12094 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 30 mai 2024 - 11 mars 2010 à 11:00
Le Pingou Messages postés 12094 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 30 mai 2024 - 11 mars 2010 à 11:00
A voir également:
- Excel macro séparant NOMPrénom ds une cellule
- Aller à la ligne dans une cellule excel - Guide
- Liste déroulante excel - Guide
- Verrouiller cellule excel - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Excel cellule couleur si condition texte - Guide
6 réponses
eriiic
Messages postés
24577
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
30 mai 2024
7 221
10 mars 2010 à 22:45
10 mars 2010 à 22:45
Bonsoir tout le monde,
Une proposition par formule avec le NOMPrénom en A1.
en B1 :
=GAUCHE(A1;MIN(SI(CODE(STXT(A1;LIGNE(INDIRECT("$1:$"&NBCAR(A1)));1))>96;LIGNE(INDIRECT("$1:$"&NBCAR(A1)));9^9))-2)
en C1 :
=STXT(A1;MIN(SI(CODE(STXT(A1;LIGNE(INDIRECT("$1:$"&NBCAR(A1)));1))>96;LIGNE(INDIRECT("$1:$"&NBCAR(A1)));9^9))-1;60)
Les 2 formules sont matricielles, à valider par shift+ctrl+entrée avec le curseur en édition. (s'entourent de { } si validation correcte)
eric
Une proposition par formule avec le NOMPrénom en A1.
en B1 :
=GAUCHE(A1;MIN(SI(CODE(STXT(A1;LIGNE(INDIRECT("$1:$"&NBCAR(A1)));1))>96;LIGNE(INDIRECT("$1:$"&NBCAR(A1)));9^9))-2)
en C1 :
=STXT(A1;MIN(SI(CODE(STXT(A1;LIGNE(INDIRECT("$1:$"&NBCAR(A1)));1))>96;LIGNE(INDIRECT("$1:$"&NBCAR(A1)));9^9))-1;60)
Les 2 formules sont matricielles, à valider par shift+ctrl+entrée avec le curseur en édition. (s'entourent de { } si validation correcte)
eric
Le Pingou
Messages postés
12094
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
30 mai 2024
1 435
10 mars 2010 à 17:09
10 mars 2010 à 17:09
Bonjour,
Mettre un bout (une vingtaine de lignes) de fichier sur https://www.cjoint.com/ et poster le lien!
Mettre un bout (une vingtaine de lignes) de fichier sur https://www.cjoint.com/ et poster le lien!
Vaucluse
Messages postés
26496
Date d'inscription
lundi 23 juillet 2007
Statut
Contributeur
Dernière intervention
1 avril 2022
6 401
10 mars 2010 à 18:16
10 mars 2010 à 18:16
Bonjour
si seule la première lettre du prénom est une majuscule et seulement dans le cas où notre ami Le Pingou ne vous proposerait pas de macro,(ce qui m'étonnerait) je vous propose un petit jeu qui vaudra peut être la peine sur 16000 lignes, mais qui va prendre quand même du temps:
Sélectionnez la colonne des noms:
Remplacez a par_a
dans la fenêtre choisissez "option" et cochez: "sensible à la casse")
répéter l'opération pour les 26 lettres de l'alphabet.(eh oui!mais ça va assez vite)
toutes les initiales des prénoms seront suivies d'un underscore
dans la colonne contiguë, la formule (ici en B1 pour A1)
=STXT(A1;TROUVE("_";A1;1)-1;1)&STXT(A1;TROUVE("_";A1;1)+1;30)
vous reconstituera le prénom (avec un maximum de 30 lettres ça devrait suffire)
et en C1 la formule:
=STXT(A1;1;NBCAR(A1)-NBCAR(B1)-1)
vous reconstituera le nom
A noter toutefois que cette "méthode" vous créera des prénoms composés avec des tirets mal placés si chacun des éléments comporte une majuscule.
On peut arranger ça en reprenant la colonne prénom avec d'autres formules si vous le souhaitez.
Mais attendez peut être mon collègue Le Pingou, lui s'y connait en macro, pas moi
Crdlmnt
si seule la première lettre du prénom est une majuscule et seulement dans le cas où notre ami Le Pingou ne vous proposerait pas de macro,(ce qui m'étonnerait) je vous propose un petit jeu qui vaudra peut être la peine sur 16000 lignes, mais qui va prendre quand même du temps:
Sélectionnez la colonne des noms:
Remplacez a par_a
dans la fenêtre choisissez "option" et cochez: "sensible à la casse")
répéter l'opération pour les 26 lettres de l'alphabet.(eh oui!mais ça va assez vite)
toutes les initiales des prénoms seront suivies d'un underscore
dans la colonne contiguë, la formule (ici en B1 pour A1)
=STXT(A1;TROUVE("_";A1;1)-1;1)&STXT(A1;TROUVE("_";A1;1)+1;30)
vous reconstituera le prénom (avec un maximum de 30 lettres ça devrait suffire)
et en C1 la formule:
=STXT(A1;1;NBCAR(A1)-NBCAR(B1)-1)
vous reconstituera le nom
A noter toutefois que cette "méthode" vous créera des prénoms composés avec des tirets mal placés si chacun des éléments comporte une majuscule.
On peut arranger ça en reprenant la colonne prénom avec d'autres formules si vous le souhaitez.
Mais attendez peut être mon collègue Le Pingou, lui s'y connait en macro, pas moi
Crdlmnt
Le Pingou
Messages postés
12094
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
30 mai 2024
1 435
10 mars 2010 à 22:16
10 mars 2010 à 22:16
Bonjour Vaucluse,
Merci, je vais essayer votre proposition pour le plaisir.
Par contre sans le petit plus demandé aucune procédure ne sortira de la fabrique.
Merci, je vais essayer votre proposition pour le plaisir.
Par contre sans le petit plus demandé aucune procédure ne sortira de la fabrique.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
J'aimerais pouvoir accéder a votre requète mais malheureusement c'est un fichier confidentiel :s Je vais essayer la formule de Eriic :) Merci pour votre interet porté a mon problème !
Le Pingou
Messages postés
12094
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
30 mai 2024
1 435
11 mars 2010 à 11:00
11 mars 2010 à 11:00
Bonjour,
Pas de problème. Voici la procédure avec NOMPrénom en colonne [A]
Résultats : Nom colonne [B] et Prénom en [C].
Mettre la procédure dans le module.
Pas de problème. Voici la procédure avec NOMPrénom en colonne [A]
Résultats : Nom colonne [B] et Prénom en [C].
Mettre la procédure dans le module.
Sub separerNomPrenom() Dim c As Long, li As Long Dim nc As Byte, nbc As Byte 'majuscule code 65 à 90 li = 1 debut: nbc = Len(Cells(li, 1)) For c = 1 To nbc nc = Asc(Mid(Cells(li, 1), c, 1)) If nc >= 65 And nc <= 90 Then ' MsgBox nc & " Une majuscule" Else Cells(li, 2) = Left(Cells(li, 1), c - 2) Cells(li, 3) = Right(Cells(li, 1), nbc - c + 2) li = li + 1 GoTo debut End If Next c End Sub
10 mars 2010 à 22:50
ça fonctionne à la merveille
Merci pour l'astuce.
Bonne fin de journée