Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

comment coder une combobox pour remplir diverses feuilles d'un classeur

26 réponses
Avatar
raptorus1er
Bonjour,
Tout nouveau sur le forum et dans le codage VBA, je viens vers vous car n'ayant que pour seul méthode d'apprentissage le visionnage et la retranscription de tutoriels vidéos je suis vite perdu dans les termes utilisés.
Après bcp de temps à essayer de comprendre comment créer un formulaire, je suis face à une colle pour mon faible niveau.
Pour la petite explication, j'ai souhaité créer un formulaire car dans mon service, chaque dossier contient une liste mise sous excel, j'ai premièrement rassemblé toutes les listes sur un seul classeur sur diverses feuilles.
De là je me suis lancé sur la création d'un formulaire qui reprend par les textbox toutes les données des diverses listes et une combobox (dans laquelle j'ai listé les diverses feuilles) qui est censée diriger les informations remplies vers la feuille qui aura été sélectionné dans la ComboBox.
et me voilà dans le flou le plus total pour la rédaction d'un code me permettant cette instruction.
Après avoir parcouru les diverses questions, je n'ai pas trouver de solution à mon problème.
Quelqu'un aurait il la possibilité d'orienter mes recherches ou de me guider dans la rédaction du code.
merci à vous
bien cordialement

10 réponses

1 2 3
Avatar
Michd
Bonjour,
Un fichier exemple à cette adresse : https://www.cjoint.com/c/HHioLCGjJmi
Il y a plus d'une manière de procéder, cela dépend de ce que tu veux faire. L'exemple est simple!
MichD
Avatar
Jacquouille
Juste une question:
Quand on remplit le formulaire, il ne s'inscrit pas automatiquement sous la
dernière ligne, dans le tableau des datas?
Jacques
" Le vin est au repas ce que le parfum est à la femme."
.
"Michd" a écrit dans le message de groupe de discussion :
pkevaj$1ig8$
Bonjour,
Un fichier exemple à cette adresse : https://www.cjoint.com/c/HHioLCGjJmi
Il y a plus d'une manière de procéder, cela dépend de ce que tu veux faire.
L'exemple est simple!
MichD
Avatar
Michd
Quand tu cliques sur le bouton du combobox, tu choisis l'item que tu désires et les 3 textbox se
remplissent automatiquement. Il n'est pas fait pour saisir de nouvelles données ou mettre à jour les
données du tableau. Cela se voulait un exemple simple pour un débutant...
MichD
Avatar
Jacquouille
Alors, je suis pré-débutant. -))
Merci
Jacques
" Le vin est au repas ce que le parfum est à la femme."
.
"Michd" a écrit dans le message de groupe de discussion :
pkfhe6$jfh$
Quand tu cliques sur le bouton du combobox, tu choisis l'item que tu désires
et les 3 textbox se
remplissent automatiquement. Il n'est pas fait pour saisir de nouvelles
données ou mettre à jour les
données du tableau. Cela se voulait un exemple simple pour un débutant...
MichD
Avatar
raptorus1er
Le mercredi 08 Août 2018 à 21:59 par Jacquouille :
Alors, je suis pré-débutant. -))
Merci
Jacques
" Le vin est au repas ce que le parfum est à la femme."
.
"Michd" a écrit dans le message de groupe de discussion :
pkfhe6$jfh$
Quand tu cliques sur le bouton du combobox, tu choisis l'item que tu
désires
et les 3 textbox se
remplissent automatiquement. Il n'est pas fait pour saisir de nouvelles
données ou mettre à jour les
données du tableau. Cela se voulait un exemple simple pour un
débutant...
MichD
bonjour,
après avoir cherché encore et toujours, je me retrouve avec ceci
Private Sub ComboBox1_Click()
Sheets(ComboBox1.Value).Activate
End Sub
Private Sub ComboBox1_DropButtonClick()
ComboBox1.Clear
For Each vfeuille In ActiveWorkbook.Sheets
ComboBox1.AddItem vfeuille.Name
Next
End Sub
qui me permet de passer de feuille en feuille depuis mon formulaire via la ComboBox1 mais lors de la validation,
un message d'erreur s'affiche en disant :"valeur de propriété non valide".
y a t'il une erreur ou quelque chose à rajouter?
merci à vous
Avatar
Michd
Bonjour
Ton code fonctionne bien, testé à l'aide d'un copier-coller dans un formulaire n'ayant qu'un
combobox.
Cependant, si tu désires que le nom de la feuille sélectionnée demeure dans le combobox, j'ai
modifié ton code comme ceci.
'Déclaration de la variable dans le haut du module du formulaire
Dim X As Long
'----------------------------------------------
Private Sub ComboBox1_Click()
Sheets(ComboBox1.Value).Activate
X = 1
End Sub
'----------------------------------------------
Private Sub ComboBox1_DropButtonClick()
If X = 0 Then
ComboBox1.Clear
Else: X = 0
Exit Sub
End If
For Each vFeuille In ActiveWorkbook.Sheets
ComboBox1.AddItem vFeuille.Name
Next
End Sub
'----------------------------------------------
MichD
Avatar
raptorus1er
Le jeudi 09 Août 2018 à 12:12 par Michd :
Bonjour
Ton code fonctionne bien, testé à l'aide d'un copier-coller dans
un formulaire n'ayant qu'un
combobox.
Cependant, si tu désires que le nom de la feuille
sélectionnée demeure dans le combobox, j'ai
modifié ton code comme ceci.
'Déclaration de la variable dans le haut du module du formulaire
Dim X As Long
'----------------------------------------------
Private Sub ComboBox1_Click()
Sheets(ComboBox1.Value).Activate
X = 1
End Sub
'----------------------------------------------
Private Sub ComboBox1_DropButtonClick()
If X = 0 Then
ComboBox1.Clear
Else: X = 0
Exit Sub
End If
For Each vFeuille In ActiveWorkbook.Sheets
ComboBox1.AddItem vFeuille.Name
Next
End Sub
'----------------------------------------------
MichD
j'ai positionné la modification du code que tu m'as fourni mais je ne peux toujours pas inscrire sur les autres feuilles malgré tout.
Je te mets le codage complet de mon formulaire pour que tu vois si une erreur empêcherait la selection des données de la ComboBox1.
Dim X As Long
'----------------------------------------------
Private Sub ComboBox1_Click()
Sheets(ComboBox1.Value).Activate
X = 1
End Sub
'----------------------------------------------
Private Sub ComboBox1_DropButtonClick()
If X = 0 Then
ComboBox1.Clear
Else: X = 0
Exit Sub
End If
For Each vFeuille In ActiveWorkbook.Sheets
ComboBox1.AddItem vFeuille.Name
Next
End Sub
Private Sub CommandButton1_Click()
If Sheets("feuille1").Range("A3") = "" Then
Sheets("feuille1").Range("A3") = TextBox2
Else
Sheets("feuille1").ListObjects(1).ListRows.Add
End If
dlt = Sheets("feuille1").Range("d1000000").End(xlUp).Row
Sheets("feuille1").Range("A" & dlt) = TextBox2
Sheets("feuille1").Range("B" & dlt) = TextBox3
Sheets("feuille1").Range("C" & dlt) = TextBox8
Sheets("feuille1").Range("D" & dlt) = TextBox9
End Sub
Private Sub Label25_Click()
End Sub
'creation format de date et message d'erreur listing
Private Sub TextBox11_AfterUpdate()
On Error GoTo Messagerreur
TextBox11 = Format(TextBox11, "short date")
Exit Sub
Messagerreur:
MsgBox ("le format de la date n'est pas valide jj/mm/aaaa")
TextBox11 = Empty
End Sub
Private Sub TextBox11_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox11 = "" Then
TextBox11 = "jj/mm/aaaa"
End If
End Sub
'definition des caractères imposé pour la case listing
Private Sub TextBox11_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not ((KeyAscii > 46 And KeyAscii < 58)) Then KeyAscii = 0
End Sub
'suppression automatique du modèle de date imposé date des faits
Private Sub TextBox11_Enter()
If TextBox11 = "jj/mm/aaaa" Then
TextBox11 = ""
End If
End Sub
'creation format de date et message d'erreur date de départ feuille1
Private Sub TextBox8_AfterUpdate()
On Error GoTo Messagerreur
TextBox8 = Format(TextBox8, "short date")
Exit Sub
Messagerreur:
MsgBox ("le format de la date n'est pas valide jj/mm/aaaa")
TextBox8 = Empty
End Sub
Private Sub TextBox8_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox8 = "" Then
TextBox8 = "jj/mm/aaaa"
End If
End Sub
'definition des caractères imposé pour la case date de départ feuille1
Private Sub TextBox8_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not ((KeyAscii > 46 And KeyAscii < 58)) Then KeyAscii = 0
End Sub
'suppression automatique du modèle de date imposé date de départ feuille1
Private Sub TextBox8_Enter()
If TextBox8 = "jj/mm/aaaa" Then
TextBox8 = ""
End If
End Sub
'creation format de date et message d'erreur listing
Private Sub TextBox9_AfterUpdate()
On Error GoTo Messagerreur
TextBox9 = Format(TextBox9, "short date")
Exit Sub
Messagerreur:
MsgBox ("le format de la date n'est pas valide jj/mm/aaaa")
TextBox9 = Empty
End Sub
Private Sub TextBox9_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox9 = "" Then
TextBox9 = "jj/mm/aaaa"
End If
End Sub
'definition des caractères imposé pour la case retour feuille 1
Private Sub TextBox9_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not ((KeyAscii > 46 And KeyAscii < 58)) Then KeyAscii = 0
End Sub
'suppression automatique du modèle de date imposé case retour feuille 1
Private Sub TextBox9_Enter()
If TextBox9 = "jj/mm/aaaa" Then
TextBox9 = ""
End If
End Sub
'demonstration format de date demandée case des dates
Private Sub UserForm_Initialize()
TextBox11.Text = "jj/mm/aaaa"
TextBox9.Text = "jj/mm/aaaa"
TextBox8.Text = "jj/mm/aaaa"
With ComboBox1
.AddItem " feuille1"
.AddItem " feuille 2"
.AddItem " feuille 3"
.AddItem " feuille 4"
.AddItem " feuille 5"
.AddItem " feuille 6"
.AddItem " feuille 7"
.AddItem " feuille 8"
End With
With ComboBox2
.AddItem "M."
.AddItem "Melle"
.AddItem "Mme"
End With
With ComboBox3
.AddItem "membre1"
.AddItem " membre2"
.AddItem " membre3"
.AddItem " membre4"
.AddItem " membre5"
End With
With ComboBox4
.AddItem "Actif"
.AddItem "Non Actif"
End With
With ComboBox5
.AddItem "dossier 1"
.AddItem " dossier 2"
.AddItem " dossier 3"
.AddItem " dossier 4"
.AddItem " dossier 5"
End With
End Sub
'definition des caractères imposé pour la case code postal logement
Private Sub TextBox26_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not ((KeyAscii > 47 And KeyAscii < 58)) Then KeyAscii = 0
End Sub
'definition des caractères imposé pour la case km liaison
Private Sub TextBox29_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not ((KeyAscii > 47 And KeyAscii < 58)) Then KeyAscii = 0
End Sub
'definition des caractères imposé pour la case numéro de téléphone fixe
Private Sub TextBox32_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not ((KeyAscii > 46 And KeyAscii < 58)) Then KeyAscii = 0
End Sub
'definition des caractères imposé pour la case code postal civilité
Private Sub TextBox4_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not ((KeyAscii > 47 And KeyAscii < 58)) Then KeyAscii = 0
End Sub
'definition des caractères imposé pour la case numéro de téléphone portable
Private Sub TextBox6_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If Not ((KeyAscii > 46 And KeyAscii < 58)) Then KeyAscii = 0
End Sub
Je pense que j'ai dû zapper pas mal de choses et avoir fait des bourdes!
mais bon jusque là tout fonctionne avec la feuille1 seulement.
merci à toi MichD en tout cas de te pencher sur mon cas.
Avatar
raptorus1er
Le jeudi 09 Août 2018 à 12:12 par Michd :
Bonjour
Ton code fonctionne bien, testé à l'aide d'un copier-coller dans
un formulaire n'ayant qu'un
combobox.
Cependant, si tu désires que le nom de la feuille
sélectionnée demeure dans le combobox, j'ai
modifié ton code comme ceci.
'Déclaration de la variable dans le haut du module du formulaire
Dim X As Long
'----------------------------------------------
Private Sub ComboBox1_Click()
Sheets(ComboBox1.Value).Activate
X = 1
End Sub
'----------------------------------------------
Private Sub ComboBox1_DropButtonClick()
If X = 0 Then
ComboBox1.Clear
Else: X = 0
Exit Sub
End If
For Each vFeuille In ActiveWorkbook.Sheets
ComboBox1.AddItem vFeuille.Name
Next
End Sub
'----------------------------------------------
MichD
Me faudrait il dupliquer
Private Sub CommandButton1_Click()
If Sheets("feuille1").Range("A3") = "" Then
Sheets("feuille1").Range("A3") = TextBox2
Else
Sheets("feuille1").ListObjects(1).ListRows.Add
End If
dlt = Sheets("feuille1").Range("d1000000").End(xlUp).Row
Sheets("feuille1").Range("A" & dlt) = TextBox2
Sheets("feuille1").Range("B" & dlt) = TextBox3
Sheets("feuille1").Range("C" & dlt) = TextBox8
Sheets("feuille1").Range("D" & dlt) = TextBox9
End Sub
pour chaque feuille? avec evidemment le changement des nom des textBox?
Avatar
Michd
Dans le haut du module du formulaire, ajoute une variable :
Dim X As Long
Dim Feuille As String '<<<<====
modifie cette procédure comme ceci :
'----------------------------------------
Private Sub ComboBox1_Click()
Feuille = ComboBox1.Value
Sheets(ComboBox1.Value).Activate
X = 1
End Sub
'----------------------------------------
Et dans cette procédure, ajoute une ligne de code :
'------------------------------------------------
Private Sub CommandButton1_Click()
if Feuille = "" then Exit sub ' <<<<<====
'Le reste du code
'------------------------------------------------
MichD
Avatar
Michd
| pour chaque feuille? avec evidemment le changement des nom des textBox?
Je n'en sais rien. Je ne sais pas où sont ces textbox? De plus, rien n'empêche tes textbox d'avoir
le même nom s'ils sont dans des feuilles différentes. À toi de voir!
MichD
1 2 3