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 If

A+

Rechercher des sujets similaires à "code vba aide"