Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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 sylvanu
Oui je viens bien le problème.
Merci toutefois pour votre réponse
 
Si votre base de données n'est pas trop grande, il vous suffit de vérifier que les noms sont toujours en premier et qu'il n'y a aucun espace dans les prénoms composés.
Dans ce cas ça marche avec ma fonction.
 
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
 
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
 
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.
 
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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…