Userform insérer des groupes de cases d'options
Bonjour,
Après moult recherche n'arrivant pas à trouver solution, je reviens par ici poser la question. J'ai donc travailler sur un formulaire permettant à la fois de la saisie afin de pouvoir renseigner une base de données mais aussi de pouvoir l'enrichir, la modifier etc... J'ai insérer par 3 listbox avec fonction "Array" pour créer des cases d'options. Avec le codage de mes connaissances je peux insérer une ligne et valider cette dernière, peut-être si vous êtes expert pas des plus optimum, mais ça marcheµ.
PAr contre je suis coincée car si dans ma base de données (feuille excel), ça renseigne correctement toutes les colonnes au bon endroit, lorsque je lance l'userform en mode consultation, je n'ai pas les boutons d'options coché selon le bon choix et une partie de mes informations se trouvent décalées dans les textbox.
Je ne sais pas comment faire, et malgré plusieurs tentatives, je n'arrive pas à me dépêtrer de mon souci.
Voici le code utilisé!
Option Compare Text
Dim F, ligne
Private Sub UserForm_Initialize()
Dim a()
Set F = Sheets("Op")
a = Application.Transpose(F.Range("A2:A" & F.[A65000].End(xlUp).Row).Value)
Me.ComboBox1.List = SansDoublonsTrié(a()) ' ou SansDoublonsTriéMAC()
Me.SUBVENTION.List = Array("OUI", "NON")
Me.AVISDR.List = Array("ACCORD", "REFUS")
Me.AVISELU.List = Array("OUI", "NON", "OUI avec")
End Sub
Private Sub ComboBox1_Click()
Dim K As Integer
nettoie
Me.ComboBox2.Clear
a = F.Range("A2:C" & F.[B65000].End(xlUp).Row).Value
Dim c(): ReDim c(1 To UBound(a))
J = 0
For I = 1 To UBound(a)
If a(I, 1) = Me.ComboBox1 Then J = J + 1: c(J) = a(I, 3)
Next I
ReDim Preserve c(1 To J)
'Call Tri(b, LBound(g), UBound(g))
Me.ComboBox2.List = c
End Sub
Private Sub ComboBox2_click()
nettoie
For I = 2 To F.[g65000].End(xlUp).Row
If F.Cells(I, "c") = Me.ComboBox2 And F.Cells(I, "a") = Me.ComboBox1 Then
ligne = I
For K = 1 To 32
Me.Controls("TextBox" & K) = F.Cells(I, K + 0)
Next K
End If
Next I
Me.TextBox1.SetFocus
End Sub
Private Sub VALIDER_Click()
If MsgBox("Validez saisie nouvelle ou modification apportée ?", vbYesNo, "Demande de confirmation") = vbYes And ligne > 1 Then
'--- Transfert Formulaire dans Op
F.Cells(ligne, 1) = Me.TextBox1
F.Cells(ligne, 2) = Me.TextBox2
F.Cells(ligne, 3) = Me.TextBox3
F.Cells(ligne, 4) = Me.TextBox4
F.Cells(ligne, 5) = Me.TextBox5
F.Cells(ligne, 6) = Me.TextBox6
F.Cells(ligne, 7) = Me.TextBox7
F.Cells(ligne, 8) = Me.TextBox8
F.Cells(ligne, 9) = Me.TextBox9
F.Cells(ligne, 10) = Me.TextBox10
F.Cells(ligne, 11) = Me.TextBox11
F.Cells(ligne, 12) = Me.TextBox12
F.Cells(ligne, 13) = Me.TextBox13
F.Cells(ligne, 14) = Me.TextBox14
F.Cells(ligne, 15) = Me.TextBox15
F.Cells(ligne, 16) = Me.TextBox16
F.Cells(ligne, 17) = Me.TextBox17
F.Cells(ligne, 18) = Me.TextBox18
F.Cells(ligne, 19) = Me.TextBox19
F.Cells(ligne, 20) = Me.SUBVENTION
F.Cells(ligne, 21) = Me.TextBox20
F.Cells(ligne, 22) = Me.TextBox21
F.Cells(ligne, 23) = Me.TextBox22
F.Cells(ligne, 24) = Me.TextBox23
F.Cells(ligne, 25) = Me.TextBox24
F.Cells(ligne, 26) = Me.TextBox25
F.Cells(ligne, 27) = Me.TextBox26
F.Cells(ligne, 28) = Me.TextBox27
F.Cells(ligne, 29) = Me.TextBox28
F.Cells(ligne, 30) = Me.TextBox29
F.Cells(ligne, 31) = Me.AVISDR
F.Cells(ligne, 32) = Me.TextBox30
F.Cells(ligne, 33) = Me.AVISELU
F.Cells(ligne, 34) = Me.TextBox31
F.Cells(ligne, 35) = Me.TextBox32
'f.Cells(ligneEnreg, 4) = CDate(Me.Date_naissance)
'f.Cells(ligneEnreg, 7) = CDbl(Me.Salaire)
nettoie
End If
End Sub
Private Sub AJOUT_Click()
nettoie
ligne = F.[A65000].End(xlUp).Row + 1
Me.TextBox1.SetFocus
End Sub
Sub nettoie()
Me.TextBox1 = ""
Me.TextBox2 = ""
Me.TextBox3 = ""
Me.TextBox4 = ""
Me.TextBox5 = ""
Me.TextBox6 = ""
Me.TextBox7 = ""
Me.TextBox8 = ""
Me.TextBox9 = ""
Me.TextBox10 = ""
Me.TextBox11 = ""
Me.TextBox12 = ""
Me.TextBox13 = ""
Me.TextBox14 = ""
Me.TextBox15 = ""
Me.TextBox16 = ""
Me.TextBox17 = ""
Me.TextBox18 = ""
Me.TextBox19 = ""
Me.SUBVENTION = ""
Me.TextBox20 = ""
Me.TextBox21 = ""
Me.TextBox22 = ""
Me.TextBox23 = ""
Me.TextBox24 = ""
Me.TextBox25 = ""
Me.TextBox26 = ""
Me.TextBox27 = ""
Me.TextBox28 = ""
Me.TextBox29 = ""
Me.AVISDR = ""
Me.TextBox30 = ""
Me.AVISELU = ""
Me.TextBox31 = ""
Me.TextBox32 = ""
End Sub
Function SansDoublonsTrié(a())
Set d = CreateObject("Scripting.Dictionary")
For Each c In a
d(c) = ""
Next c
c = d.keys
SansDoublonsTrié = Application.Transpose(c)
End FunctionJe ne sais pas non plus comment faire pour passer à la modification d'une ligne sans pour autant qu'elle soit rajoutée en plus. Car là c'est le cas je ne peux que valider une saisie nouvelle.
Si quelqu'un peut m'aider, merci d'avance.
bonjour,
joindre le fichier svp
A=
Je joint un fichier dont de ce fait j'ai modifié le code mais qui reste sur la même base pour des questions de confidentialités. Attention mon tableau se compose de plus de 35 colonnes.
D'avance merci.