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 !
Lorsque je sélectionne le Genre (Homme; Femme) au niveau de la page Inscription du UserForm1 et j'exécute le bouton Ajouter, l'élément sélectionné se positionne et décale les autres informations à la ligne suivante. Voir fichier ci-jointe.
Premier point qui me chagrine un peu: Pourquoi utilisez-vous des "Function" là où manifestement il s'agit de "Sub"?
Une "Function" en général retourne une valeur utilisable par la procédure appelante. La valeur retournée est 'référencée' par la function elle-même. Une "Sub" est une procédure qui effectue un certain nombre d'actions soit en interne VBA et/ou en relation avec Excel (Tri, affectation, etc.). Aucune valeur n'est rattachée à la procédure elle-même.
Avec les "Functions", certaines interactions avec Excel sont interdites ce qui n'est pas le cas avec les procédures "Sub".
Utiliser une "Function" ou une "Sub" dénote qu'on a bien analysé le problème qu'on veut résoudre.
Concernant votre problème, voici la procédure utilisée (notez que j'ai remplacé Function par Sub)
VB:
Sub CopyOptionButtonValues_GENRE()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("INSCRIPTION")
If OptionButton1.Value Then
ws.Cells(ws.Rows.Count, "E").End(xlUp).Offset(1 - 1, 0).Value = OptionButton1.Caption
ElseIf OptionButton2.Value Then
ws.Cells(ws.Rows.Count, "E").End(xlUp).Offset(1 - 1, 0).Value = OptionButton2.Caption
Else
MsgBox "Veuillez sélectionner une option avant de continuer.", vbExclamation
End If
End Function
Vous ajoutez la nouvelle valeur du genre au tableau structuré T_INSCRIPTION via l'instruction :
ws.Cells(ws.Rows.Count, "E").End(xlUp).Offset(1 - 1, 0).Value = Optio...
ws.Cells(ws.Rows.Count, "E").End(xlUp) désigne toujours la dernière cellule du tableau structuré (sauf s'il est vide).
Ensuite vous "déplacez" la référence avec Offset(1 - 1, 0) soit Offset(0,0) donc la référence est inchangée (translation de 0 ligne et 0 colonne). En conséquence, vous inscrivez le genre toujours dans la dernière ligne existante du tableau des inscriptions.
En général, pour ajouter un élément dans une base :
on effectue les vérifications de toutes les données à ajouter
on vérifie que le nouvel inscrit n'est pas déjà présent dans la base (si oui on le signale avant de quitter la création)
si c'est bien une nouvelle inscription, on ajoute une ligne dans le tableau structuré (via les instructions relatives aux TS) et on mémorise la localisation de cette ligne nouvellement insérée
puis on ajoute les données dans cette nouvelle ligne et on informe l'utilisateur du succès de l'ajout
on reconstruit la nouvelle Liste sur le userform1
le cas échéant, on réaffiche le nouvel inscrit (ou non)
Remarque : quand on ajoute une ligne, on mémorise en général cette ligne pour les insertions supplémentaires des données indiquées dans le userform1.
nota : attention, les "listview" ne sont guère utilisables suivant la version d'Excel utilisée. Préférez les ComboBox ou ListBox qui sont universelles (avis personnel)
Attention je ne vais pas avoir le temps de vous suivre sur la durée.
Je vous invite à reformuler pour être plus claire et montrer par une capture d'écran le dysfonctionnement et dire clairement ce que vous souhaitez obtenir
Dans le Userform1, deux onglets: Poste et Enregistrement, donc vous vouliez dire Enregistrement et non Inscription, l'appui sur le bouton Ajouter exécute le code de Command8_Click
Le TextBox8 est le champ sous le libellé "Code ENG"
Que veut dire : "l'élément sélectionné se positionne "?.
Lorsqu'on regarde l'onglet "INSCRIPTION" les données "GENRE" de la colonne E, sont inscrites sous la ligne du CODE_ENG, comme si les données étaient écrites sur deux lignes alors qu'à la base elles devraient être écrites que sur une ligne unique (c'est ce que je pense).
Je me trompe peut-être : Peut -être faut t'il remettre les données de la feuille INSCRIPTION en cohérence avec ce que vous voulez obtenir?
Un conseil (simplification du code possible) pour l'utilisation des CheckBox sur le UserForm1, l'utilisation du champ GroupName à "Genre" par exemple permettrait lorsqu'on clique sur Homme que Femme soit désélectionné et inversement.
Je joins à tout hasard mon modèle de consultation et mise à jour d'un tableau comportant à peu près ces informations
Vous verrez c'est bien plus simple dans l'Userform d'application. La programmation de service, c'est autre chose évidemment, mais elle sensée ne jamais nécessiter aucune maintenance, et s'il en fallait quand même une, je l'assumerait personnellement.
Bonjour.
Intervertissez peut être ces deux instructions
Parce que la 1ère renseigne la dernière ligne en E et la seconde renseigne la ligne qui suit la dernière
Attention je ne vais pas avoir le temps de vous suivre sur la durée.
Je vous invite à reformuler pour être plus claire et montrer par une capture d'écran le dysfonctionnement et dire clairement ce que vous souhaitez obtenir
Dans le Userform1, deux onglets: Poste et Enregistrement, donc vous vouliez dire Enregistrement et non Inscription, l'appui sur le bouton Ajouter exécute le code de Command8_Click
Le TextBox8 est le champ sous le libellé "Code ENG"
Que veut dire : "l'élément sélectionné se positionne "?.
Lorsqu'on regarde l'onglet "INSCRIPTION" les données "GENRE" de la colonne E, sont inscrites sous la ligne du CODE_ENG, comme si les données étaient écrites sur deux lignes alors qu'à la base elles devraient être écrites que sur une ligne unique (c'est ce que je pense).
Je me trompe peut-être : Peut -être faut t'il remettre les données de la feuille INSCRIPTION en cohérence avec ce que vous voulez obtenir?
Un conseil (simplification du code possible) pour l'utilisation des CheckBox sur le UserForm1, l'utilisation du champ GroupName à "Genre" par exemple permettrait lorsqu'on clique sur Homme que Femme soit désélectionné et inverseRegarde la pièce jointe 1229321ment.
Merci pour votre apport. C'était vraiment Enregistrement et non inscription. En plus, je ne maîtrise pas les code VBA. C'est uniquement la structuration des tableaux Excel avec ses fonctions que je maîtrise mais mon projet necéssite le VBA.
Premier point qui me chagrine un peu: Pourquoi utilisez-vous des "Function" là où manifestement il s'agit de "Sub"?
Une "Function" en général retourne une valeur utilisable par la procédure appelante. La valeur retournée est 'référencée' par la function elle-même. Une "Sub" est une procédure qui effectue un certain nombre d'actions soit en interne VBA et/ou en relation avec Excel (Tri, affectation, etc.). Aucune valeur n'est rattachée à la procédure elle-même.
Avec les "Functions", certaines interactions avec Excel sont interdites ce qui n'est pas le cas avec les procédures "Sub".
Utiliser une "Function" ou une "Sub" dénote qu'on a bien analysé le problème qu'on veut résoudre.
Concernant votre problème, voici la procédure utilisée (notez que j'ai remplacé Function par Sub)
VB:
Sub CopyOptionButtonValues_GENRE()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("INSCRIPTION")
If OptionButton1.Value Then
ws.Cells(ws.Rows.Count, "E").End(xlUp).Offset(1 - 1, 0).Value = OptionButton1.Caption
ElseIf OptionButton2.Value Then
ws.Cells(ws.Rows.Count, "E").End(xlUp).Offset(1 - 1, 0).Value = OptionButton2.Caption
Else
MsgBox "Veuillez sélectionner une option avant de continuer.", vbExclamation
End If
End Function
Vous ajoutez la nouvelle valeur du genre au tableau structuré T_INSCRIPTION via l'instruction :
ws.Cells(ws.Rows.Count, "E").End(xlUp).Offset(1 - 1, 0).Value = Optio...
ws.Cells(ws.Rows.Count, "E").End(xlUp) désigne toujours la dernière cellule du tableau structuré (sauf s'il est vide).
Ensuite vous "déplacez" la référence avec Offset(1 - 1, 0) soit Offset(0,0) donc la référence est inchangée (translation de 0 ligne et 0 colonne). En conséquence, vous inscrivez le genre toujours dans la dernière ligne existante du tableau des inscriptions.
En général, pour ajouter un élément dans une base :
on effectue les vérifications de toutes les données à ajouter
on vérifie que le nouvel inscrit n'est pas déjà présent dans la base (si oui on le signale avant de quitter la création)
si c'est bien une nouvelle inscription, on ajoute une ligne dans le tableau structuré (via les instructions relatives aux TS) et on mémorise la localisation de cette ligne nouvellement insérée
puis on ajoute les données dans cette nouvelle ligne et on informe l'utilisateur du succès de l'ajout
on reconstruit la nouvelle Liste sur le userform1
le cas échéant, on réaffiche le nouvel inscrit (ou non)
Remarque : quand on ajoute une ligne, on mémorise en général cette ligne pour les insertions supplémentaires des données indiquées dans le userform1.
nota : attention, les "listview" ne sont guère utilisables suivant la version d'Excel utilisée. Préférez les ComboBox ou ListBox qui sont universelles (avis personnel)
- 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