Problème avec Excel VBA

Bonjour à tous.

Voilà, je vous expose mon problème. Je suis novice en utilisation Excel et encore plus en VBA.

Je suis actuellement des tuto-cours pour apprendre en autodidacte.

Aujourd'hui, j'essaye de faire mon premier logiciel de gestion budget et tout fonctionne bien sauf une manipulation et là je sais plus où chercher.

Je vous montre une capture de la page excel et je vous montre le code vba et là où ça bloque.

Pour le reste, tout fonctionne, le remplissage de cellule et la sauvegarde

Si une personne arrive à me dépanner, ça me sortirait une épine du pied.

Un très grand merci à vous.

Private Sub Catégorie_Change()
Me.SousCatégorie.RowSource = "Sortie" & Me.Catégorie <====== "" C'est cette ligne qui me fait défaut (et la même un peu plus bas ""

End Sub

Private Sub CommandButtonValider_Click()
If Me.Description = "" Or Me.Catégorie.ListIndex < 0 Or Me.SousCatégorie.ListIndex < 0 Or Me.TextBoxDate = "" Or Me.Montant = "" Or Me.Compte.ListIndex < 0 Then
    MsgBox ("Information(s) manquante(s) !")
Else
    'Contrôler si la base de données est vide oui ou non

    If Sheets("Entrées").Range("B5") <> "" Then
        Sheets("Entrées").ListObjects(1).ListRows.Add
    End If

    'Trouver la dernière ligne et ajouter les informations

    dlt = Sheets("Entrées").Range("B999999").End(xlUp).Row

    'Désormais, ajouter les informations

    Sheets("Entrées").Range("C" & dlt) = Me.TextBoxDate
    Sheets("Entrées").Range("D" & dlt) = "Sortie"
    Sheets("Entrées").Range("E" & dlt) = CDbl(Me.Montant)
    Sheets("Entrées").Range("F" & dlt) = Me.Compte.Column(1)
    Sheets("Entrées").Range("G" & dlt) = Me.Description
    Sheets("Entrées").Range("H" & dlt) = Me.Catégorie
    Sheets("Entrées").Range("J" & dlt) = Me.SousCatégorie

    'Après validation, vider toutes les informations

    Me.TextBoxDate = ""
    Me.Compte = ""
    Me.Montant = ""
    Me.Catégorie = ""
    Me.SousCatégorie.RowSource = "Sortie" & Me.Catégorie <====== "" Celle-ci aussi du coup
    Me.Description = ""

    ThisWorkbook.RefreshAll
    ThisWorkbook.Save
    Me.ListBoxComptes1.RowSource = "Compte"

End If

End Sub

Private Sub LabelRetour_Click()
Unload Me
home.Show

End Sub

Private Sub Montant_AfterUpdate()
Me.Montant = Replace(Me.Montant, ".", ",")
Me.Montant = Format(Me.Montant, "currency")

End Sub

Private Sub Montant_BeforeDragOver(ByVal Cancel As MSForms.ReturnBoolean, ByVal Data As MSForms.DataObject, ByVal X As Single, ByVal Y As Single, ByVal DragState As MSForms.fmDragState, ByVal Effect As MSForms.ReturnEffect, ByVal Shift As Integer)

End Sub

Private Sub Montant_Change()

End Sub

Private Sub TextBoxDate_AfterUpdate()
On Error GoTo Message
Me.TextBoxDate = CDate(TextBoxDate)
Exit Sub

Message:
MsgBox ("Format de date non valide !")
Me.TextBoxDate = Empty

End Sub

Private Sub TextBoxDate_Change()

End Sub

Private Sub UserForm_Click()

End Sub

Private Sub UserForm_Initialize()
Me.ListBoxComptes1.RowSource = "Comptes"
Me.Catégorie.RowSource = "Sortie0"

End Sub
capture capture1

Si il vous faut d'autre capture ou une partie de mon fichier excel, dites-le moi.

PS : Ce tuto que je suis à été effectué sous excel 2013 je crois ou 2016

bonjour,

Ce qu'il faudrait surtout c'est le classeur en question.

A+

Voilà le classeur

Bonsoir,

Modifier comme suit :

Private Sub Catégorie_Change()
On Error GoTo GestERR
Me.SousCatégorie.RowSource = "Sortie" & Me.Catégorie
Exit Sub
GestERR:
Me.SousCatégorie = ""
End Sub

Private Sub CommandButtonValider_Click()
If Me.Description = "" Or Me.Catégorie.ListIndex < 0 Or Me.SousCatégorie.ListIndex < 0 Or Me.TextBoxDate = "" Or Me.Montant = "" Or Me.Compte.ListIndex < 0 Then
    MsgBox ("Information(s) manquante(s) !")
Else
    'Contrôler si la base de données est vide oui ou non

    If Sheets("Entrées").Range("B5") <> "" Then
        Sheets("Entrées").ListObjects(1).ListRows.Add
    End If

    'Trouver la dernière ligne et ajouter les informations

    dlt = Sheets("Entrées").Range("B999999").End(xlUp).Row

    'Désormais, ajouter les informations

    Sheets("Entrées").Range("C" & dlt) = Me.TextBoxDate
    Sheets("Entrées").Range("D" & dlt) = "Sortie"
    Sheets("Entrées").Range("E" & dlt) = CDbl(Me.Montant)
    Sheets("Entrées").Range("F" & dlt) = Me.Compte.Column(1)
    Sheets("Entrées").Range("G" & dlt) = Me.Description
    Sheets("Entrées").Range("H" & dlt) = Me.Catégorie
    Sheets("Entrées").Range("J" & dlt) = Me.SousCatégorie

    'Après validation, vider toutes les informations

    Me.TextBoxDate = ""
    Me.Compte = ""
    Me.Montant = ""
    Me.Catégorie = ""
    Me.SousCatégorie = ""
    Me.Description = ""

    ThisWorkbook.RefreshAll
    ThisWorkbook.Save
    Me.ListBoxComptes1 = ""
End If
End Sub
'Le reste sans changement

A+

Oh super, je vais essayer de ce pas, je vous tiens au courant

Edit : Merci infiniement, tout fonctionne.

Mais du coup, pour comprendre, le " GestERR " qu'est-ce donc?

Euh... J'ai l'habitude de dire que ça sert à mettre la poussière sous le tapis !

C'est un peu le cas ici : On est dans une construction un peu bancale alors pour ne pas jeter le bébé avec l'eau du bain, on saute par dessus l'erreur.

On appelle ça une étiquette, ça renvoie VBA à la fin.

On aurait également pu utiliser On Error Resume Next qui aurait produit le même effet mébon... ce sont des subtilités de puriste (ou des manies de vieux de garçon ?)

qui n'ont pas un grand intérêt dans ce cas.

A+

Je vois le raisonnement. En tout cas, tout fonctionne, merci beaucoup.

Rechercher des sujets similaires à "probleme vba"