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

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.
 

NONO14

XLDnaute Impliqué
je regarde et je reviens
Merci beaucoup, ça fonctionne. Par contre, lorsque je modifie un Nom, il me créé le Nom modifié au lieu d'écraser celui que je suis entrain de modifier. Mais bon c'est normal puisque la programmation n'a pas été faite dans ce sens. Je vais m'y atteler.
Encore merci pour ton aide et à toutes celles et ceux qui ont participé à cette discussion.
 

NONO14

XLDnaute Impliqué
Bon j'ai créé un bouton modifié dans lequel j'ai inséré ce code qui me permet de modifier la ligne cliquée dans la ListBox, elle remplace bien les données existantes. Par contre, si je modifie le Nom, ça me créé un nouveau code, et ça il ne le faut pas... Que dois-je ajouter pour que cela ne se produise pas ? Ce qu'il fait est logique puisque la TextBox1 change, y-a-t 'il une parade à cela ? En fait, il faudrait annuler l'action du TextBox_Change si la TextBox n'est pas vidée. Je vois le principe, mais je ne sais pas l'écrire.
Je vais chercher un peu dans les tutos, il doit bien y avoir quelque chose là-dessus.
Merci par avance pour votre aide

VB:
Private Sub But_Modifier_Click()
Application.ScreenUpdating = False

    ind = Me.Lbx_Enregist.ListIndex + 1
    
    DeProtege ("Liste_agents")

    With Sheets("Liste_agents").ListObjects("t_Noms")
        .DataBodyRange(ind, 2) = Me.TextBox1.Value & " " & Me.TextBox2.Value
        .DataBodyRange(ind, 3) = Application.Text(Me.TextBox5, "[h]:mm")
    End With
  
    LoadLBx2 Me.Lbx_Enregist, Sheets("Liste_agents").ListObjects("t_Noms")
    
    Protege ("Liste_agents")

End Sub
 

NONO14

XLDnaute Impliqué
J'ai trouvé la solution, elle était toute bête.
J'ai ajouté une condition dans le code suivant de TextBox_Exit - Si la TextBox est différent de vide alors on sort de la procédure.

Code:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Application.ScreenUpdating = False

If Me.TextBox1.Text <> "" Then Exit Sub

    With Me.TextBox3
        .Value = Left(Me.TextBox1, 3) & GenerateCode(1, 4)
        .SelStart = 100
    End With
       
    With Me.TextBox4
        .Value = CreatePassWord(5, 2)
        .SelStart = 100
    End With
   
End Sub
 

NONO14

XLDnaute Impliqué
Re
Je pense qu'il sera plus facile de gérer cela ainsi .
Mais bon ! A toi de voir.
Tu nous dis
Jean marie
J'ai regardé, mais il y aurait beaucoup de travail, c'est faisable, mais je devrais reprendre beaucoup de codes.
Peut-être vais-je en arriver là car il y a de nouvelles demandes, cependant je vais voir si cela est réalisable selon mes compétences. Il y a des demandes que je sais par avance non recevables. Je sais également que je dois changer la présentation de la page "Saisie", pas les codes par eux-mêmes, juste la présentation. On doit en reparler en réunion...Encore des palabres.
Je reviens très vite vous dire ce qu'il en est.
 

NONO14

XLDnaute Impliqué
Eh bien non ça ne fonctionne pas correctement car si je vide ma TextBox pour créer un(e) employé(e), le code n'est pas généré. Je vais trouver....
 

TooFatBoy

XLDnaute Barbatruc
Eh bien non ça ne fonctionne pas correctement car si je vide ma TextBox pour créer un(e) employé(e), le code n'est pas généré.
Je pense que, vu que le cahier des charges était inexistant au départ du projet et qu'en plus de cela ledit cahier ne cesse de changer, tu ajoutes des verrues un peu partout pour que chaque petit bout fonctionne, alors qu'il aurait fallu avoir une vue d'ensemble du projet pour que chaque partie s'emboîte facilement avec les autres.
 

NONO14

XLDnaute Impliqué
Je suis d'accord. C'est pourquoi je vais tout remettre à plat et en finir une bonne fois pour toutes avec tous ces changements de dernières minutes, changement qui vous font perdre votre temps à tous mais également à moi aussi.
Je reviens très vite
Vraiment désolé pour la façon dont les choses se déroulent. Que je n'aimerai pas être chef avec des lubies comme les siennes.
 

NONO14

XLDnaute Impliqué
Je pense avoir trouvé la solution en empêchant la TextBox3, celle du code, de changer si elle n'est pas vide et comme en cliquant sur une ligne de la ListBox on rapatrie également le code, de ce fait la TextBox3 n'est pas vide.

VB:
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Application.ScreenUpdating = False

If Me.TextBox3.Value <> "" Then Exit Sub
    
    With Me.TextBox3
        .Value = Left(Me.TextBox1, 3) & GenerateCode(1, 4)
        .SelStart = 100
    End With
        
    With Me.TextBox4
        .Value = CreatePassWord(5, 2)
        .SelStart = 100
    End With
    
End Sub
 

ChTi160

XLDnaute Barbatruc
Bonjour le Fil ,

Dans cette procédure (après avoir crée une colonne Prénom)
VB:
With Sheets("Liste_agents").ListObjects("t_Noms")
        .DataBodyRange(ind, 2) = Me.TextBox1.Value & " " & Me.TextBox2.Value
        .DataBodyRange(ind, 3) = Application.Text(Me.TextBox5, "[h]:mm")
End With
'deviendrait
With Sheets("Liste_agents").ListObjects("t_Noms")
        .DataBodyRange(ind, 2) = Me.TextBox1.Value
        .DataBodyrange(ind, 3) = Me.TextBox2.Value
        .DataBodyRange(ind, 4) = Application.Text(Me.TextBox5, "[h]:mm")
End With
Bonne Journée
Jean marie
 

TooFatBoy

XLDnaute Barbatruc
lorsque je modifie un Nom, il me crée le Nom modifié au lieu d'écraser celui que je suis entrain de modifier. Mais bon c'est normal puisque la programmation n'a pas été faite dans ce sens. Je vais m'y atteler.

Ou alors, quand tu cliques sur une ligne de la liste de droite, tu récupères les données et tu mémorises le numéro de la ligne cliquée (soit dans une variable en mémoire, soit dans une TextBox masquée). Ainsi, si tu as un numéro de ligne c'est que tu es en train de modifier un employé donc tu n'appelles pas la macro de création de code, et si tu n'as pas de numéro de ligne alors tu l'appelles.
 

ChTi160

XLDnaute Barbatruc
Bonjour le fil,
Tu peux aussi récupérer les données de ton tableau structuré dans un tableau temporaire.
Et alimenter ton Combobox des codes via une boucle .
tu pourras récupérer le numéro de la ligne qui aura été placé dans une colonne (10 colonnes du tableau structure , plus une pour le numéro de ligne)
Jean marie
 

dysorthographie

XLDnaute Accro
Bonjour,
Je peux comprendre que tu cherches à cinder nom prénom au moment du changement de ton textbox par Les données excel. Mais sur le changement de valeur Vu que tu as 2 textbox je comprends pas surtout si au final tu les concaténes pour les remettre dans la même celle

Je dirais qu'est-ce que ça peut faire ? Le résultat au final sera le même ?

Tu passes peut être beaucoup trop de temps sur ce sujet. Il me semble, mais c'est un avis personnel, qu'il serait mieux utiliser si tu concacrai ce temps à recaler toute ton application.

C'est juste un point de vue personnel, car je ne metrise pas la teneur du chantier ni le caractère d'urgence de livraison de l'application.

C'est pour cela que personnellement je ferai l'impasse sur le textchange.

Tu ne pourras pas gérer tous les cas de figure, si l'utilisateur saisie le prénom, nom dans les textbox prévu à nom, prénom
 
Dernière édition:

Discussions similaires

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