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

51test5.zip (59.79 Ko)

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 Sub

Bonjour

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

Rechercher des sujets similaires à "textbox probleme modification valeur"