Formulaire - Formule pour envoyer les données dans un tab
Bonjour,
J'ai réussi à créer un formulaire permettant d'envoyer les données dans un tableau.
Enfin j'avais réussi jusqu'au moment où j'ai décidé de désactiver la touche validation (commandbutton) nommé cmd_valider-click, tant que certains Textbox n'étaient pas rempli.
Donc voici dans un premier temps ma formule pour envoyer les données :
Private Sub Cmd_Valider_Click()
Dim derlinge As Integer, ln
With Sheets("données")
For ln = 2 To .Range("B" & Rows.Count).End(xlUp).Row
If Worksheets("données").Range("B" & ln) = TextBox2 And Worksheets("données").Range("D" & ln) = TextBox4 Then
MsgBox "La fiche de " & TextBox2 & " " & TextBox4 & " existe déjà." & Chr(13) & "Vous ne pouvez que la modifier.", 16
Exit Sub
End If
Next ln
If MsgBox("confirmez-vous l'ajout des données?", vbYesNo, "confirmation") = vbYes Then
derligne = Worksheets("données").Range("B" & Rows.Count).End(xlUp).Row + 1
For I = 1 To 26
Worksheets("données").Cells(derligne, I) = Controls("TextBox" & I).Value
Next I
End If
End With
End Sub
et voici la formule que j'ai décidé d'ajouter pour désactiver le bouton :
''''''''''''''''''''''
'Permet de désactiviter la touche de validation si les
'cases ne sont pas remplies
''''''''''''''''''''''
Sub boutonActif()
Dim i%
For i = 2 To 7
If Controls("textbox" & i).Value = "" Then
Cmd_Valider.Enabled = False
Exit Sub
End If
Next i
Cmd_Valider.Enabled = True
End Sub
Private Sub Textbox2_afterUpdate() 'en lien avec la formule du dessus pour activer les bouton validation
boutonActif
End Sub
Private Sub textbox3_afterupdate()
boutonActif
End Sub
Private Sub textbox4_afterUpdate()
boutonActif
End Sub
Private Sub textbox5_afterUpdate()
boutonActif
End Sub
Private Sub textbox6_afterupdate()
boutonActif
End Sub
Private Sub textbox7_afterupdate()
boutonActif
End Sub
Private Sub CommandButton3_Click()
Unload UserForm1
End Sub
je dois renommer quelque chose ?
Je ne sais pas comment faire.
Merci
François
Bonjour,
Pour moi il manque juste le code à l'ouverture de l'USF
Private Sub UserForm_Initialize()
boutonActif
End Sub
Mais tu ne nous dit pas quel est le problème rencontré
Bonjour,
Mon problème c'est que ma formule ne fonctionne plus (celle qui doit envoyer les données dans mon onglet "données").
et je ne sais pas pourquoi.
Mais depuis que j'ai ajouté des fonctions ça bug : (création d'un bouton "effacer" / désactivation des bouton "Créer" et "modifier" si certains textbox ou combobox ne sont pas remplis.
je suis dingue je pensais avoir presque fini mais maintenant c'est ma formule de base qui bug !!!!!
voici l'ensemble de mon codage :
Private O As Worksheet
Private DL As Long
Private TV As Variant
Private no_ligne As Long
Option Compare Text
Dim f, ligne
Private Sub UserForm_Initialize()
Dim D As Object
Dim I As Long
Set O = Worksheets("données")
DL = O.Cells(Application.Rows.Count, "A").End(xlUp).Row
TV = O.Range("A1:Z" & DL)
Set D = CreateObject("Scripting.Dictionary")
For I = 5 To DL
D(TV(I, 6)) = ""
Next I
Me.ComboBox1.List = D.keys
End Sub
Private Sub ComboBox1_Change()
Dim D As Object
Dim I As Long
Set D = CreateObject("Scripting.Dictionary")
For I = 4 To DL
If CStr(TV(I, 6)) = Me.ComboBox1.Value Then D(TV(I, 4)) = ""
Next I
Me.ComboBox2.List = D.keys
End Sub
Private Sub ComboBox2_Change()
Dim D As Object
Dim I As Long
Set D = CreateObject("Scripting.Dictionary")
For I = 4 To DL
If CStr(TV(I, 6)) = Me.ComboBox1.Value And CStr(TV(I, 4)) = Me.ComboBox2.Value Then D(TV(I, 2)) = ""
Next I
Me.ComboBox3.List = D.keys
End Sub
Private Sub ComboBox3_Change()
If Me.ComboBox1.Value = "" Or Me.ComboBox2.Value = "" Then Exit Sub
For I = 4 To DL
If CStr(TV(I, 6)) = Me.ComboBox1.Value And CStr(TV(I, 4)) = Me.ComboBox2.Value And CStr(TV(I, 2)) = Me.ComboBox3.Value Then
no_ligne = I
Me.TextBox2.Value = Me.ComboBox3.Value
Me.TextBox3.Value = Worksheets("données").Cells(no_ligne, 3)
Me.TextBox4.Value = Worksheets("données").Cells(no_ligne, 4)
Me.TextBox5.Value = Worksheets("données").Cells(no_ligne, 5)
Me.TextBox6.Value = Worksheets("données").Cells(no_ligne, 6)
Me.TextBox7.Value = Worksheets("données").Cells(no_ligne, 7)
Me.TextBox8.Value = Worksheets("données").Cells(no_ligne, 8)
Me.TextBox9.Value = Worksheets("données").Cells(no_ligne, 9)
Me.TextBox10.Value = Worksheets("données").Cells(no_ligne, 10)
Me.TextBox11.Value = Worksheets("données").Cells(no_ligne, 11)
Me.TextBox12.Value = Worksheets("données").Cells(no_ligne, 12)
Me.TextBox13.Value = Worksheets("données").Cells(no_ligne, 13)
Me.TextBox14.Value = Worksheets("données").Cells(no_ligne, 14)
Me.TextBox15.Value = Worksheets("données").Cells(no_ligne, 15)
Me.TextBox16.Value = Worksheets("données").Cells(no_ligne, 16)
Me.TextBox17.Value = Worksheets("données").Cells(no_ligne, 17)
Me.TextBox18.Value = Worksheets("données").Cells(no_ligne, 18)
Me.TextBox19.Value = Worksheets("données").Cells(no_ligne, 19)
Me.TextBox20.Value = Worksheets("données").Cells(no_ligne, 20)
Me.TextBox21.Value = Worksheets("données").Cells(no_ligne, 21)
Me.TextBox22.Value = Worksheets("données").Cells(no_ligne, 22)
Me.TextBox23.Value = Worksheets("données").Cells(no_ligne, 23)
Me.TextBox24.Value = Worksheets("données").Cells(no_ligne, 24)
Me.TextBox25.Value = Worksheets("données").Cells(no_ligne, 25)
Me.TextBox26.Value = Worksheets("données").Cells(no_ligne, 26)
Exit For
End If
Next I
End Sub
Private Sub Cmd_quitter_Click()
Unload Me
End Sub
'Private Sub CommandButton1_Click()
'Dim no_ligne As Integer
'no_ligne = ComboBox1.ListIndex + 2
'End Sub
Private Sub Cmd_Valider_Click()
Dim derlinge As Integer, ln
With Sheets("données")
For ln = 2 To .Range("B" & Rows.Count).End(xlUp).Row
If Worksheets("données").Range("B" & ln) = TextBox2 And Worksheets("données").Range("D" & ln) = TextBox4 Then
MsgBox "La fiche de " & TextBox2 & " " & TextBox4 & " existe déjà." & Chr(13) & "Vous ne pouvez que la modifier.", 16
Exit Sub
End If
Next ln
If MsgBox("confirmez-vous l'ajout des données?", vbYesNo, "confirmation") = vbYes Then
derligne = Worksheets("données").Range("B" & Rows.Count).End(xlUp).Row + 1
For I = 1 To 26
Worksheets("données").Cells(derligne, I) = Controls("TextBox" & I).Value
Next I
End If
End With
End Sub
Private Sub CommandButton3_Click()
Unload UserForm1
End Sub
Private Sub Cmd_Modifier_Click()
flag = 1
With Worksheets("données")
ln = Worksheets("données").Range("F4:F" & .Range("F" & Rows.Count).End(xlUp).Row).Find(ComboBox1, lookat:=xlWhole).Row
For I = 1 To 26
Worksheets("données").Cells(ln, I) = Controls("TextBox" & I).Value
Controls("TextBox" & I).Value = ""
Next I
ComboBox1.ListIndex = -1
End With
MsgBox "La modification a été prise en compte."
End Sub
'Private Sub Cmd_Modifier_Click()
'If Me.ComboBox1 = "" Or Me.ComboBox2 = "" Or Me.ComboBox3 = "" Then Exit Sub
'If MsgBox("Etes-vous certain de vouloir modifier la FSSE de ce poste ?", vbYesNo, "Demande de confirmation") = vbYes And ligne > 1 Then
'(Worksheets("données").Cells(ligne, "f") = Me.ComboBox1.Value)
'(Worksheets("données").Cells(ligne, "d") = Me.ComboBox2.Value)
'(Worksheets("données").Cells(ligne, "b") = Me.ComboBox3.Value)
'Worksheets("données").Cells(no_ligne, 3) = Me.TextBox3.Value
'Worksheets("données").Cells(no_ligne, 4) = Me.TextBox4.Value
'Worksheets("données").Cells(no_ligne, 5) = Me.TextBox5.Value
'Worksheets("données").Cells(no_ligne, 6) = Me.TextBox6.Value
'Worksheets("données").Cells(no_ligne, 7) = Me.TextBox7.Value
'Worksheets("données").Cells(no_ligne, 8) = Me.TextBox8.Value
'Worksheets("données").Cells(no_ligne, 9) = Me.TextBox9.Value
'Worksheets("données").Cells(no_ligne, 10) = Me.TextBox10.Value
'Worksheets("données").Cells(no_ligne, 11) = Me.TextBox11.Value
'Worksheets("données").Cells(no_ligne, 12) = Me.TextBox12.Value
'Worksheets("données").Cells(no_ligne, 13) = Me.TextBox13.Value
'Worksheets("données").Cells(no_ligne, 14) = Me.TextBox14.Value
'Worksheets("données").Cells(no_ligne, 15) = Me.TextBox15.Value
'Worksheets("données").Cells(no_ligne, 16) = Me.TextBox16.Value
'Worksheets("données").Cells(no_ligne, 17) = Me.TextBox17.Value
'Worksheets("données").Cells(no_ligne, 18) = Me.TextBox18.Value
'Worksheets("données").Cells(no_ligne, 19) = Me.TextBox19.Value
'Worksheets("données").Cells(no_ligne, 20) = Me.TextBox20.Value
'Worksheets("données").Cells(no_ligne, 21) = Me.TextBox21.Value
'Worksheets("données").Cells(no_ligne, 22) = Me.TextBox22.Value
'Worksheets("données").Cells(no_ligne, 23) = Me.TextBox23.Value
'Worksheets("données").Cells(no_ligne, 24) = Me.TextBox24.Value
'Worksheets("données").Cells(no_ligne, 25) = Me.TextBox25.Value
'Worksheets("données").Cells(no_ligne, 26) = Me.TextBox26.Value
'temp = ""
'(For K = 1 To 26)
'(tmp = Me.Controls("TextBox" & K))
'(If IsNumeric(tmp) Then tmp = Val(tmp))
'(If IsDate(tmp) Then tmp = CDate(tmp))
'(Worksheets("données").Cells(ligne, K + 3) = tmp)
'(Next K)
'End If
'UserForm_Initialize
'ligne = O.[A65000].End(xlUp).Row + 1
'MsgBox "La modification a été prise en compte."
'End Sub
pas envident quand on maitrise pas excel sur le bout des doigts
François
Bonjour Franh
Franh Sois a écrit :Mon problème c'est que ma formule ne fonctionne plus (celle qui doit envoyer les données dans mon onglet "données"). et je ne sais pas pourquoi.
Mais depuis que j'ai ajouté des fonctions ça bug : (création d'un bouton "effacer" / désactivation des bouton "Créer" et "modifier" si certains textbox ou combobox ne sont pas remplis.
je suis dingue je pensais avoir presque fini mais maintenant c'est ma formule de base qui bug !!!!!
Le problème, c'est que sans fichier anonymisé, il est compliqué de te répondre
Et tu nous parles d'une formule de base, laquelle !?
A+