Création d'un formulaire

Résolu/Fermé
Messages postés
70
Date d'inscription
vendredi 5 septembre 2014
Statut
Membre
Dernière intervention
8 mars 2016
-
Messages postés
16214
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
27 janvier 2022
-
Bonjour,


Je cherche à créer un formulaire me permettant à l'issue d'un double click sur une plage de cellule, de pouvoir remplir 4 différentes cellules disposées sur la même ligne via une liste de choix propres à chaque colonne.

Mais j'avoue qu'entre le VBA (que je maîtrise de mieux en mieux grâce à vous notamment) et l'userform (pour le coup totalement nouveau), je suis bien perdu.



Clairement je suis certain que mes mauvaises en la matière ont fait que ce que j'ai trouvé sur internet n'est pas bien écrit ou adapté. mais pour la même raison je ne comprend pas où et quoi.

Je joint ici un exemple de fichier.

http://www.cjoint.com/c/FBpmDdwfPwT

Donc en double-cliqaunt dans la feuille DATA sur les cellules category 1, 2 ou 3, on peut choisir ce que l'on va mettre dans ces cellules via le formulaire de choix.

_ Il est important que l'utilisateur ne puisse pas remplir qu'une seule catégorie mais bien les trois sinon il ne peut valider son choix.
_ Les listes de données ne dépasseront pas 40 lignes mais leur longueur peuvent varier si l'on rajoute des données.


est-ce que vous pourrez m'expliquer en détail la solution que vous voyez pour que je puisse à mon tour comprendre et apprendre?
Je vous remercie pour le temps que vous m'accorderez.

Sincèrement,


Koalacid

3 réponses

Messages postés
16551
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
26 janvier 2022
3 262
Pomper des trucs sur internet est comme tu l'écris mal adaptés ou souvent mal écrit

Je te conseille d'investir un peu de temps en étudiant ces tutos:
https://excel.developpez.com/cours/?page=prog#userform
(les 2 premiers)

ensuite quelq'un ici pourra te dépanner sur des difficultés que tu rencontrera

Dans l'attente
Messages postés
70
Date d'inscription
vendredi 5 septembre 2014
Statut
Membre
Dernière intervention
8 mars 2016
2
Yes Merci, ca m'aide beaucoup.

On va pas se mentir je fais des tonnes de test dans le vent mais petit à petit j'adapte quelque chose de plus en plus proche de ce que je veux. C'est le principal
Messages postés
16214
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
27 janvier 2022
1 580
Bonjour

Juste pour lui donner un peu de courage, fichier modifie pour choix et ecriture dans onglet DATA. Code appel UF dans VBA feuille DATA

https://www.cjoint.com/c/FBpnZgLKTzf
Messages postés
70
Date d'inscription
vendredi 5 septembre 2014
Statut
Membre
Dernière intervention
8 mars 2016
2
Bon alors le problème c'est que maintenant que je tâte un peu le terrain, je commence à avoir des idées (d'autres pourraient appeler ca des complications mais je souhaite rester optimiste).

Voilà mon nouveau problème avec ce userform.

J'aimerai qu'il se déclenche en cascade.

il fonctionne très bien entre la listbox1 et 2 mais le passage listbox2 et 3 ne va pas du tout. Il ne pompe les données que des trois premièreslistes au lieu des 16 que je lui demande de prendre en compte.

Est-ce que quelqu'un a une idée de la faute que j'ai dû faire?

Et deuxième question, est-ce qu'il est possible d'intégrer une boucle au lieu de refaire à chaque fois les 16blocs de codes s'il y a un update dans le fichier?


Voici le code en question:

La cascade 1 fonctionne très bien mais la 2 pas du tout (pourtant c'est l'adaptation de la première... :( )

' ********************** CASCADE1 *********************

' Cascade Lists 2

Private Sub ListBox1_Change()
Dim derlgn As Byte
Sheets("Lists").Select
Select Case ListBox1.ListIndex
Case Is = 0
derlgn = Range("B3").End(xlDown).Row
ListBox2.RowSource = Range(Cells(4, 2), Cells(derlgn, 2)).Address
ListBox2.ListIndex = 0
Case Is = 1
derlgn = Range("C3").End(xlDown).Row
ListBox2.RowSource = Range(Cells(4, 3), Cells(derlgn, 3)).Address
ListBox2.ListIndex = 0
Case Is = 2
derlgn = Range("D3").End(xlDown).Row
ListBox2.RowSource = Range(Cells(4, 4), Cells(derlgn, 4)).Address
ListBox2.ListIndex = 0
Case Is = 3
derlgn = Range("E3").End(xlDown).Row
ListBox2.RowSource = Range(Cells(4, 5), Cells(derlgn, 5)).Address
ListBox2.ListIndex = 0
Case Is = 4
derlgn = Range("F3").End(xlDown).Row
ListBox2.RowSource = Range(Cells(4, 6), Cells(derlgn, 6)).Address
ListBox2.ListIndex = 0
Case Is = 5
derlgn = Range("G3").End(xlDown).Row
ListBox2.RowSource = Range(Cells(4, 7), Cells(derlgn, 7)).Address
ListBox2.ListIndex = 0
Case Is = 6
derlgn = Range("H3").End(xlDown).Row
ListBox2.RowSource = Range(Cells(4, 8), Cells(derlgn, 8)).Address
ListBox2.ListIndex = 0
Case Is = 7
derlgn = Range("I3").End(xlDown).Row
ListBox2.RowSource = Range(Cells(4, 9), Cells(derlgn, 9)).Address
ListBox2.ListIndex = 0


End Select
End Sub

' ********************** CASCADE2 *********************

' Cascade Lists 3

Private Sub ListBox2_Change()
Dim derlgn As Byte
Sheets("Lists").Select
Select Case ListBox2.ListIndex

Case Is = 0
derlgn = Range("B9").End(xlDown).Row
ListBox3.RowSource = Range(Cells(10, 2), Cells(derlgn, 2)).Address
ListBox3.ListIndex = 0
Case Is = 1
derlgn = Range("C9").End(xlDown).Row
ListBox3.RowSource = Range(Cells(10, 3), Cells(derlgn, 3)).Address
ListBox3.ListIndex = 0
Case Is = 2
derlgn = Range("D9").End(xlDown).Row
ListBox3.RowSource = Range(Cells(10, 4), Cells(derlgn, 4)).Address
ListBox3.ListIndex = 0
Case Is = 3
derlgn = Range("E9").End(xlDown).Row
ListBox3.RowSource = Range(Cells(10, 5), Cells(derlgn, 5)).Address
ListBox3.ListIndex = 0
Case Is = 4
derlgn = Range("F9").End(xlDown).Row
ListBox3.RowSource = Range(Cells(10, 6), Cells(derlgn, 6)).Address
ListBox3.ListIndex = 0
Case Is = 5
derlgn = Range("G9").End(xlDown).Row
ListBox3.RowSource = Range(Cells(10, 7), Cells(derlgn, 7)).Address
ListBox3.ListIndex = 0
Case Is = 6
derlgn = Range("H9").End(xlDown).Row
ListBox3.RowSource = Range(Cells(10, 8), Cells(derlgn, 8)).Address
ListBox3.ListIndex = 0
Case Is = 7
derlgn = Range("I9").End(xlDown).Row
ListBox3.RowSource = Range(Cells(10, 9), Cells(derlgn, 9)).Address
ListBox3.ListIndex = 0
Case Is = 8
derlgn = Range("J9").End(xlDown).Row
ListBox3.RowSource = Range(Cells(10, 10), Cells(derlgn, 10)).Address
ListBox3.ListIndex = 0
Case Is = 9
derlgn = Range("K9").End(xlDown).Row
ListBox3.RowSource = Range(Cells(10, 11), Cells(derlgn, 11)).Address
ListBox3.ListIndex = 0
Case Is = 10
derlgn = Range("L9").End(xlDown).Row
ListBox3.RowSource = Range(Cells(10, 12), Cells(derlgn, 12)).Address
ListBox3.ListIndex = 0
Case Is = 11
derlgn = Range("M9").End(xlDown).Row
ListBox3.RowSource = Range(Cells(10, 13), Cells(derlgn, 13)).Address
ListBox3.ListIndex = 0
Case Is = 12
derlgn = Range("N9").End(xlDown).Row
ListBox3.RowSource = Range(Cells(10, 14), Cells(derlgn, 14)).Address
ListBox3.ListIndex = 0
Case Is = 13
derlgn = Range("O9").End(xlDown).Row
ListBox3.RowSource = Range(Cells(10, 15), Cells(derlgn, 15)).Address
ListBox3.ListIndex = 0
Case Is = 14
derlgn = Range("P9").End(xlDown).Row
ListBox3.RowSource = Range(Cells(10, 16), Cells(derlgn, 16)).Address
ListBox3.ListIndex = 0
Case Is = 15
derlgn = Range("Q9").End(xlDown).Row
ListBox3.RowSource = Range(Cells(10, 17), Cells(derlgn, 17)).Address
ListBox3.ListIndex = 0


End Select
End Sub



Et la question bonus: Quelle est la signification de cela:
ListBox3.ListIndex = -1

Sous-entendu, quelle est la différence si je met 0 au lieu de -1?

Je vous remercie pour votre patience avec moi et votre aide !

Sincèrement
Messages postés
16214
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
27 janvier 2022
1 580
Bonjour,

Sous-entendu, quelle est la différence si je met 0 au lieu de -1?
-1 = text vide, 0= premier text de la liste selectionne

Vous pourriez mettre votre fichier a dispo, car le code c'est bien gentil mais .....

Pour votre info, le remplissage de vos listboxs, 5 lignes de code par listbox
Messages postés
70
Date d'inscription
vendredi 5 septembre 2014
Statut
Membre
Dernière intervention
8 mars 2016
2
Hello, merci pour ta rapidité,


Voilà un fichier qui représente parfaitement mon problème:


http://www.cjoint.com/c/FBqkgCJGhrT

J'ai pas compris le sens de ta dernière remarque, tu veux dire que je ne peux pas mettre plus de 5choix dan une listebox?
Messages postés
16214
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
27 janvier 2022
1 580 >
Messages postés
70
Date d'inscription
vendredi 5 septembre 2014
Statut
Membre
Dernière intervention
8 mars 2016

Re,

J'ai pas compris le sens de ta dernière remarque Non, c'est le nombre de lignes de code par listbox pour les remplir
Messages postés
70
Date d'inscription
vendredi 5 septembre 2014
Statut
Membre
Dernière intervention
8 mars 2016
2 >
Messages postés
16214
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
27 janvier 2022

Ok, donc je suis laaaargement au-dessus alors. Ou bien le fait al condition liée à la listbox 2 réinitialise ce compte?

Parce que la première cascade fonctionne mais pas la deuxième qui ne prend en compte que les 3 premiers items de la listbox. En vrai je m'arrache des cheveux là, j'essaie une foule de combinaison possible sans parvenir à autre qu'un message d'erreur si je change quelque chose.

est-ce que l'ajout d'une boucle pour remplacer les 16conditions ne résoudraient pas le problème?
Messages postés
16214
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
27 janvier 2022
1 580 >
Messages postés
70
Date d'inscription
vendredi 5 septembre 2014
Statut
Membre
Dernière intervention
8 mars 2016

Re,

est-ce que l'ajout d'une boucle pour remplacer Y a pas besoin de boucle

fichier modifie pour remplissage Listbox1, 2 et 3

https://www.cjoint.com/c/FBqptoniwwf

Pour enregistrement et appel de l'UF voir le fichier f894009 15 févr. 2016 à 15:00 que je vous ai mis a dispo