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

NONO14

XLDnaute Occasionnel
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.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
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

  • Classeur1.xlsm
    15.6 KB · Affichages: 2
Dernière édition:

NONO14

XLDnaute Occasionnel
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
 

NONO14

XLDnaute Occasionnel
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
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
:)
Ca ne marche pas mieux.
Il suffit que le nom ait deux mots pour que ça plante :
FullName = "Dupont d'Isigny Marie Thérèse"
donnera :
1727785121271.png

donc pas mieux... mais en plus compliqué.:)
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
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.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
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
 

NONO14

XLDnaute Occasionnel
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

  • PointHeure15b.xlsm
    816.7 KB · Affichages: 7

sylvanu

XLDnaute Barbatruc
Supporter XLD
@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.
 

NONO14

XLDnaute Occasionnel
@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
 

Discussions similaires

Statistiques des forums

Discussions
314 143
Messages
2 106 309
Membres
109 557
dernier inscrit
darrepac