Bonjour,
Je suis nouveau sur de forum.
J'ai le besoin pour mon travail de développer un formulaire de saisie et de modification d'une base de données.
J'ai quasiment fini mais bloque sur une problématique.
J'ai un text box sur lequel je souhaite exercer plusieurs contrôles de saisie: type de caractères, nombre de caractère et impossibilité de créer une référence en doublon.
Je souhaite que la donnée ne puisse être ajouter dans la base de donnée uniquement si toutes les conditions sont remplies (ce qui n'est pas le cas dans mon code)
Par ailleurs, je souhaite que le contrôle s'applique soit avant l'actionnement du bouton ajouter ou lors du passage sur un autre champ
Comment peut on faire pour imbriquer des "évènements"?
J'espère avoir réussi à être compréhensible..
Ci-dessous mon code
'*************************************************
'FORMAT REF CONTRAT
Vérification du format de saisie et activation du bouton ajout
'*************************************************
Private Sub TextBox_ref_Change()
lblMessage = ""
Dim Formatage As String, LenT As Integer
Const CH As String = "11-AAA-1111"
Const COMP As String = "##[-][a-zA-Z][a-zA-Z][a-zA-Z][-]####"
LenT = Len(TextBox_Ref.Value)
If LenT <= Len(CH) Then
If LenT > 0 Then
Formatage = TextBox_Ref.Value & Right(CH, Len(CH) - LenT)
If LenT = 11 Then
CommandButton_Ajout.Enabled = True 'Active le bouton
Else
CommandButton_Ajout.Enabled = False 'Maintient le bouton désactiver
End If
If Not Formatage Like COMP Then
lblMessage = "votre saisie doit avoir le format 00-XXX-0000"
TextBox_Ref.Value = Left(TextBox_Ref.Value, LenT - 1)
End If
End If
Else
TextBox_Ref.Value = Left(TextBox_Ref.Value, LenT - 1)
lblMessage = "votre saisie doit avoir le format 00-XXX-0000"
End If
End Sub
'****************************************
'FORMAT REF CONTRAT
'Limite le nombre de caractère autorisés
'****************************************
Private Sub TextBox_Ref_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("1234567890ACHDVPTE-", Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub
'************************************************************
'prodédure pour éviter doublons
'************************************************************
Private Sub TextBox_Ref_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Dim Onglet As Worksheet 'déclaration de la variable onglet
Dim COL As Byte 'déclaration de la variable COLonne
Dim DL As Integer 'déclaration de la variable Dernière Ligne
Dim TV As Variant 'déclaration de la variable Tableau de Valeurs
CommandButton_Ajout.Enabled = False 'Maintient le bouton désactiver
Set Onglet = Sheets("Donnees")
COL = 1
DL = Onglet.Cells(Application.Rows.Count, COL).End(xlUp).Row 'définit la dernière ligne DL de la COLonne de l'Onglet
TV = Onglet.Range(Onglet.Cells(1, COL), Onglet.Cells(DL, COL)) 'définit le Tableau des Valeurs
For i = 2 To DL 'boucle sur toutes les lignes I du tableau des valeurs TV
If CStr(TV(i, 1)) = Me.TextBox_Ref.Value Then 'si la donnée de la boucle (convertie en texte) est égale à la valeur de textbox_ref
Cancel = True
MsgBox ("contrat existant")
Me.TextBox_Ref = ""
CommandButton_Ajout.Enabled = False 'Maintient le bouton désactiver
With Me.TextBox_Ref
.SelStart = 0
.SelLength = Len(.Value)
End With
Exit For
End If
Next
End Sub
Je suis nouveau sur de forum.
J'ai le besoin pour mon travail de développer un formulaire de saisie et de modification d'une base de données.
J'ai quasiment fini mais bloque sur une problématique.
J'ai un text box sur lequel je souhaite exercer plusieurs contrôles de saisie: type de caractères, nombre de caractère et impossibilité de créer une référence en doublon.
Je souhaite que la donnée ne puisse être ajouter dans la base de donnée uniquement si toutes les conditions sont remplies (ce qui n'est pas le cas dans mon code)
Par ailleurs, je souhaite que le contrôle s'applique soit avant l'actionnement du bouton ajouter ou lors du passage sur un autre champ
Comment peut on faire pour imbriquer des "évènements"?
J'espère avoir réussi à être compréhensible..
Ci-dessous mon code
'*************************************************
'FORMAT REF CONTRAT
Vérification du format de saisie et activation du bouton ajout
'*************************************************
Private Sub TextBox_ref_Change()
lblMessage = ""
Dim Formatage As String, LenT As Integer
Const CH As String = "11-AAA-1111"
Const COMP As String = "##[-][a-zA-Z][a-zA-Z][a-zA-Z][-]####"
LenT = Len(TextBox_Ref.Value)
If LenT <= Len(CH) Then
If LenT > 0 Then
Formatage = TextBox_Ref.Value & Right(CH, Len(CH) - LenT)
If LenT = 11 Then
CommandButton_Ajout.Enabled = True 'Active le bouton
Else
CommandButton_Ajout.Enabled = False 'Maintient le bouton désactiver
End If
If Not Formatage Like COMP Then
lblMessage = "votre saisie doit avoir le format 00-XXX-0000"
TextBox_Ref.Value = Left(TextBox_Ref.Value, LenT - 1)
End If
End If
Else
TextBox_Ref.Value = Left(TextBox_Ref.Value, LenT - 1)
lblMessage = "votre saisie doit avoir le format 00-XXX-0000"
End If
End Sub
'****************************************
'FORMAT REF CONTRAT
'Limite le nombre de caractère autorisés
'****************************************
Private Sub TextBox_Ref_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("1234567890ACHDVPTE-", Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub
'************************************************************
'prodédure pour éviter doublons
'************************************************************
Private Sub TextBox_Ref_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Dim Onglet As Worksheet 'déclaration de la variable onglet
Dim COL As Byte 'déclaration de la variable COLonne
Dim DL As Integer 'déclaration de la variable Dernière Ligne
Dim TV As Variant 'déclaration de la variable Tableau de Valeurs
CommandButton_Ajout.Enabled = False 'Maintient le bouton désactiver
Set Onglet = Sheets("Donnees")
COL = 1
DL = Onglet.Cells(Application.Rows.Count, COL).End(xlUp).Row 'définit la dernière ligne DL de la COLonne de l'Onglet
TV = Onglet.Range(Onglet.Cells(1, COL), Onglet.Cells(DL, COL)) 'définit le Tableau des Valeurs
For i = 2 To DL 'boucle sur toutes les lignes I du tableau des valeurs TV
If CStr(TV(i, 1)) = Me.TextBox_Ref.Value Then 'si la donnée de la boucle (convertie en texte) est égale à la valeur de textbox_ref
Cancel = True
MsgBox ("contrat existant")
Me.TextBox_Ref = ""
CommandButton_Ajout.Enabled = False 'Maintient le bouton désactiver
With Me.TextBox_Ref
.SelStart = 0
.SelLength = Len(.Value)
End With
Exit For
End If
Next
End Sub