Microsoft 365 Séparer NOM et Prénom d'une ListBox dans 2 Textbox

  • Initiateur de la discussion Initiateur de la discussion NONO14
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

NONO14

XLDnaute Impliqué
Bonjour à toutes et à tous,

Dans un formulaire, j'ai une ListBox qui s'affiche à son ouverture. Dans cette liste ("Lbx_Enregist") il y a 2 colonnes une qui contient un code et l'autre le Nom et Prénom.
Je souhaiterais que lorsque je clique sur une ligne de la liste, le NOM s'affiche dans la TextBox1 et le Prénom dans la TextBox2, en fait séparer le Nom du Prénom.
Les Noms et Prénoms sont également présent dans la feuille "Liste_agents" TS "t_Noms" colonne "Salarié".
J'ai cherché un peu partout, mais je n'ai pas trouvé pour cette situation.
Comment puis-je procéder et surtout est-ce possible ?
Je sais que cela va se compliquer s'il y a un Nom du style "De La Bouche en biais Marie-Thérèse".
Merci par avance pour votre aide.
 
Bonjour Nono,
Le problème des noms/prénoms ont fait l'objet de nombreux sujets avec toujours la même problématique :
Il est impossible de séparer les deux avec 100% de réussite. Par exemple avec :
Dupont Marie Thérèse : Vous ne pouvez pas savoir si le nom est Dupont ou Dupont Marie, et le prénom si c'est Thérèse ou Marie Thérèse.
Un exemple en PJ avec cette fonction :
VB:
Function Séparation(Texte, NomPrénom)
    Dim T, L%
    T = Split(Texte, " ")
    If NomPrénom = 0 Then
        Séparation = T(UBound(T))
    Else
        L = Len(T(UBound(T)))
        Séparation = Left(Texte, Len(Texte) - L)
    End If
End Function
La syntaxe est :
=Séparation(B6;1) pour le nom et =Séparation(B6;0) pour le prénom.
Comme vous le voyez ça ne marche pas toujours.
( sauf si le prénom est toujours orthographié avec un tiret entre les deux mots composés et jamais d'espace )
Et je ne connais pas de solution miracle.🙁

Addon : J'ai rajouté un exemple par macro en appuyant sur le bouton.
 

Pièces jointes

Dernière édition:
Bonjour Nono,
Le problème des noms/prénoms ont fait l'objet de nombreux sujets avec toujours la même problématique :
Il est impossible de séparer les deux avec 100% de réussite. Par exemple avec :
Dupont Marie Thérèse : Vous ne pouvez pas savoir si le nom est Dupont ou Dupont Marie, et le prénom si c'est Thérèse ou Marie Thérèse.
Un exemple en PJ avec cette fonction :
VB:
Function Séparation(Texte, NomPrénom)
    Dim T, L%
    T = Split(Texte, " ")
    If NomPrénom = 0 Then
        Séparation = T(UBound(T))
    Else
        L = Len(T(UBound(T)))
        Séparation = Left(Texte, Len(Texte) - L)
    End If
End Function
La syntaxe est :
=Séparation(B6;1) pour le nom et =Séparation(B6;0) pour le prénom.
Comme vous le voyez ça ne marche pas toujours.
( sauf si le prénom est toujours orthographié avec un tiret entre les deux mots composés et jamais d'espace )
Et je ne connais pas de solution miracle.🙁

Addon : J'ai rajouté un exemple par macro en appuyant sur le bouton.
Bonjour sylvanu
Oui je viens bien le problème.
Merci toutefois pour votre réponse
 
J'ai trouvé une solution avec ce code. Je récupère bien le Nom et le Prénom dans mes 2 TextBoxs.
Par contre, je vais devoir chercher encore un peu afin de récupérer le code et son temps de travail qui sont sur la même ligne et les récupérer dans 2 autres TextBoxs.
Je fais cela pour récupérer les données d'un agent déjà enregistré afin de les modifier.

VB:
Private Sub Lbx_Enregist_Click()
Dim FullName As String
Dim FirstName As String
Dim LastName As String
Dim SpacePose As Integer

'On identifie FullName
    FullName = Me.Lbx_Enregist.Value

'On trouve la position de l'espace
    SpacePose = InStr(1, FullName, " ")
    
'On extrait le Nom de famille avant l'espace
    LastName = Left(FullName, SpacePose - 1)
    
'On extrait le Prénom
    FirstName = Mid(FullName, SpacePose + 1)
    
'On affiche les résultats dans des TextBoxs
    Me.TextBox1.Value = LastName
    Me.TextBox2.Value = FirstName

Application.ScreenUpdating = False
End Sub
 
🙂
Ca ne marche pas mieux.
Il suffit que le nom ait deux mots pour que ça plante :

donnera :
Regarde la pièce jointe 1204344
donc pas mieux... mais en plus compliqué.🙂
Oui je sais mais je n'ai pas trouvé comment utiliser votre fonction dans le Vba.
Désolé pour mon incompétence....
Je cherche encore pour les Noms séparés et les prénoms avec ou sans tirets.
 
Pour le reste vous pouvez faire :
VB:
Ligne = Application.Match(FullName, [A:A], 0)   ' Récupération ligne si Name en colonne A
Code = Cells(Ligne, "B")                        ' Récupération Code si en colonne B
TempsTravail = Cells(Ligne, "C")                ' Récupération temps travail si en colonne C
Evidemment colonnes A,B,C à modifier.
 
Sans fichier difficile de faire mieux, mais cela pourrait ressembler à ça :
Code:
Private Sub Lbx_Enregist_Click()
Dim FullName$, FirstName$, LastName$, Code, TempsTravail
'On identifie FullName
    FullName = Me.Lbx_Enregist.Value
'On extrait le Nom de famille avant l'espace
    LastName = Séparation(FullName, 1)
'On extrait le Prénom
    FirstName = Séparation(FullName, 0)
' Récupération ligne si Name en colonne A
    Ligne = Application.Match(FullName, [A:A], 0)
' Récupération Code si en colonne B
    Code = Cells(Ligne, "B")
' Récupération temps travail si en colonne C
    TempsTravail = Cells(Ligne, "C")
'On affiche les résultats dans des TextBoxs
    Me.TextBox1.Value = LastName
    Me.TextBox2.Value = FirstName
    'Rajouter rangement Code et TempsTravail
Application.ScreenUpdating = False
End Sub
Function Séparation(Texte, NomPrénom)
    Dim T
    T = Split(Texte, " ")
    If NomPrénom = 0 Then
        Séparation = T(UBound(T))
    Else
        Séparation = Left(Texte, Len(Texte) - Len(T(UBound(T))))
    End If
End Function
 
Sans fichier difficile de faire mieux, mais cela pourrait ressembler à ça :
Code:
Private Sub Lbx_Enregist_Click()
Dim FullName$, FirstName$, LastName$, Code, TempsTravail
'On identifie FullName
    FullName = Me.Lbx_Enregist.Value
'On extrait le Nom de famille avant l'espace
    LastName = Séparation(FullName, 1)
'On extrait le Prénom
    FirstName = Séparation(FullName, 0)
' Récupération ligne si Name en colonne A
    Ligne = Application.Match(FullName, [A:A], 0)
' Récupération Code si en colonne B
    Code = Cells(Ligne, "B")
' Récupération temps travail si en colonne C
    TempsTravail = Cells(Ligne, "C")
'On affiche les résultats dans des TextBoxs
    Me.TextBox1.Value = LastName
    Me.TextBox2.Value = FirstName
    'Rajouter rangement Code et TempsTravail
Application.ScreenUpdating = False
End Sub
Function Séparation(Texte, NomPrénom)
    Dim T
    T = Split(Texte, " ")
    If NomPrénom = 0 Then
        Séparation = T(UBound(T))
    Else
        Séparation = Left(Texte, Len(Texte) - Len(T(UBound(T))))
    End If
End Function
Merci beaucoup. J'ai collé le code dans mon application mais j'ai une incompatibilité de type pour "code" en gras.
Je vous joins mon fichier. Le code se trouve dans l'UfGestTemps, la 1ère page du multipage.
Merci par avance pour votre aide

VB:
Private Sub Lbx_Enregist_Click()
Dim FullName$, FirstName$, LastName$, Code, TempsTravail
'On identifie FullName
    FullName = Me.Lbx_Enregist.Value
'On extrait le Nom de famille avant l'espace
    LastName = Séparation(FullName, 1)
'On extrait le Prénom
    FirstName = Séparation(FullName, 0)
' Récupération ligne si Name en colonne A
    Ligne = Application.Match(FullName, [A:A], 0)
' Récupération Code si en colonne B
    [B]Code = Cells(Ligne, "B")[/B]
' Récupération temps travail si en colonne D
    TempsTravail = Cells(Ligne, "D")
'On affiche les résultats dans des TextBoxs
    Me.TextBox1.Value = LastName
    Me.TextBox2.Value = FirstName
    Me.TextBox3.Value = Code
    Me.TextBox5.Value = TempsTravail
    'Rajouter rangement Code et TempsTravail
Application.ScreenUpdating = False
End Sub
 

Pièces jointes

@nono,
' Récupération ligne si Name en colonne A
Cela signifiait que c'est un exemple et qu'il faut adapter.🙂

Si la feuille concernée est bien "Imp_Pointage", et en supposant que Nom Prénom sont ien présent dans votre feuille ( ce qui n'est pas le cas dans votre fichier ) alors on peut faire :
Code:
Private Sub Lbx_Enregist_Click()
Dim FullName$, FirstName$, LastName$, CodeT, TempsTravail
On Error GoTo NonTrouvé
'On identifie FullName
    FullName = Me.Lbx_Enregist.Value
'On extrait le Nom de famille avant l'espace
    LastName = Séparation(FullName, 1)
'On extrait le Prénom
    FirstName = Séparation(FullName, 0)
' 'On affiche les résultats dans des TextBoxs
    With Sheets("Imp_Pointage")
        Ligne = .Application.Match(FullName, [B:B], 0)  ' N° de ligne
        Me.TextBox1.Value = Séparation(FullName, 1)     ' Nom
        Me.TextBox2.Value = Séparation(FullName, 0)     ' Prénom
        Me.TextBox3.Value = .Cells(Ligne, "A")          ' Code
        Me.TextBox5.Value = .Cells(Ligne, "G")          ' Tps travail
    End With
Application.ScreenUpdating = False
Exit Sub
NonTrouvé:
    MsgBox " Les nom et prénoms " & FullName & " n'ont pas été trouvés."
End Sub

Non testé je n'ai pas compris le fonctionnement de vos userforms.
 
@nono,

Cela signifiait que c'est un exemple et qu'il faut adapter.🙂

Si la feuille concernée est bien "Imp_Pointage", et en supposant que Nom Prénom sont ien présent dans votre feuille ( ce qui n'est pas le cas dans votre fichier ) alors on peut faire :
Code:
Private Sub Lbx_Enregist_Click()
Dim FullName$, FirstName$, LastName$, CodeT, TempsTravail
On Error GoTo NonTrouvé
'On identifie FullName
    FullName = Me.Lbx_Enregist.Value
'On extrait le Nom de famille avant l'espace
    LastName = Séparation(FullName, 1)
'On extrait le Prénom
    FirstName = Séparation(FullName, 0)
' 'On affiche les résultats dans des TextBoxs
    With Sheets("Imp_Pointage")
        Ligne = .Application.Match(FullName, [B:B], 0)  ' N° de ligne
        Me.TextBox1.Value = Séparation(FullName, 1)     ' Nom
        Me.TextBox2.Value = Séparation(FullName, 0)     ' Prénom
        Me.TextBox3.Value = .Cells(Ligne, "A")          ' Code
        Me.TextBox5.Value = .Cells(Ligne, "G")          ' Tps travail
    End With
Application.ScreenUpdating = False
Exit Sub
NonTrouvé:
    MsgBox " Les nom et prénoms " & FullName & " n'ont pas été trouvés."
End Sub

Non testé je n'ai pas compris le fonctionnement de vos userforms.
Merci pour votre aide.
Les données sont dans la feuille "Liste_agents". Mais je devrais pouvoir me débrouiller
Encore mille mercis
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Retour