Bonjour à tous,
Je débute en VBA et j'essaie de créer un classeur Excel ayant pour but de gérer une base de données RH (ressources humaines).
Les différents renseignements sont dans un onglet de mon fichier Excel "Base de données".
J'utilise un userform me permettant de modifier les enregistrements de la base de données (qui ne peut pas être modifiée en directe).
Le fonctionnement est le suivant :
Dans un premier temps, j'utilise une listbox dans l'userform pour que l'on puisse choisir le profil de la personne que l'on souhaite modifier.
Lorsque l'on clique sur une ligne de la listbox, les champs de mon userform sont alimentés automatiquement par les données de la personne recherchée situées dans l'onglet excel "Base de données".
Ensuite, on a alors la possibilité de modifier le contenu des champs de l'userform (nom, prénom, etc.) et de cliquer sur un bouton de commande "valider" pour que mon onglet "Base de données" sur Excel se mette à jour avec les données de l'userform modifiées.
Cependant, lorsque que je clique pour la première fois sur le bouton "valider", ma macro ne marche pas (à l'exception du msgbox qui lui s'affiche bien) : ma base de données ne se met pas à jour et je perds mes modifications saisies dans l'userform. Je suis obligé de refaire la manipulation une deuxième fois en gardant l'userform ouvert pour que cela fonctionne. Cela marche également toutes les fois suivantes du moment que mon userform reste ouvert.
J'ai beau cherché, je ne trouve pas l'explication. Je pense que c'est lié à la listbox car je n'avais pas ce "bug" avant de l'intégrer.
Pouvez-vous m'aider ?
Merci d'avance
Le code qui me permet d'alimenter mon userform selon la sélection sur la listbox :
Le code associé à mon bouton de commande "Valider" :
Je débute en VBA et j'essaie de créer un classeur Excel ayant pour but de gérer une base de données RH (ressources humaines).
Les différents renseignements sont dans un onglet de mon fichier Excel "Base de données".
J'utilise un userform me permettant de modifier les enregistrements de la base de données (qui ne peut pas être modifiée en directe).
Le fonctionnement est le suivant :
Dans un premier temps, j'utilise une listbox dans l'userform pour que l'on puisse choisir le profil de la personne que l'on souhaite modifier.
Lorsque l'on clique sur une ligne de la listbox, les champs de mon userform sont alimentés automatiquement par les données de la personne recherchée situées dans l'onglet excel "Base de données".
Ensuite, on a alors la possibilité de modifier le contenu des champs de l'userform (nom, prénom, etc.) et de cliquer sur un bouton de commande "valider" pour que mon onglet "Base de données" sur Excel se mette à jour avec les données de l'userform modifiées.
Cependant, lorsque que je clique pour la première fois sur le bouton "valider", ma macro ne marche pas (à l'exception du msgbox qui lui s'affiche bien) : ma base de données ne se met pas à jour et je perds mes modifications saisies dans l'userform. Je suis obligé de refaire la manipulation une deuxième fois en gardant l'userform ouvert pour que cela fonctionne. Cela marche également toutes les fois suivantes du moment que mon userform reste ouvert.
J'ai beau cherché, je ne trouve pas l'explication. Je pense que c'est lié à la listbox car je n'avais pas ce "bug" avant de l'intégrer.
Pouvez-vous m'aider ?
Merci d'avance
Le code qui me permet d'alimenter mon userform selon la sélection sur la listbox :
VB:
Private Sub Listbox_Click()
Dim LigneBDD As Integer
LigneBDD = Me.Listbox.ListIndex + 3 'Cherche le numéro de ligne correspondant dans l'onglet excel (+3 car 3 lignes en entêtes de colonnes)
'récupération des informations de la BDD pour remplir le formulaire
Sheets("Base de données").Activate
Cells(LigneBDD, 1).Select
FormulaireModif.Txtmatricule1 = Cells(LigneBDD, 1)
FormulaireModif.TxtNom = Cells(LigneBDD, 2) 'nom
FormulaireModif.TxtPrénom = Cells(LigneBDD, 3) 'prénom
FormulaireModif.CBXGenre = Cells(LigneBDD, 4) 'genre
FormulaireModif.TxtDateNaissance = Cells(LigneBDD, 5) 'date de naissance
FormulaireModif.TxtAdresse = Cells(LigneBDD, 6) ' adresse
FormulaireModif.CBXVille = Cells(LigneBDD, 7) 'ville
FormulaireModif.TxtMail = Cells(LigneBDD, 8) 'mail
FormulaireModif.TxtTel = Cells(LigneBDD, 9) 'téléphone
FormulaireModif.CBXDiplôme = Cells(LigneBDD, 10) 'diplôme
FormulaireModif.CBXSitupro = Cells(LigneBDD, 11) 'situation professionnelle
End Sub
Le code associé à mon bouton de commande "Valider" :
VB:
Private Sub Btnvalider1_Click()
Sheets("Base de données").Activate
'Affectation des valeurs du formulaire'
ActiveCell.Value = Me.Txtmatricule1.Value 'Matricule
ActiveCell.Offset(0, 1).Value = Me.TxtNom.Value 'nom
ActiveCell.Offset(0, 2).Value = Me.TxtPrénom.Value 'Prénom
ActiveCell.Offset(0, 3).Value = Me.CBXGenre.Value 'Genre
ActiveCell.Offset(0, 4).Value = CDate(TxtDateNaissance.Value) 'date de naissance
ActiveCell.Offset(0, 5).Value = Me.TxtAdresse.Value 'adresse
ActiveCell.Offset(0, 6).Value = Me.CBXVille.Value 'ville
ActiveCell.Offset(0, 7).Value = Me.TxtMail.Value 'mail
ActiveCell.Offset(0, 8).Value = Me.TxtTel.Value 'Téléphone
ActiveCell.Offset(0, 9).Value = Me.CBXDiplôme.Value 'Diplôme
ActiveCell.Offset(0, 10).Value = Me.CBXSitupro.Value 'Situation professionnelle
MsgBox "La modification a bien été effectuée.", VB
End Sub