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

  • 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,
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

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
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.
 
Bonjour TooFatBoy
Je regarde le fichier et je reviens. Merci par avance
 
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.
 
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.
 
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 😉
 
Les "cases à cocher" sont bien les CheckBox et les "boutons radio" les OptionButton ?
 
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.
 
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.
 
- 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

Réponses
10
Affichages
412
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
787
Réponses
3
Affichages
225
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…