Code VBA : Aide
Bonjour
Je vous soumets mon code ci-dessous pour expertise. Le code s'exécute bien et les données saisies s'enregistrent. Cependant un message d'erreur s'affiche constamment "Le champ HT ne peut pas être vide".
Private Sub UserForm_Initialize()
TxtDate.Value = "JJ/MM/AAAA"
TxtDate.ForeColor = RGB(128, 128, 128) ' Gris clair
End Sub
Private Sub TxtDate_Enter()
If TxtDate.Value = "JJ/MM/AAAA" Then
TxtDate.Value = ""
TxtDate.ForeColor = vbBlack
End If
End Sub
Private Sub TxtDate_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TxtDate.Value = "" Then
TxtDate.Value = "JJ/MM/AAAA"
TxtDate.ForeColor = RGB(128, 128, 128) ' Gris clair
End If
End Sub
Private Sub TxtHT_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case 8, 44, 45 'Backspace, virgule, signe moins
'Autoriser ces touches
Case 48 To 57 'Chiffres de 0 à 9
'Autoriser ces chiffres
Case Else
'Interdire les autres caractères
KeyAscii = 0
End Select
End Sub
Private Sub TxtHT_AfterUpdate()
'Vérifie si la valeur est numérique avant d'appliquer le format
If IsNumeric(TxtHT.Value) Then
'Applique le format avec des milliers séparés et deux décimales
TxtHT.Value = Format(CDbl(TxtHT.Value), "#,##0.00")
Else
MsgBox "Veuillez entrer une valeur numérique valide.", vbExclamation, "Valeur invalide."
TxtHT.Value = ""
End If
Debug.Print "Valeur après mis à jour:[" & TxtHT.Value & "]"
End Sub
Private Sub TxtMTVA_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case 8, 44, 45 'Backspace, virgule, signe moins
'Autoriser ces touches
Case 48 To 57 'Chiffres de 0 à 9
'Autoriser ces chiffres
Case Else
'Interdire les autres caractères
KeyAscii = 0
End Select
End Sub
Private Sub TxtMTVA_AfterUpdate()
TxtMTVA.Value = Format(TxtMTVA.Value, "#,##0")
End Sub
Private Sub TxtMTTC_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case 8, 44, 45 'Backspace, virgule, signe moins
'Autoriser ces touches
Case 48 To 57 'Chiffres de 0 à 9
'Autoriser ces chiffres
Case Else
'Interdire les autres caractères
KeyAscii = 0
End Select
End Sub
Private Sub TxtMTTC_AfterUpdate()
TxtMTTC.Value = Format(TxtMTTC.Value, "#,##0")
End Sub
Private Sub TxtRetenue_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case 8, 44, 45 'Backspace, virgule, signe moins
'Autoriser ces touches
Case 48 To 57 'Chiffres de 0 à 9
'Autoriser ces chiffres
Case Else
'Interdire les autres caractères
KeyAscii = 0
End Select
End Sub
Private Sub TxtRetenue_AfterUpdate()
TxtRetenue.Value = Format(TxtRetenue.Value, "#,##0")
End Sub
Private Sub TxtNumCheque_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case KeyAscii
Case 8, 44, 45 'Backspace, virgule, signe moins
'Autoriser ces touches
Case 48 To 57 'Chiffres de 0 à 9
'Autoriser ces chiffres
Case Else
'Interdire les autres caractères
KeyAscii = 0
End Select
End Sub
Private Sub TxtClient_Change()
If TxtClient.Value <> "" Then
BtnValider.Enabled = True
Else
BtnValider.Enabled = False
End If
TxtClient.Text = UCase(TxtClient.Text)
End Sub
Private Sub TxtPeriode_Change()
Dim valeur As String
valeur = TxtPeriode.Value
If Len(valeur) = 10 Then ' Vérifie la longueur de la saisie
TxtPeriode.Value = valeur & " - " ' Ajoute le séparateur " - " après la première date
ElseIf Len(valeur) = 23 Then ' Vérifie que la saisie est complète
If Not IsDate(Left(valeur, 10)) Or Not IsDate(Right(valeur, 10)) Then
MsgBox "Format de date incorrect. Veuillez entrer les dates au format JJ/MM/AAAA - JJ/MM/AAAA.", vbExclamation
TxtPeriode.Value = ""
End If
End If
End Sub
Private Sub CboTVA_Change()
Dim HT As Double
Dim MTVA As Double
'Désactiver la gestion d'erreurs temporaires
'On Error GoTo ErreurConversion
On Error Resume Next
'Vérification si TxtHT contient une valeur
If Trim(TxtHT.Value) = "" Then
MsgBox "Le champ HT ne peut pas être vide.", vbExclamation, "Erreur de saisie"
Exit Sub
End If
'Remplacement de la virgule par un point si nécessaire
TxtHT.Value = Replace(TxtHT.Value, " ", "")
'Vérification si TxtHT contient une valeur numérique
If IsNumeric(TxtHT.Value) Then
HT = CDbl(TxtHT.Value)
Else
MsgBox "Veuillez entrer une valeur numérique dans le champ HT", vbExclamation, "Valeur invalide"
Exit Sub
End If
'Réactivation de la gestion des erreurs critiques
On Error GoTo ErreurConversion
'Calcul de la TVA
If CboTVA.Value = "OUI" Then
MTVA = HT * 0.18
Else
MTVA = 0
End If
'Calcul des montants formatés
TxtMTVA.Value = Format(MTVA, "#,##0.00")
TxtMTTC.Value = Format(HT + MTVA, "#,##0.00")
TxtRetenue.Value = Format(HT * 0.05, "#,##0.00")
Exit Sub 'Assurez-vous de quitter avant de tomber sur l'étiquette d'erreur
ErreurConversion:
MsgBox "Erreur lors de la conversion. Veuillez vérifier la valeur dans le champ HT.", vbCritical, "Erreur"
End Sub
Private Sub BtnValider_Click()
Dim ws As Worksheet
Dim nomfeuille As String
Dim derniereligne As Long
Application.ScreenUpdating = False
nomfeuille = TxtClient.Value
If nomfeuille <> "" Then
On Error Resume Next
Set ws = Worksheets(nomfeuille)
On Error GoTo 0
If ws Is Nothing Then
Set ws = Worksheets.Add
ws.Name = nomfeuille
ws.Move After:=Worksheets(Worksheets.Count) ' Déplacer la feuille à la fin
' Ajouter les noms de colonnes
ws.Cells(1, 1).Value = "Souscripteur"
ws.Cells(1, 2).Value = "Période"
ws.Cells(1, 3).Value = "Montant HT"
ws.Cells(1, 4).Value = "Montant TVA"
ws.Cells(1, 5).Value = "Montant TTC"
ws.Cells(1, 6).Value = "Retenue fiscale"
ws.Cells(1, 7).Value = "Mode de Paiement"
ws.Cells(1, 8).Value = "Banque"
ws.Cells(1, 9).Value = "N° Chèque"
ws.Cells(1, 10).Value = "Date Règlt"
End If
derniereligne = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1
ws.Cells(derniereligne, 1).Value = TxtClient.Value
ws.Cells(derniereligne, 2).Value = TxtPeriode.Value
ws.Cells(derniereligne, 3).Value = CDbl(TxtHT.Value)
ws.Cells(derniereligne, 4).Value = CDbl(TxtMTVA.Value)
ws.Cells(derniereligne, 5).Value = CDbl(TxtMTTC.Value)
ws.Cells(derniereligne, 6).Value = CDbl(TxtRetenue.Value)
ws.Cells(derniereligne, 7).Value = CboMode.Value
ws.Cells(derniereligne, 8).Value = TxtBanque.Value
ws.Cells(derniereligne, 9).Value = TxtNumCheque.Value
ws.Cells(derniereligne, 10).Value = Format(CDate(TxtDate.Value), "dd/mm/yyyy")
End If
' Après l'enregistrement, réinitialisez les valeurs des contrôles
TxtClient.Value = ""
TxtPeriode.Value = ""
TxtHT.Value = ""
TxtMTVA.Value = ""
TxtMTTC.Value = ""
TxtRetenue.Value = ""
CboMode.Value = ""
TxtBanque.Value = ""
TxtNumCheque = ""
TxtDate.Value = ""
CboTVA.Value = ""
Sheets("Param").Activate
Application.ScreenUpdating = True
End Sub
Private Sub BtnAnnuler_Click()
TxtClient.Value = ""
TxtPeriode.Value = ""
TxtHT.Value = ""
TxtMTVA.Value = ""
TxtMTTC.Value = ""
TxtRetenue.Value = ""
CboMode.Value = ""
TxtBanque.Value = ""
TxtNumCheque = ""
TxtDate.Value = ""
CboTVA = ""
End Sub
Private Sub BtnFermer_Click()
ThisWorkbook.Save
Unload Me
End Sub
Bonjour,
Si le controle "TxtHT" ne peut pase tre vide, pourquoi ne pas l'initialiser sur une valeur par défaut ?
Car autrement, vous levez votre erreur à chaque fois que le controle "CboTVA" est modifié puisque c'est dans cet Event que vous vérifiez le contenu de TxtHT, et affichez le message d'erreur.
Donc ou bien vous devez préremplir TxtHT, ou bien vous devez retirer/assouplir la vérification dans CboTVA_Change.
Merci.
L'entrée dans le contrôle "TxtHT" est différente à chaque saisie.
Salut KitJean,
Salut Saboh,
Difficile de répondre sans fichier... et donc, souvent, pas de réponse satisfaisante aux demandes!
Qui plus est, un code aussi long est quasi impossible à étudier sans le soutien dudit fichier.
Pour le rendre plus lisible, utilise le symbole </> dans la barre d'outils de la fenêtre d'édition de tes messages.
'Vérification si TxtHT contient une valeur
If Trim(TxtHT.Value) = "" Then
MsgBox "Le champ HT ne peut pas être vide.", vbExclamation, "Erreur de saisie"
Exit Sub
End IfA+