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
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 changementA+
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.