IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Excel Discussion :

Séparer des mots et les concaténer


Sujet :

Excel

  1. #1
    Membre éprouvé Avatar de TallyHo
    Homme Profil pro
    Lutin numérique
    Inscrit en
    Février 2006
    Messages
    1 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Lutin numérique

    Informations forums :
    Inscription : Février 2006
    Messages : 1 053
    Points : 1 052
    Points
    1 052
    Par défaut Séparer des mots et les concaténer
    Hello

    Je viens vers vous car j'ai un souci.

    Dans une cellule, j'ai une donnée texte du type "Prénom NOM".

    Je voudrais trouver comment faire pour avoir dans une cellule la donnée "Prénom NOM" en "NOM P.".
    Par exemple : "Marc TARTENPION" en "TARTENPION M."

    J'ai essayé un peu tout avec les trouve " ", les exact et majuscule etc etc, j'ai rien pu en tirer de bon. Le problême c'est avec les noms ou prénoms composés comme "Jean Marc DE LA TARTENPIONNE"

    Si quelqu'un a une idée avec des formules, merci à lui.
    Comme je n'y connais rien en VB, si c'est la seule solution, je veux bien mais il faudra bien bien bien m'expliquer

    Merci à tous

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 147
    Points
    20 147
    Par défaut
    bonjour


    Une possibilité à condition que le prénom composé soit conforme (Les deux prenoms séparés par des tirets): Jean-Marc DE LA TARTENPIONNE


    Si la chaine de caractères est en A1, tu peux saisir en B1:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =DROITE(A1;NBCAR(A1)-CHERCHE(" ";A1))&" "&GAUCHE(A1;CHERCHE(" ";A1))

    Ensuite dans la cellule C1 tu insères cette formule matricielle (à valider par Ctrl+Maj+Entree):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =GAUCHE(B1;NBCAR(B1)-NBCAR(DROITE(B1;EQUIV(" ";STXT(B1;NBCAR(B1)-LIGNE(INDIRECT("1:"&NBCAR(B1)));1);0)))+1)&"."


    michel

  3. #3
    Membre éprouvé Avatar de TallyHo
    Homme Profil pro
    Lutin numérique
    Inscrit en
    Février 2006
    Messages
    1 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Lutin numérique

    Informations forums :
    Inscription : Février 2006
    Messages : 1 053
    Points : 1 052
    Points
    1 052
    Par défaut
    Eh non justement, sinon je n'aurai pas de souci. Pas de tiret entre les prénoms Merci quand même pour ta réponse.
    J'ai l'impression que je ne m'en sortirais jamais avec ce truc.
    On ne peut pas faire avec les majuscules ?
    Mes connaissances sont limitées sur Excel et je n'y suis pas arrivé mais peut-être que ça peut orienter un "pro" pour m'aider

    EDIT :

    J'ai une piste avec données/convertir qui me sépare tous les mots.
    Mais j'ai toujours le problême de reconnaitre les majuscules.
    Concrétement la conversion donne :
    A - B - C - D - E
    Jean - Marc - DE - LA - TARTENPIONNE

    Mon souci c'est de repérer les cellules en majuscule pour les remettre en premier maintenant.

    Ca m'énerve, j'ai toujours un manque de connaissances qui me bloque quand je pars sur une autre piste

    SilkyRoad si tu as une idée pour la suite, merci à toi

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonsoir TallyHo,

    Si vous séparez les mots vous avez une fonction qui permet de repérer les majuscules :

    Si le 2ème caractère est en majucules on suppose que les autres le sont.

    (c1 contient DE)

    En VBA :
    n = cells(1, 3)
    n = mid(n, 2, 1)
    n = asc(n)

    Si le résultat est compris entre 65 et 90 c'est un nom en majuscules.
    Sinon c'est un nom en minuscule (ou avec une seule majuscule). La valeur sera de 97 à 122.

    Avec quelques lignes de code on peut donc reconstituer.

    Amicalement
    Dernière modification par Invité ; 31/03/2007 à 20h04.

  5. #5
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 147
    Points
    20 147
    Par défaut
    bonsoir


    Le format des noms ne facilite pas la tache par formule


    une nouvelle tentative :

    En A1, tu as le nom de base (Jean marc DE LA TARTENPIONNE).
    Tu recopies la même chose en B1.
    Tu utilises ensuite le menu données/convertir sur la cellule B1.

    Tu saisies la formule suivante en M1:
    (pour rechercher la position du premier mot totalement en majuscule)

    =NBVAL(B1:L1)-SOMMEPROD((B1:L1<>"")*(EXACT(B1:L1;MAJUSCULE(B1:L1))))+1



    Tu saisies la formule suivante En N1:
    (pour extraire le xieme mot d'une chaine)

    =SI(M1>NBCAR(A1)-NBCAR(SUBSTITUE(A1;" ";""));DROITE(A1;NBCAR(A1)-TROUVE("^^";SUBSTITUE(A1;" ";"^^";NBCAR(A1)-NBCAR(SUBSTITUE(A1;" ";"")))));SI(M1=1;STXT(A1;1;TROUVE("^^";SUBSTITUE(A1;" ";"^^";1))-1);STXT(A1;TROUVE("^^";SUBSTITUE(A1;" ";"^^";M1-1))+1;TROUVE("^^";SUBSTITUE(A1;" ";"^^";M1))-TROUVE("^^";SUBSTITUE(A1;" ";"^^";M1-1))-1)))



    Enfin, tu saisies en O1:
    =STXT(A1;TROUVE(N1;A1);NBCAR(A1))&" "&GAUCHE(A1;1)&"."

  6. #6
    Invité
    Invité(e)
    Par défaut
    Sans interférer sur votre proposition SilkyRoad, je signale simplement que j'ai rectifié ma réponse précédente :

    j'avais indiqué par inadvertance : En Access

    Il s'agit bien sûr de : En VBA et avec Excell.

  7. #7
    Expert éminent

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Points : 9 197
    Points
    9 197
    Par défaut
    Aucune possibilité s'il n'y a pas de règle stricte... à moins de tester chaque cas avec la liste exhaustive de tous les prénoms, avec toutes les orthographes possibles... quoi que, même là, Christophe Laurent, c'est lequel son prénom ?

    Bref, je te donne une petite soluce pour extraire le nom et le prénom, en partant du principe qu'un prénom contient forcément un trait d'union, s'il est composé, et qu'il y a toujours Prenom et NOM.

    essaie les formules suivantes (en partant du principe que A1 contient le prénom NOM):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    =Gauche(A1;TROUVE(" ";A1;1)-1)
    =stxt(A1;TROUVE(" ";A1;1)+1;9999)

  8. #8
    Membre éprouvé Avatar de TallyHo
    Homme Profil pro
    Lutin numérique
    Inscrit en
    Février 2006
    Messages
    1 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Lutin numérique

    Informations forums :
    Inscription : Février 2006
    Messages : 1 053
    Points : 1 052
    Points
    1 052
    Par défaut
    Merci pour l'effort SilkyRoad et les autres aussi
    Mais ça ne fonctionne pas.
    Ce n'est pas grave, j'ai quand même pas mal de pistes à explorer avec vos réponses, je vais étudier tout ça
    Merci à tous.

  9. #9
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 147
    Points
    20 147
    Par défaut
    bonjour

    Mais ça ne fonctionne pas.
    Donne moi un exemple qui ne fonctionne pas.
    je m'excuse d'insister mais la méthode que j'ai proposé à 19h46 fonctionne parfaitement (voir la pièce jointe).


    bonne journée
    michel
    Fichiers attachés Fichiers attachés

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour TallyHo,

    Compte tenu de ma réponse sur le code des caractères je confirme que votre problème peut être solutionné par quelques lignes de codes simples.

    Mais bien évidemment vérifiez la solution de SilkyRoad.

    Sinon, si vous êtes toujours intéressé je vous adresse ce code dans l'après-midi (heures de repas obligent).

    Cela doit fonctionner avec un prénom simple ou composé et même avec seulement un nom.

    Ce nom peut être composé de "x" parties.

    Amicalement.

  11. #11
    Membre éprouvé Avatar de TallyHo
    Homme Profil pro
    Lutin numérique
    Inscrit en
    Février 2006
    Messages
    1 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Lutin numérique

    Informations forums :
    Inscription : Février 2006
    Messages : 1 053
    Points : 1 052
    Points
    1 052
    Par défaut
    @SilkyRoad :

    Ca ne fonctionne pas avec les prénoms composés.
    Ton résultat donne DE LA TARTENPIONNE J. alors que ça devrait être DE LA TARTENPIONNE J.M.
    Sinon c'est impeccable au niveau du nom

    @jacques_jean :

    Je veux bien un bout de code mais je n'y connais rien en vb. Il faudra donc m'expliquer briévement comment l'incorporer et à quoi corresponde les fonctions dans les lignes, pour que je puisse l'adapter à ma feuille

    Merci à tous pour l'effort, j'ai à nouveau un espoir de solution

    Au pire des cas, je reprendrai la formule de SilkyRoad et pour les prénoms composés, je les modifierai manuellement. J'aurai déjà gagné énormément de temps avec cette formule. J'ai 2000 noms à traiter

  12. #12
    Invité
    Invité(e)
    Par défaut
    Re TallyHo,

    Je suis toujours optimiste et je le reste.

    Pas de problème pour l'instant, je fais les tests. Pour ce qui est d'utiliser ce code il suffira de faire un copier/coller.

    A bientôt.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Re TallyHo,

    Ci-dessous le code. Vous le sélectionnez puis "Copier".

    Vous ouvrez votre fichier puis Outils, Macro, Visual Basic.

    Vous cliquez 2 fois à gauche sur la feuille contenant vos données.

    Clic droit dans la fenêtre de droite puis "Coller".

    Regardez bien les commentaires indquez pour les variables dont je ne connais pas les valeurs au moment de l'initialisation et modifiez éventuellement ces valeurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    Option Explicit
    
    Sub Macro1()
    
    Dim pl As Long
    Dim pc, pc1, pcc, nbp, code  As Byte
    Dim nom, n  As String
    
    '1ère ligne contenant vos données (vous pouvez modifier)
    pl = 2
    '1ère colonne de données (il s'agit des cellules dans lesquelles
    'vous avez séparés tous les mots constituants les nom et prénom (vous pouvez modifier)
    pc = 7
    
    'colonne dans laquelle les données concaténées vont être copiées (vou pouvez modifier)
    pcc = pc + 8
    
    Debut:
    pc1 = pc
    nom = ""
    nbp = 0
    n = Cells(pl, pc1)
    If n = "" Then
    MsgBox "Traitement terminé.", _
                  vbOKOnly + vbInformation + vbApplicationModal, "Information"
    Exit Sub
    End If
    
    Cherche_fin:
    n = Cells(pl, pc1)
    If n = "" Then
    GoTo Nom_pren
    Else
      code = Asc(Mid(n, 2, 1))
      If code >= 65 And code <= 90 Then
      nom = nom & n & " "
      pc1 = pc1 + 1
      Else
      nbp = nbp + 1
      pc1 = pc1 + 1
      End If
    GoTo Cherche_fin
    End If
    
    Nom_pren:
    If nbp > 2 Then
    MsgBox "Vérifiez vos données en ligne : " & pl & Chr(10) & Chr(13) _
    & "plus de 2 champs trouvés avec des minuscules" & Chr(10) & Chr(13) _
    & "il n'est pas prévu que le prénom soit composé de plus de 2 éléments", _
    vbOKOnly + vbInformation + vbApplicationModal, "Information"
    Exit Sub
    End If
    
    If nbp = 0 Then
    pl = pl + 1
    GoTo Debut
    End If
    
    If nbp = 1 Then
    n = Cells(pl, pc)
    nom = nom & n
    Else
    n = Cells(pl, pc)
    nom = nom & n & "-"
    n = Cells(pl, pc + 1)
    nom = nom & n
    End If
    
    Cells(pl, pcc) = nom
    pl = pl + 1
    GoTo Debut
      
    End Sub
    Remarques :
    -j'ai choisi de copier les nouvelles données dans la même feuille. On peut bien sûr modifier ce code pour faire la copie dans une nouvelle feuille.
    -Ce code utilise les champs que vous avez créez en décomposant votre champ d'origine. Il est évident que l'on peut modifier pour faire la même chose avec le champ d'origine mais il faut y ajouter quelques lignes.

    Comme toujours faites une sauvegarde de votre fichier (sous un autre nom par exemple).

    En cas de problème n'hésitez pas.

    Amicalement.

  14. #14
    Membre éprouvé Avatar de TallyHo
    Homme Profil pro
    Lutin numérique
    Inscrit en
    Février 2006
    Messages
    1 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Lutin numérique

    Informations forums :
    Inscription : Février 2006
    Messages : 1 053
    Points : 1 052
    Points
    1 052
    Par défaut
    Epatant

    Merci beaucoup, en plus je comprends à peu prés le code, je vais modifier en fonction de mes feuilles, mais à priori ça fonctionne trés bien sur le premier classeur.

    Je garde quand même la formule à SilkyRoad pour l'étudier de plus prés car elle est trés bien aussi

    Merci à tous

Discussions similaires

  1. [PHP-JS] créer des espaces entre les mots php
    Par dgac2000 dans le forum Langage
    Réponses: 9
    Dernier message: 10/06/2019, 02h33
  2. Séparer des mots de balises HTML
    Par kandro dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 28/12/2011, 15h40
  3. Réponses: 14
    Dernier message: 25/10/2007, 15h00
  4. Réponses: 11
    Dernier message: 11/08/2007, 16h27
  5. Label d'axe graphique: remplacer les nombres par des mots
    Par Chrysomallus dans le forum MATLAB
    Réponses: 3
    Dernier message: 19/04/2007, 15h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo