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

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.
 

TooFatBoy

XLDnaute Barbatruc
Je vais regarder demain pour ajouter une colonne, mais je crois que cela risque d'affecter d'autres codes.
Remplacer les éventuelles espaces 32 par des espaces 160 serait sûrement beaucoup plus simple au niveau des modifications (quasiment aucune). ;)


Explication :

Au moment de la validation de la saisie du nom, je suppose que c'est la que tu passes le nom en majuscules, donc tu ajoutes une ligne dans laquelle tu REPLACE les éventuelles espaces 32 par des espaces 160.

Au moment de la validation de la saisie du prénom, je suppose que c'est la que tu passes l'initiale du prénom en majuscules et le reste en minuscules, donc tu ajoutes une ligne dans laquelle tu REPLACE les éventuelles espaces 32 par des espaces 160.

Ensuite quand tu écris le nom et le prénom dans ton TS, je suppose que tu concatènes le nom, une espace 32, et le prénom, donc là tu ne changes rien.

Pour retrouver le nom et le prénom, il suffit de splitter au niveau de la seule espace 32.
Et le tour est joué. ;)


Verstanden ? 🥸


ps : 32 et 160 sont les codes ASCII des deux caractères.
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Avec le remplacement des espaces 32 par des espaces 160, normalement tu n'as que les trois macros suivantes à modifier, tu n'as plus besoin de la macro Séparation, et ça marche à tous les coups. ;)

VB:
Private Sub TextBox1_Change()
' Validation de la saisie du nom

    Me.TextBox1.Text = Replace(UCase(Me.TextBox1), Chr(32), Chr(160))

End Sub

VB:
Private Sub TextBox2_Change()
' Validation de la saisie du prénom

    Me.TextBox2.Text = Replace(WorksheetFunction.Proper(Me.TextBox2.Value), Chr(32), Chr(160))

End Sub

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)
    LastName = Split(FullName, Chr(32))(0)

    ' On extrait le prénom après l'espace
'    FirstName = Séparation(FullName, 0)
    FirstName = Split(FullName, Chr(32))(1)

    ' 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 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

End Sub
 
Dernière édition:

dysorthographie

XLDnaute Accro
Bonsoir,
Ce code VBA permet de diviser une chaîne de texte contenant un nom complet en un prénom et un nom de famille. Il utilise une structure personnalisée (NpN) pour stocker ces deux éléments. La fonction DiviseNpN détermine si elle doit retourner le prénom ou le nom en se basant sur des données stockées dans un fichier Excel, identifiant ainsi les prénoms et les particules. La séparation est effectuée par la fonction CynderNomPn, qui gère les particules et vérifie les prénoms à l'aide de requêtes.
 

Pièces jointes

  • Prénom.zip
    496.2 KB · Affichages: 3

NONO14

XLDnaute Impliqué
Bonsoir,
Ce code VBA permet de diviser une chaîne de texte contenant un nom complet en un prénom et un nom de famille. Il utilise une structure personnalisée (NpN) pour stocker ces deux éléments. La fonction DiviseNpN détermine si elle doit retourner le prénom ou le nom en se basant sur des données stockées dans un fichier Excel, identifiant ainsi les prénoms et les particules. La séparation est effectuée par la fonction CynderNomPn, qui gère les particules et vérifie les prénoms à l'aide de requêtes.
Bonjour dysorthographie,
Merci pour votre participation et cet exemple. N'est-ce pas trop de code pour ma petite application ?
Cependant j'apprécie le travail que vous avez réalisé.
je vais tester la proposition de TootFatBoy et je verrais cque cela donne.
Encore merci pour votre participation
 

NONO14

XLDnaute Impliqué
Avec le remplacement des espaces 32 par des espaces 160, normalement tu n'as que les trois macros suivantes à modifier, tu n'as plus besoin de la macro Séparation, et ça marche à tous les coups. ;)

VB:
Private Sub TextBox1_Change()
' Validation de la saisie du nom

    Me.TextBox1.Text = Replace(UCase(Me.TextBox1), Chr(32), Chr(160))

End Sub

VB:
Private Sub TextBox2_Change()
' Validation de la saisie du prénom

    Me.TextBox2.Text = Replace(WorksheetFunction.Proper(Me.TextBox2.Value), Chr(32), Chr(160))

End Sub

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)
    LastName = Split(FullName, Chr(32))(0)

    ' On extrait le prénom après l'espace
'    FirstName = Séparation(FullName, 0)
    FirstName = Split(FullName, Chr(32))(1)

    ' 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 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

End Sub
Bonjour TootFatBoy,
J'ai recopié ton code et fais les modifications nécessaires, mais j'ai une incompatibilité de type au niveau du code et du temps de travail.
 

Pièces jointes

  • PointHeure15b.xlsm
    818.4 KB · Affichages: 2

TooFatBoy

XLDnaute Barbatruc
J'ai mis le code en place en remplaçant la colonne des Noms et Prénom qui est en C c'est tout et bien sûr les TextBox avec Replace.
Désolé, je ne comprends pas. 😞

Comme dit en #54, tu as juste à mettre les trois macros de #49 à la place des trois macros déjà présentes dans ton classeur.

Sauf si je me suis trompé cette nuit, je n'ai normalement modifié que le nom et le prénom, donc il ne devrait y avoir aucune incidence sur le reste.
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
315 059
Messages
2 115 818
Membres
112 553
dernier inscrit
carlos33