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

Microsoft 365 Modification impossible d'une TextBox

NONO14

XLDnaute Impliqué
Bonjour,
J'ai mis en place ces 2 codes qui permettent de la rapatrier les données d'une ListBox dans des TextBox après un clic sur une ligne et ensuite, après modification et en appuyant sur le bouton "Modifier" de remplacer les données existantes dans le TS (t_Noms) de la feuille "List_agents".
Hors, dès que je modifie une TextBox autre que le Nom, la donnée revient systématiquement après tabulation automatique à celle de la ListBox sans la modifier.
Pouvez-vous m'éclairer s'il vous plaît ? Je ne comprends pas.
Merci par avance

Code lorsque l'on clique sur une ligne de la ListBox
VB:
Private Sub Lst_Employ_Click()
'Vérifie si une ligne a été sélectionné
With Me
 With .Lst_Employ
    If .ListIndex <> -1 Then
'On récupère les valeurs de la ligne sélectionnée dans les TextBox
         Me.Txt_Nom.Value = .List(.ListIndex, 1)
         Me.Txt_Code.Value = .List(.ListIndex, 0)
         Me.Txt_Prénom.Value = .List(.ListIndex, 2)
         Me.Txt_Temps.Text = Application.Text(.List(.ListIndex, 3), "[h]:mm")
    End If
  End With
End With
End Sub

Module pour transférer les données modifiées vers le TS
Code:
Sub RemplacerTableau()
Dim Ws As Worksheet
Dim Tbl As ListObject
Dim Cell As Range
Dim CodRec As String

'On définie la feuille de calcul
    Set Ws = Sheets("Liste_agents")
    
'On définie le TS
    Set Tbl = Ws.ListObjects("t_Noms")
    
'On définie le code à rechercher
    CodRec = UfGestTemps.Txt_Code.Value

'On recherche le code dans la 1ère colonne du TS
    Set Cell = Tbl.ListColumns(1).DataBodyRange.Find(What:=CodRec, LookIn:=xlValues, LookAt:=xlWhole)

'Si le code est trouvé, on remplace les données de la ligne
    If Not Cell Is Nothing Then
        Cell.Offset(0, 1).Value = UfGestTemps.Txt_Nom.Value 'On remplace la valeur de la colonne 2
        Cell.Offset(0, 2).Value = UfGestTemps.Txt_Prénom.Value 'On remplace la valeur de la colonne 3
        Cell.Offset(0, 3).Value = UfGestTemps.Txt_Temps.Value 'On remplace la valeur de la colonne 4
    Else
        MsgBox "Code non trouvé"
    End If
End Sub
 

Pièces jointes

  • GestPersonnnel (3).xlsm
    498 KB · Affichages: 6
Solution
Une proposition modifiant le moins possible de choses (seulement 4 lignes de code à ajouter) :

- Ajouter une variable booléenne ayant pour portée le classeur.
VB:
Dim MaJ_en_cours As Boolean

- Mettre à True ladite variable au début de la macro But_ModifP1_Click et la remettre à False à la fin.
VB:
Private Sub But_ModifP1_Click()
'
    MaJ_en_cours = True
    RemplacerTableau
    MaJ_en_cours = False

End Sub

- Ajouter un test sur la valeur de ladite variable au début de la macro Lst_Employ_Click.
VB:
If MaJ_en_cours Then Exit Sub

NONO14

XLDnaute Impliqué
Bonjour laurent950
Merci pour votre aide, mais là vous m'avez perdu . Que dois-je modifier et où ?
Je ne suis pas un pro du Vba et je suis loin de tout comprendre de ses subtilités.
 

NONO14

XLDnaute Impliqué
Bonjour TooFatBoy
Je regarde le fichier et je reviens. Merci par avance
 

NONO14

XLDnaute Impliqué
Le code aléatoire, à cette étape, est déjà dans le TS, il existe donc, on le rappelle lors de la modification et on s'en sert pour retrouver la bonne ligne pour enregistrer les nouvelles données modifiées. C'est comme ça que je vois les choses, mais peut-être ai-je tort.
 

NONO14

XLDnaute Impliqué
TooFatBoy a raison. Il faut que je puisse maintenir l'application par la suite. Je comprendrai plus facilement des codes simples, bien indentés (certains comprendront). Pour le moment c'est un peu un brouillon, mais je vais arranger tout ça quand l'application sera fonctionnelle ou la partie sur laquelle je travaille terminée. Enfin, vous m'avez compris, je vais passer un coup de balai et ranger tout ça.
 

NONO14

XLDnaute Impliqué
J'ai testé ton fichier et ça fonctionne comme je le souhaitais. Merci mille fois.
Il va falloir trouver une solution pour le code agent en cas de modification du Nom. Mais ça je m'en occupe en interne. Enlever les 3 premières lettres du Nom me paraît être la bonne solution.
J'ai également remarqué que tu avais modifié la page "Accueil" en modifiant la formule, tu as été plus rapide que moi sur le coup
 

NONO14

XLDnaute Impliqué
Les "cases à cocher" sont bien les CheckBox et les "boutons radio" les OptionButton ?
 

NONO14

XLDnaute Impliqué
C'est bon, on peut enlever les lettres du Nom. Plus besoin de se casser la tête.
Le code sera donc composé des 2 derniers chiffres de l'année en cours et d'un code aléatoire.
 

NONO14

XLDnaute Impliqué
Les "cases à cocher" sont bien les CheckBox et les "boutons radio" les OptionButton ?
Pour alléger le code, on va remplacer les CheckBox par des OptionButton. J'en ai parlé au chef, et il m'a été répondu que pour la partie codification je devais me débrouiller sans toucher à la physionomie des feuilles.
J'ai en quelque sorte une petite carte blanche. Mais on ne va pas tout refaire pour autant.
Cependant, je vais devoir parcourir mes codes et autres modules pour supprimer ce qui est inutile.
 

Discussions similaires

Réponses
49
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…