Userform

sebv1986 Messages postés 4 Date d'inscription lundi 12 mars 2012 Statut Membre Dernière intervention 12 mars 2012 - 12 mars 2012 à 09:51
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 12 mars 2012 à 11:08
Bonjour,

Je suis étudiant et je dois réaliser un userform pour un cours. L'userform doit comporter une combobox où l'utilisateur peut choisir une date (liste préalablement inscrit dans la colonne A)et ensuite remplir 3 textbox avec 3 nombres. C'est trois nombres devront se retrouver sur la ligne choisie dans la combobox (date- colonne A) et dans les 3 colonnes suivant de la date.(colonne B pour le textbo 1 , C pour le textbox 2 et D pour le textbox 3).

J'ai écrit ce code mais il m'indique 'Run time error 9'... si qq1 peut m'aider...


Option Explicit
Dim WS As Worksheet
Dim Membre As String
Dim rgan As Range

Private Sub Add_Click()
Dim CTRL As Control
Dim i As Integer
Dim Response As Byte

If Me.ComboBox1.ListIndex = -1 Then
Exit Sub
End If

Response = MsgBox("Are yo sure of your data?)", vbQuestion + vbOKCancel)
If Response = 1 Then

With WS
.Range("B" & Me.ComboBox1.ListIndex + 2) = TextBox1
.Range("C" & Me.ComboBox1.ListIndex + 2) = TextBox2
.Range("D" & Me.ComboBox1.ListIndex + 2) = TextBox3

End With
MsgBox "Implementation done", vbInformation

Ini
End Sub

Private Sub Cancel_Click()
Unload Me
Sheet1.Activate
End Sub

Private Sub ComboBox1_Click()
If Me.ComboBox1.ListIndex = -1 Then Exit Sub
TextBox1 = WS.Range("B" & Me.ComboBox1.ListIndex + 2)
TextBox2 = WS.Range("C" & Me.ComboBox1.ListIndex + 2)
TextBox3 = WS.Range("D" & Me.ComboBox1.ListIndex + 2)

With Me
Membre = .ComboBox1
End With
End Sub

Private Sub UserForm_Initialize()
Sheet1.AutoFilterMode = False
Ini
End Sub

Private Sub Ini()
Dim CTRL As Control
Dim L As Integer
Dim i As Integer
For Each CTRL In Me.Controls
If TypeOf CTRL Is MSForms.TextBox Or TypeOf CTRL Is MSForms.ComboBox Then
CTRL = ""
End If
Next CTRL
Me.ComboBox1.Clear
Set WS = ThisWorkbook.Sheets("sheet1")
L = WS.Range("A65536").End(xlUp).Row

For i = 2 To L
With Me.ComboBox1
.AddItem WS.Range("A" & i)
End With
Next i
Application.ScreenUpdating = True
End Sub

9 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 mars 2012 à 10:06
Bonjour,

- Tu développes donc sous VBA (le VBA de Excel) et non sous VB6 (la présente section). Veille dorénavant à ouvrir tes discussions VBA dans la section Langages dérivés > VBA
- Veille également (c'est important) à utiliser les balises Code (3ème icône en partant de la droite) pour présenter ton code.

WS, que tu as typée en WorkSheet, ne correspond à aucune feuille, puisque tu ne lui en affecté aucune !

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 mars 2012 à 10:18
Je n'ai par ailleurs pas vraiment lu ton code (je ne lis qu'en diagonale, lorsque non mis entre balises code le rendant "lisible" sans fatigue).
Mais j'y ai quand même vu une fâcheuse habitude d'abuser de tolérances de VBA.
Toujours préciser la propriété utilisée d'un contrôle.
Combobox1 quoi ? par exemple ? Idem pour TEXTBOX, 2 et 3 !
Où est déclarée et typée L ?


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
sebv1986 Messages postés 4 Date d'inscription lundi 12 mars 2012 Statut Membre Dernière intervention 12 mars 2012
12 mars 2012 à 10:34
Merci pour ta réponse rapide.

Je ne comprends pas lorsque tu me dis de préciser la propriété utilisée.

J'ai déclaré L dans Private sub Ini.

Mais j'ai essayé de créer ce code pour que les données introduites dans textbox1, 2,3 se retrouvent dans la ligne correspondant à la date choisie dans combobox1. et c'est ca tt ma difficulté...
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 mars 2012 à 10:39
Je ne comprends pas lorsque tu me dis de préciser la propriété utilisée

exemple, donc :
.Range("B" & Me.ComboBox1.ListIndex + 2) = TextBox1.Text

Et ta réponse à propos de WS ? ===>> pas de réponse ?
et ton code mis entre balises ? ===>> on l'attend !
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sebv1986 Messages postés 4 Date d'inscription lundi 12 mars 2012 Statut Membre Dernière intervention 12 mars 2012
12 mars 2012 à 10:44
Option Explicit
Dim WS As Worksheet
Dim Membre As String
Dim rgan As Range
WS = Sheet1



Private Sub Add_Click()
Dim CTRL As Control
Dim i As Integer
Dim Response As Byte


If Me.ComboBox1.ListIndex = -1 Then
Exit Sub
End If

Response = MsgBox("Are yo sure of your data?)", vbQuestion + vbOKCancel)
If Response = 1 Then

With WS
    .Range("B" & Me.ComboBox1.ListIndex + 2) = TextBox1
    .Range("C" & Me.ComboBox1.ListIndex + 2) = TextBox2
    .Range("D" & Me.ComboBox1.ListIndex + 2) = TextBox3
    
End With
MsgBox "Implementation done", vbInformation

Ini
End Sub

Private Sub Cancel_Click()
Unload Me
Sheet1.Activate
End Sub

Private Sub ComboBox1_Click()


If Me.ComboBox1.ListIndex = -1 Then Exit Sub
TextBox1 = WS.Range("B" & Me.ComboBox1.ListIndex + 2)
TextBox2 = WS.Range("C" & Me.ComboBox1.ListIndex + 2)
TextBox3 = WS.Range("D" & Me.ComboBox1.ListIndex + 2)

With Me
Membre = .ComboBox1
End With
End Sub

Private Sub UserForm_Initialize()
Sheet1.AutoFilterMode = False
Ini
End Sub

Private Sub Ini()
Dim CTRL As Control
Dim L As Integer
Dim i As Integer
For Each CTRL In Me.Controls
If TypeOf CTRL Is MSForms.TextBox Or TypeOf CTRL Is MSForms.ComboBox Then
CTRL = ""
End If
Next CTRL
Me.ComboBox1.Clear
Set WS = ThisWorkbook.Sheets("sheet1")
L = WS.Range("A65536").End(xlUp).Row

For i = 2 To L
With Me.ComboBox1
.AddItem WS.Range("A" & i)
End With
Next i
Application.ScreenUpdating = True
End Sub




pour WS, elle correspond à ma "sheet 1", est ce que je la défini au début? ( WS = sheet 1)
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 mars 2012 à 10:46
Tu n'as tenu compte d'aucune de mes remarques en ce qui concerne WS d'une part et la précision des propriétés, d'autre part !
Et ton code, enfin mis entre balises, n'est pas indenté !



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 mars 2012 à 10:49
Ah pardon : je vois :
WS = Sheet1

Ouvre vite ton aide VBA sur la manière d'affecter un objet à une variable ! Une feuille est un objet !
Ouvre donc ton aide sur le mot Set !
Le code que tu montres me donne l'impression d'être un simple copier/coller non compris de petits bouts ramassés ici et là !

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
sebv1986 Messages postés 4 Date d'inscription lundi 12 mars 2012 Statut Membre Dernière intervention 12 mars 2012
12 mars 2012 à 10:53
en effet, je me suis inspiré d'idées sur des forums pour créer mon code vu que je ne savais pas comment utiliser une combobox pour que la réponse de la combobox définisse la ligne où les données doivent être exportées.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
12 mars 2012 à 11:08
en effet, je me suis inspiré d'idées sur des forums pour créer mon code vu que je ne savais pas comment utiliser une combobox pour que la réponse de la combobox définisse la ligne où les données doivent être exportées.

C'est là une fort mauvaise habitude.
Alors que tu as ton aide VBA à portée de main, sur TA machine !

Tu es étudiant ===>> tu as un devoir à faire ===>> alors, avec toi, c'est ainsi (et pas autrement) que je vais m'y prendre. Je n'aime pas que l'on nage en eau trouble

La propriété Listindex d'une listbox ou d'un combobox retourne l'index de l'article cliqué
soit x cet index
la propriété List(x) retourne l'article d'index x
Au boulot.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Rejoignez-nous