Sparfell29
XLDnaute Nouveau
Bonjour à tous,
Je rencontre actuellement un problème avec ma fonction RAZ fonctionnant très bien sur mon autre formulaire. Je n'arrive pas du tout à l'adapter pour qu'elle convienne à mon formulaire actuel et je rencontre plein d'erreurs.
De base j'ai ça dans mon autre formulaire et cette fonction intervient dans mes boutons "Validation" pour vider le formulaire après avoir poussé les données dans le tableau et dans mon bouton "Ajout" vierge" pour vider le formulaire et démarrer la saisie d'un nouveau produit dans ma dernière ligne non occupée de tableau.
Sauf que quand j'essaye de l'adapter à mon nouveau formulaire
Et bien ca ne fonctionne pas. J'ai essayé en utilisant "Unload Me" et ça fonctionne uniquement pour le bouton "Validation" j'ai une erreur de Range Global Object pour le bouton "Ajout vierge".
Ci-joint mon fichier de travail. Je ne comprends pas ce que je fais de mal dans le passage d'un formulaire à l'autre j'ai pourtant l'impression de bien respecter la syntaxe . Voila l'ensemble de mon code pour ceux ne voulant pas télécharger les PJ sur les forums :
Je vous remercie par avance de l'aide que vous pourrez m'apporter.
Cordialement,
Erwan.
Je rencontre actuellement un problème avec ma fonction RAZ fonctionnant très bien sur mon autre formulaire. Je n'arrive pas du tout à l'adapter pour qu'elle convienne à mon formulaire actuel et je rencontre plein d'erreurs.
De base j'ai ça dans mon autre formulaire et cette fonction intervient dans mes boutons "Validation" pour vider le formulaire après avoir poussé les données dans le tableau et dans mon bouton "Ajout" vierge" pour vider le formulaire et démarrer la saisie d'un nouveau produit dans ma dernière ligne non occupée de tableau.
VB:
'remise à zéro du formulaire
Sub raz()
For i = 2 To 7
Me("TextBox" & i) = ""
Next i
For s = 1 To 8
Me("Service" & s) = ""
Me("accord" & s) = ""
Me("visa" & s) = ""
Next s
End Sub
Sauf que quand j'essaye de l'adapter à mon nouveau formulaire
VB:
'remise à zéro du formulaire
Sub raz()
For i = 2 To 24
Me("TextBox" & i) = ""
Next i
For s = 1 To 4
Me("Risque" & s) = ""
Me("Date" & s) = ""
Me("Visa" & s) = ""
Me("Com" & s) = ""
Next s
End Sub
Et bien ca ne fonctionne pas. J'ai essayé en utilisant "Unload Me" et ça fonctionne uniquement pour le bouton "Validation" j'ai une erreur de Range Global Object pour le bouton "Ajout vierge".
Ci-joint mon fichier de travail. Je ne comprends pas ce que je fais de mal dans le passage d'un formulaire à l'autre j'ai pourtant l'impression de bien respecter la syntaxe
Code:
Option Compare Text
Dim nomtableau
'Initialisation du formulaire
Private Sub UserForm_Initialize()
nomtableau = "produit"
Me.enreg = Range(nomtableau).Rows.Count + 1
Me.Id = Application.Max(Range(nomtableau).Columns(1)) + 1
Tbl = Range(nomtableau).Value
Tri Tbl, LBound(Tbl), UBound(Tbl), 1
Me.Recherche.List = Tbl
' remplissage des combobox avec le contenu des listes
With Me
.Criticité.List = [Tableau3].Value
.Prodstrat.List = [Tableau4].Value
.Detectionstep.List = [Tableau5].Value
.Actionim.List = [Tableau6].Value
.Retraitement.List = [Tableau7].Value
.Risque1.List = [Tableau8].Value
.Risque2.List = [Tableau8].Value
.Risque3.List = [Tableau8].Value
.Risque4.List = [Tableau8].Value
End With
' déprotection de la feuille "Produits" à éditer
Sheets("Produits").Unprotect Password:="iknowvba"
End Sub
' Apparition de nouveaux champs si "autre" est sélectionné
Private Sub Retraitement_Change()
TextBox18.Visible = Retraitement.ListIndex > 1
TextBox19.Visible = Retraitement.ListIndex > 1
TextBox20.Visible = Retraitement.ListIndex > 1
Label39.Visible = Retraitement.ListIndex > 1
Label40.Visible = Retraitement.ListIndex > 1
Label41.Visible = Retraitement.ListIndex > 1
End Sub
' Menu déroulant pour recherche produit
Private Sub Recherche_Change()
Me.enreg = Application.Match(Val(Me.Recherche), Range(nomtableau).Columns(1), 0)
Me.Id = Me.Recherche
For i = 2 To 3
Me("TextBox" & i) = Range(nomtableau).Item(enreg, i)
Next i
Me.Textbox4 = Range(nomtableau).Item(enreg, 5)
Me.Textbox5 = Range(nomtableau).Item(enreg, 6)
Me.Textbox6 = Range(nomtableau).Item(enreg, 7)
Me.Textbox7 = Range(nomtableau).Item(enreg, 8)
Me.TextBox8 = Range(nomtableau).Item(enreg, 9)
Me.TextBox9 = Range(nomtableau).Item(enreg, 10)
Me.TextBox10 = Range(nomtableau).Item(enreg, 11)
Me.TextBox11 = Range(nomtableau).Item(enreg, 4)
'--- services
For s = 1 To 4
Me("Risque" & s) = Range(nomtableau).Item(enreg, 24 + (s - 1) * 3)
Me("Date" & s) = Range(nomtableau).Item(enreg, 25 + (s - 1) * 3)
Me("Visa" & s) = Range(nomtableau).Item(enreg, 26 + (s - 1) * 3)
Next s
End Sub
'bouton valider
Private Sub B_valid_Click()
enreg = Me.enreg
Range(nomtableau).Item(enreg, 1) = Val(Me.Id)
' On pousse les données du formulaire dans le tableau
For i = 2 To 3
Range(nomtableau).Item(enreg, i) = Me("TextBox" & i)
Next i
Range(nomtableau).Item(enreg, 4) = Me.TextBox11
Range(nomtableau).Item(enreg, 5) = Me.Textbox4
Range(nomtableau).Item(enreg, 6) = Me.Textbox5
Range(nomtableau).Item(enreg, 7) = Me.Textbox6
Range(nomtableau).Item(enreg, 8) = Me.Textbox7
Range(nomtableau).Item(enreg, 9) = Me.TextBox8
Range(nomtableau).Item(enreg, 10) = Me.TextBox9
Range(nomtableau).Item(enreg, 11) = Me.TextBox10
Range(nomtableau).Item(enreg, 12) = Me("criticité" & s)
Range(nomtableau).Item(enreg, 13) = Me("Prodstrat" & s)
Range(nomtableau).Item(enreg, 14) = Me("Detectionstep" & s)
Range(nomtableau).Item(enreg, 15) = Me.TextBox12
Range(nomtableau).Item(enreg, 16) = Me("Actionim" & s)
Range(nomtableau).Item(enreg, 17) = Me.TextBox16
Range(nomtableau).Item(enreg, 18) = Me("Retraitement" & s)
Range(nomtableau).Item(enreg, 19) = Me.TextBox18
Range(nomtableau).Item(enreg, 20) = Me.TextBox19
Range(nomtableau).Item(enreg, 21) = Me.TextBox20
Range(nomtableau).Item(enreg, 22) = Me.TextBox15
Range(nomtableau).Item(enreg, 23) = Me.TextBox17
For s = 1 To 4
Range(nomtableau).Item(enreg, 24 + (s - 1) * 4) = Me("Risque" & s)
Range(nomtableau).Item(enreg, 25 + (s - 1) * 4) = Me("Date" & s)
Range(nomtableau).Item(enreg, 26 + (s - 1) * 4) = Me("Visa" & s)
Range(nomtableau).Item(enreg, 27 + (s - 1) * 4) = Me("Com" & s)
Next s
' Vide le formulaire après avoir mis les données dans le tableau
Unload Me
UserFormSaisie.Show
End Sub
' bouton supprimer
Private Sub B_sup_Click()
' protection du bouton supprimer par mdp
Dim Mdp As String
Mdp = Application.InputBox("Veuillez introduire votre mot de passe")
If Mdp <> "iknowvba" Then MsgBox "Accès refusé !": Exit Sub
If MsgBox("Etes vous sûr de supprimer " & Me.enreg & "?", vbYesNo) = vbYes Then
Range(nomtableau).Rows(Me.enreg).Delete
Me.Recherche.List = Range(nomtableau).Value
End If
End Sub
' bouton ajouter
Private Sub B_ajout_Click()
Unload Me
Me.Id = Application.Max(Range(nomtableau).Columns(1)) + 1
Me.enreg = Range(nomtableau).Rows.Count + 1
End Sub
Private Sub B_suivant_Click()
If Me.Recherche.ListIndex < Me.Recherche.ListCount - 1 Then
Me.Recherche.ListIndex = Me.Recherche.ListIndex + 1
End If
End Sub
Private Sub b_précédent_Click()
If Me.Recherche.ListIndex > 0 Then
Me.Recherche.ListIndex = Me.Recherche.ListIndex - 1
End If
End Sub
' bouton quitter
Private Sub b_quitter_Click()
Unload Me
' Reprotection de la feuille "Produits" à éditer
Sheets("Produits").Protect Password:="iknowvba"
End Sub
Sub Tri(a, gauc, droi, colTri) ' Quick sort
ref = a((gauc + droi) \ 2, colTri)
g = gauc: d = droi
Do
Do While a(g, colTri) < ref: g = g + 1: Loop
Do While ref < a(d, colTri): d = d - 1: Loop
If g <= d Then
For c = LBound(a, 2) To UBound(a, 2)
temp = a(g, c): a(g, c) = a(d, c): a(d, c) = temp
Next
g = g + 1: d = d - 1
End If
Loop While g <= d
If g < droi Then Call Tri(a, g, droi, colTri)
If gauc < d Then Call Tri(a, gauc, d, colTri)
End Sub
Je vous remercie par avance de l'aide que vous pourrez m'apporter.
Cordialement,
Erwan.