Rendre obligatoire la saisie d'une Textbox avant de valider VBA

Raph67

XLDnaute Nouveau
Bonjour à tous,

je rencontre un problème de saisie obligatoire avant validation.

il faudrait que l'on ne puisse pas valider le formulaire si toutes les textbox (44) ne soient pas remplies.

voici mon code que j'utilise mais inefficace:

Private Sub txtDesignation_Change()
If txtDesignation <> "" Then

BtnAjout.Enabled = True 'Activer le bouton
Else
BtnAjout.Enabled = False ' Désactiver le bouton

End If


merci de votre aide
 

job75

XLDnaute Barbatruc
Bonjour Raph67,

Le plus simple est d'utiliser cette macro pour le bouton :
VB:
Private Sub BtnAjout_Click()
Dim c As Control
For Each c In Controls
    If TypeName(c) = "TextBox" Then If c = "" Then c.SetFocus: Exit Sub
Next
'suite du code
End Sub
A+
 

youky(BJ)

XLDnaute Barbatruc
Bonjour Raph,
Perso je ne renomme pas mes textbox ou autres
voici comment je procède pour voir si 44 textbox sont remplis avec le bouton Valider
For k=1 to 44
if controls("TextBox" & k)<>"" then i =i+1
Next
if i<44 then msgbox "Manque des données":exit sub
'pour remplir sur l'onglet toutes les données des textbox
for k= 1 to 44
cells(lig,k)=controls("TextBox" & k)
Next
Bruno
Désolé bonjour Job75
 

Raph67

XLDnaute Nouveau
Bonjour Youky et Job75,

merci pour votre retour.
lorsque j'ai commencé à faire du VBA on m'avait dit de donner un noms à chaque Textbox:rolleyes:

comment revenir en arrière maintenant dans mon fichier??

Job75 j'ai essayé ton code mais j'ai un message d'erreur qui apparait.
désoler je débute en autodidacte.
Capture.PNG
 

Raph67

XLDnaute Nouveau
Voici mes codes:
'*******************
' Proc?dure permettant
' de fermer le formulaire
' *********************
'*******************
' Proc?dure permettant de r?initialiser
' les champs du formulaire
'********************************


Private Sub Breg1_Change()
Feuil1.Range("J2").Value = Breg1.Value ' on affecte le noms du produit ? partir de sa r?ference
Breg2.Value = Feuil1.Range("K2").Value
End Sub

Private Sub BtnEffacer_Click() ' on note la combo pour un effacement

cboArticle = ""
txtDesignation = ""
TxtBoite = ""
TxtDate = ""
TxtMainsoeuvre = ""
TxtDebut = ""
TxtFin = ""
TxtOuverture = ""
TxtPause = ""
TxtStandbyp = ""
TxtChgtproduitp = ""
TxtChgtformatp = ""
TxtNettoyagep = ""
CboPanne1p = ""
TxtTempsp1 = ""
CboPanne2p = ""
TxtTempsp2 = ""
CboPanne3p = ""
TxtTempsp3 = ""
Txtlardons = ""
TxtOignons = ""
Txtmasse = ""
Txtpate = ""
TxtDechetpate = ""
TxtPertemasse = ""
TxtFonds = ""
TxtFondscreme = ""
TxtFondsgarnie = ""
TxtAttentec = ""
TxtChgtproduitc = ""
TxtChgtformatc = ""
TxtNettoyagec = ""
TxtRattrapage = ""
CboPanne1c = ""
TxtTempsc1 = ""
CboPanne2c = ""
TxtTempsc2 = ""
CboPanne3c = ""
TxtTempsc3 = ""
TxtNccdt = ""
TxtCdtfilmeuse = ""
TxtCdttunnel = ""
TxtCdtetuyeuse = ""
TxtCommentaire = ""
TxtMoyenneponderale = ""


End Sub
Private Sub btnfermer_Click()

Unload Me
End Sub
'*****************
' Proc?dure permettant d'acc?der
' ? la source de donn?e
' *****************
Private Sub BtnSource_Click()
Sheets("Source").Activate
Range("A1").Select

End Sub
'***************
' proc?dure permettant d'auter
' le bouton d'aujout d'enregistrement
'***************

Private Sub cboArticle_Change() ' on affecte le noms du produit ? partir de sa reference
Feuil1.Range("K2").Value = cboArticle.Value
txtDesignation.Value = Feuil1.Range("L2").Value

End Sub



Private Sub txtDesignation_Change()
If txtDesignation <> "" Then

BtnAjout.Enabled = True 'Activer le bouton
Else
BtnAjout.Enabled = False ' D?sactiver le bouton

End If

End Sub
'*****************************
' proc?dure permettant d' ajouter un nouvel enregistrement
' dans la base de donn?es
'*************************************

Private Sub BtnAjout_Click()
Sheets("Source").Activate
Range("A1").Select
Selection.End(xlDown).Select ' on se positionne sur la derniere ligne non vide
Selection.Offset(1, 0).Select 'on se d?cale d'une ligne vers le bas
ActiveCell = cboArticle.Value
ActiveCell.Offset(0, 1).Value = txtDesignation
ActiveCell.Offset(0, 2).Value = TxtDate
ActiveCell.Offset(0, 3).Value = TxtBoite
ActiveCell.Offset(0, 4).Value = TxtMainsoeuvre
ActiveCell.Offset(0, 5).Value = TxtDebut
ActiveCell.Offset(0, 6).Value = TxtFin
ActiveCell.Offset(0, 7).Value = TxtOuverture
ActiveCell.Offset(0, 8).Value = TxtPause
ActiveCell.Offset(0, 9).Value = TxtStandbyp
ActiveCell.Offset(0, 10).Value = TxtChgtproduitp
ActiveCell.Offset(0, 11).Value = TxtChgtformatp
ActiveCell.Offset(0, 12).Value = TxtNettoyagep
ActiveCell.Offset(0, 13).Value = CboPanne1p
ActiveCell.Offset(0, 14).Value = TxtTempsp1
ActiveCell.Offset(0, 15).Value = CboPanne2p
ActiveCell.Offset(0, 16).Value = TxtTempsp2
ActiveCell.Offset(0, 17).Value = CboPanne3p
ActiveCell.Offset(0, 18).Value = TxtTempsp3
ActiveCell.Offset(0, 19).Value = Txtmasse
ActiveCell.Offset(0, 20).Value = Txtpate
ActiveCell.Offset(0, 21).Value = Txtlardons
ActiveCell.Offset(0, 22).Value = TxtOignons
ActiveCell.Offset(0, 23).Value = TxtDechetpate
ActiveCell.Offset(0, 24).Value = TxtPertemasse
ActiveCell.Offset(0, 25).Value = TxtFonds
ActiveCell.Offset(0, 26).Value = TxtFondscreme
ActiveCell.Offset(0, 27).Value = TxtFondsgarnie
ActiveCell.Offset(0, 28).Value = TxtAttentec
ActiveCell.Offset(0, 29).Value = TxtChgtproduitc
ActiveCell.Offset(0, 30).Value = TxtChgtformatc
ActiveCell.Offset(0, 31).Value = TxtNettoyagec
ActiveCell.Offset(0, 32).Value = TxtRattrapage
ActiveCell.Offset(0, 33).Value = CboPanne1c
ActiveCell.Offset(0, 34).Value = TxtTempsc1
ActiveCell.Offset(0, 35).Value = CboPanne2c
ActiveCell.Offset(0, 36).Value = TxtTempsc2
ActiveCell.Offset(0, 37).Value = CboPanne3c
ActiveCell.Offset(0, 38).Value = TxtTempsc3
ActiveCell.Offset(0, 39).Value = TxtNccdt
ActiveCell.Offset(0, 40).Value = TxtCdtfilmeuse
ActiveCell.Offset(0, 41).Value = TxtCdttunnel
ActiveCell.Offset(0, 42).Value = TxtCdtetuyeuse
ActiveCell.Offset(0, 43).Value = TxtCommentaire
ActiveCell.Offset(0, 44).Value = TxtMoyenneponderale

MsgBox "Votre saisie a bien ?t? rajout?e ? la base de donn?es", vbOKOnly + vbInformation, "CONFIRMATION"

End Sub


Private Sub UserForm_Initialize()
TxtDebut = Format(Now, "hh:nn")
TxtFin = Format(Now, "hh:nn")
End Sub
Private Sub UserForm_Click()
End Sub

Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
End Sub
 

job75

XLDnaute Barbatruc
Job75 j'ai essayé ton code mais j'ai un message d'erreur qui apparait.
désoler je débute en autodidacte.
Autodidacte mais pas analphabète j'espère.

Le message "Nom ambigu détecté : BtnAjoutClick" est clair : vous ne pouvez pas avoir 2 macros portant le même nom.

Et le code de mon post #2 est clair lui aussi : dans votre macro BtnAjoutClick ajoutez au début :
VB:
Dim c As Control
For Each c In Controls
    If TypeName(c) = "TextBox" Then If c = "" Then c.SetFocus: Exit Sub
Next
 

Raph67

XLDnaute Nouveau
Merci Job75 pour le remontage d'oreille en pointe ;)

si je comprend bien pour ma par je dois modifier :

If TypeName(c) = "TextBox" Then If c = "" Then c.SetFocus: Exit Sub

par :

If TypeName(c) = "TxtDate" Then If c = "" Then c.SetFocus: Exit Sub
If TypeName(c) = "TxtDebut" Then If c = "" Then c.SetFocus: Exit Sub

etc etc?
 

Raph67

XLDnaute Nouveau
Je l'ai fait justement mais cela n'a rien changé.
voici :

Private Sub BtnAjout_Click()
Sheets("Source").Activate
Range("A1").Select
Selection.End(xlDown).Select ' on se positionne sur la derniere ligne non vide
Selection.Offset(1, 0).Select 'on se d?cale d'une ligne vers le bas
ActiveCell = cboArticle.Value
ActiveCell.Offset(0, 1).Value = txtDesignation
ActiveCell.Offset(0, 2).Value = TxtDate
ActiveCell.Offset(0, 3).Value = TxtBoite
ActiveCell.Offset(0, 4).Value = TxtMainsoeuvre
ActiveCell.Offset(0, 5).Value = TxtDebut
ActiveCell.Offset(0, 6).Value = TxtFin
ActiveCell.Offset(0, 7).Value = TxtOuverture
ActiveCell.Offset(0, 8).Value = TxtPause
ActiveCell.Offset(0, 9).Value = TxtStandbyp
ActiveCell.Offset(0, 10).Value = TxtChgtproduitp
ActiveCell.Offset(0, 11).Value = TxtChgtformatp
ActiveCell.Offset(0, 12).Value = TxtNettoyagep
ActiveCell.Offset(0, 13).Value = CboPanne1p
ActiveCell.Offset(0, 14).Value = TxtTempsp1
ActiveCell.Offset(0, 15).Value = CboPanne2p
ActiveCell.Offset(0, 16).Value = TxtTempsp2
ActiveCell.Offset(0, 17).Value = CboPanne3p
ActiveCell.Offset(0, 18).Value = TxtTempsp3
ActiveCell.Offset(0, 19).Value = Txtmasse
ActiveCell.Offset(0, 20).Value = Txtpate
ActiveCell.Offset(0, 21).Value = Txtlardons
ActiveCell.Offset(0, 22).Value = TxtOignons
ActiveCell.Offset(0, 23).Value = TxtDechetpate
ActiveCell.Offset(0, 24).Value = TxtPertemasse
ActiveCell.Offset(0, 25).Value = TxtFonds
ActiveCell.Offset(0, 26).Value = TxtFondscreme
ActiveCell.Offset(0, 27).Value = TxtFondsgarnie
ActiveCell.Offset(0, 28).Value = TxtAttentec
ActiveCell.Offset(0, 29).Value = TxtChgtproduitc
ActiveCell.Offset(0, 30).Value = TxtChgtformatc
ActiveCell.Offset(0, 31).Value = TxtNettoyagec
ActiveCell.Offset(0, 32).Value = TxtRattrapage
ActiveCell.Offset(0, 33).Value = CboPanne1c
ActiveCell.Offset(0, 34).Value = TxtTempsc1
ActiveCell.Offset(0, 35).Value = CboPanne2c
ActiveCell.Offset(0, 36).Value = TxtTempsc2
ActiveCell.Offset(0, 37).Value = CboPanne3c
ActiveCell.Offset(0, 38).Value = TxtTempsc3
ActiveCell.Offset(0, 39).Value = TxtNccdt
ActiveCell.Offset(0, 40).Value = TxtCdtfilmeuse
ActiveCell.Offset(0, 41).Value = TxtCdttunnel
ActiveCell.Offset(0, 42).Value = TxtCdtetuyeuse
ActiveCell.Offset(0, 43).Value = TxtCommentaire
ActiveCell.Offset(0, 44).Value = TxtMoyenneponderale

MsgBox "Votre saisie a bien ?t? rajout?e ? la base de donn?es", vbOKOnly + vbInformation, "CONFIRMATION"


Dim c As Control
For Each c In Controls
If TypeName(c) = "TextBox" Then If c = "" Then c.SetFocus: Exit Sub
Next

End Sub

je n'ai pas cette chance de pouvoir etre expert mais bricoleur toute mes excuses mais " celui qui pose une question risque de passer pour un sot. Celui qui nen pose pas est sûr de le rester"
 

youky(BJ)

XLDnaute Barbatruc
Raph, tu es bricoleur mais moins en vba….hihi
Job disait >
Ajoutez mon code
sans le modifier
, un point c'est tout
Bon j'ai ajouté les qlq lignes tu copies sans rien retoucher cette fois
(vu qu'il n'y a pas de fichier exemple j'ai fait avec le Bloc Note et non testé)
Bruno
VB:
Private Sub BtnAjout_Click()
Dim c As Control
For Each c In Controls
    If TypeName(c) = "TextBox" Then If c = "" Then c.SetFocus:msgbox" Merci de remplir la donnée!: Exit Sub
Next
lig=[A65000].end(3).row+1'lig ou écrire
For Each c In Controls
   If TypeName(c) = "TextBox" Then
    col=col+1
    cells(lig,col)=c.value
  End if
Next
End Sub
 

Discussions similaires