TEXTBOX probleme de modification d'une valeur
Bonjour à tous,
je me permet de vous poser une question car je seche
j'ai crée un userform qui recupere via des text box des valeurs presente dans une feuille.
Ces textbox sont proteges lors de la recuperation en ecriture
Je souhaite à l'aide d'un bouton de commande passer en mode modification et par la suite récupérer ces valeurs.
j'ai donc ajouté les codes suivants :
Private Sub ComdModifier_Click()
Dim numLigneVide As Integer
Dim DateNaissance As String
Dim DateNaiJour As String
'on demande une confirmation pour la modification
If MsgBox("Voulez vous modifier les données d'un licencié ?", vbYesNo + vbQuestion + vbDefaultButton2, "Demande de confirmation") = vbYes Then
'on valide la modification possible des boites de saisie
TxtNom.Enabled = True
TxtPrenom.Enabled = True
TxtDatNaiJour.Enabled = True
TxtDatNaiMois.Enabled = True
TxtDatNaiAnn.Enabled = True
ListeSexe.Enabled = True
ListeNatio.Enabled = True
TxtAdresseNumRue.Enabled = True
TxtAdresseRue.Enabled = True
TxtAdresseCP.Enabled = True
TxtAdresseVille.Enabled = True
TxtMail.Enabled = True
Txt1TelFixe.Enabled = True
Txt2TelFixe.Enabled = True
Txt3TelFixe.Enabled = True
Txt4TelFixe.Enabled = True
Txt5TelFixe.Enabled = True
Txt1TelPort.Enabled = True
Txt2TelPort.Enabled = True
Txt3TelPort.Enabled = True
Txt4TelPort.Enabled = True
Txt5TelPort.Enabled = True
TxtNumeroLicense.Enabled = True
ListeCat.Enabled = True
'on affiche le bouton "Valider"
ComdValider.Visible = True
'on cache le bouton "Fermer"
ComdFermer.Visible = False
End If
Cette routine permet de valider toutes les texbox en modification et affiche le bouton de commande "valider" qui me permet par la suite de finaliser l'étape de modification
J'ai donc crée la routine " valider" suivante
Private Sub ComdValider_Click()
'on demande une confirmation pour la validation
If MsgBox("Voules vous sauvegarder vos modifications ?", vbYesNo + vbQuestion + vbDefaultButton2, "Demande de confirmation") = vbYes Then
'On active la feuille "liste"
Worksheets("liste").Activate
'On vérifie que les champ obligatoire sont bien remplis
If TxtNom.Text = "" Then
MsgBox "Veuillez remplir le Nom du licencié", vbCritical, "Champs manquant"
TxtNom.SetFocus
ElseIf TxtPrenom.Text = "" Then
MsgBox "Veuillez remplir le Prénom du licencié", vbCritical, "Champs manquant"
TxtPrenom.SetFocus
ElseIf TxtDatNaiJour.Text > "31" Then
MsgBox "Le jour de naissance n'est pas correct", vbCritical, "Champs manquant"
TxtDatNaiJour.SetFocus
ElseIf TxtDatNaiMois.Text > "12" Then
MsgBox "Le mois de naissance n'est pas correct", vbCritical, "Champs manquant"
TxtDatNaiMois.SetFocus
ElseIf TxtDatNaiAnn.Text > "2100" Then
MsgBox "L'année de naissance n'est pas correcte", vbCritical, "Champs manquant"
TxtDatNaiAnn.SetFocus
ElseIf TxtDatNaiAnn.Text < "1913" Then
MsgBox "L'année de naissance n'est pas correcte", vbCritical, "Champs manquant"
TxtDatNaiAnn.SetFocus
Else
'MsgBox (NumLigneRecupInfo), vbCritical, "Champs manquant"
'On remplit les données
'on passe les données en majuscule
TxtNom.Text = UCase(TxtNom.Text)
ActiveSheet.Cells(NumLigneRecupInfo, 2) = TxtNom.Text
MsgBox (TxtNom.Value), vbCritical, "Champs manquant"
'on passe les données en majuscule
TxtPrenom.Text = UCase(TxtPrenom.Text)
MsgBox (TxtPrenom), vbCritical, "Champs manquant"
ActiveSheet.Cells(NumLigneRecupInfo, 3) = TxtPrenom.Text
'MsgBox (TxtPrenom), vbCritical, "Champs manquant"
'On reformule la date / au 3 champs de saisie
ActiveSheet.Cells(NumLigneRecupInfo, 4) = TxtDatNaiJour & "/" & TxtDatNaiMois & "/" & TxtDatNaiAnn
ActiveSheet.Cells(NumLigneRecupInfo, 7) = ListeSexe.Text
ActiveSheet.Cells(NumLigneRecupInfo, 8) = ListeNatio.Text
ActiveSheet.Cells(NumLigneRecupInfo, 9) = TxtAdresseNumRue.Text
TxtAdresseRue.Text = UCase(TxtAdresseRue.Text)
ActiveSheet.Cells(NumLigneRecupInfo, 10) = TxtAdresseRue.Text
TxtAdresseCP.Text = UCase(TxtAdresseCP.Text)
ActiveSheet.Cells(NumLigneRecupInfo, 11) = TxtAdresseCP.Text
TxtAdresseVille.Text = UCase(TxtAdresseVille.Text)
ActiveSheet.Cells(NumLigneRecupInfo, 12) = TxtAdresseVille.Text
ActiveSheet.Cells(NumLigneRecupInfo, 13) = TxtMail.Text
ActiveSheet.Cells(NumLigneRecupInfo, 14) = Txt1TelFixe & "-" & Txt2TelFixe & "-" & Txt3TelFixe & "-" & Txt4TelFixe & "-" & Txt5TelFixe
ActiveSheet.Cells(NumLigneRecupInfo, 15) = Txt1TelPort & "-" & Txt2TelPort & "-" & Txt3TelPort & "-" & Txt4TelPort & "-" & Txt5TelPort
ActiveSheet.Cells(NumLigneRecupInfo, 16) = TxtNumeroLicense.Text
ActiveSheet.Cells(NumLigneRecupInfo, 17) = ListeCat.Text
'On efface le formulaire
'TxtNom.Text = ""
'TxtPrenom.Text = ""
'TxtDatNaiJour.Text = ""
'TxtDatNaiMois.Text = ""
'TxtDatNaiAnn.Text = ""
'ListeSexe.Text = ""
'ListeNatio.Text = ""
'TxtNumeroLicense.Text = ""
'TxtAdresseNumRue.Text = ""
'TxtAdresseRue.Text = ""
'TxtAdresseCP.Text = ""
'TxtAdresseVille.Text = ""
'TxtMail.Text = ""
'Txt1TelFixe.Text = ""
'Txt2TelFixe.Text = ""
'Txt3TelFixe.Text = ""
'Txt4TelFixe.Text = ""
'Txt5TelFixe.Text = ""
'Txt1TelPort.Text = ""
'Txt2TelPort.Text = ""
'Txt3TelPort.Text = ""
'Txt4TelPort.Text = ""
'Txt5TelPort.Text = ""
'ListeCat.Text = ""
'on cache le bouton "Valider"
ComdValider.Visible = False
'on affiche le bouton "Fermer"
ComdFermer.Visible = True
End If
End If
End Sub
Cela me semblait pouvoir marcher pour la récupération des données des textbox car j'ai repris cela d'une routine qui me permet de saisir les données à l'origine. La par contre je me heurte à un probleme :
Le seul champ modififié correspond à la premiere textbox qui porte le nom TxtNom et uniquement celui la. Lorsque je fais afficher les valeurs via une boite de message, je vois bien que la valeur de la Txtnom change lors de la modification au clavier, mais par la suite plus rien ...
Je n'arrive à rien !! d'ou un Help !!!!!!
Merci d'avance
Steve
Bonjour
A la place de ces trop longues macros un fichier serait préférable
Tu indiques la démarche à suivre pour refaire l'erreur
Bonjour
voici le fichier
pour provoquer l'erreur, il suffit de cliquer sur le bouton de commande dans la feuille excel, cela ouvre un userform, dans ce userform on clique sur le bouton " modifier licencié" et la un autre userform s'ouvre.
Dans ce userform on sélectionne dans la listbox un nom, cela affiche les données liées a ce nom en gris ( données non modifiables ).
Suite à cela on clique sur la bouton "modifier" qui permet de modifier les champs. A la fin des modifications, on valide les modifications en appuyant sur le bouton "valider".
La l'erreur décrite dans mon premier message apparait : il n'y a que la modification du nom qui est prise en compte, alors que j'utilise une procédure qui marche pour la creation d'une ligne de donnée ( test possible en cliquant dans le premier userform ouvert sur le bouton "nouveau licencié" ).
MErci d'avance
Steve
Bonjour
Cela vient de ton initialisation de ta ListBox, il faut éviter au maximum l'emploi de la propriété RowSource
Modifies la fin de la macro Userform_Initialize
'données source de la listjoueur
Dim J As Long
numLigneVide = ActiveSheet.Columns(2).Find("").Row
' Bn = "B" & numLigneVide
' ListJoueur.RowSource = "B4:" & Bn
For J = 4 To numLigneVide
Me.ListJoueur.AddItem Range("B" & J)
Next J
End SubBonjour
super ca marche
merci c'est genial tu me sauves
Par contre peux tu m'expliquer la difference entre les deux facons de faire car je n'ai pas saisie la nuance.
MErci d'avance
Bonjour
Une qui fout la merde pagaille et l'autre qui passe partout
La propriété RowSource crée un lien entre le contrôle et la base de données
Tu modifies un élément ce cette base (les noms) ce qui provoque la remise à jour du contrôle (ListBox) qui déclenche l'événement Click qui provoque la lecture de la ligne et qui remet en place les données qui sont dans la même ligne que le nom
En résumé
Validation --> écriture du nom --> provoque la mise à jour de la ListBox ----> Déclenchement de l'événement ListJoueur_Click ---> écriture dans les contrôles des données de la base
Peut-être (pas testé) que pour contourner ce problème ce serait d'écrire le nom en dernier
Bonjour
super j'ai compris la nuance merci pour tes réponses claires et rapides.
bon we
Steve