Affectation mensualisée des dépenses et recettes
Bonjour à tous,
J'ai créé un fichier (en pièce jointe) permettant de suivre les recettes et les dépenses d'un compte.
Dans l'onglet "Base" j'ai le tableau "Paramétrage" qui définit les différentes sources de recettes et de dépenses. Il y a aussi les 12 mois de l'année. Ces données me servent à alimenter les listes déroulantes de l'onglet "2014".
Dans l'onglet "2014" il y a un Bouton "Saisie". Celui-ci ouvre un Userform dans lequel je documente le date du jour, le mois, l'intitulé de l'opération et le montant.
En appuyant sur "Valider" les différentes valeurs sont transférées dans le tableau de synthèse.
C'est là que les choses se compliquent pour moi !
Je voudrais que l'affectation se fasse dans les colonnes du mois sélectionné (dans le Userform) et qu'en fonction de l'intitulé, l'affectation du montant soit en Recettes ou en Dépenses (suivant les listes des colonnes I et J de l'onglet "Base").
J'espère avoir été clair dans mes explications.
Un grand merci à toute personne qui pourra m'aider en consacrant un peu de son temps à résoudre mon problème.
Bonne journée à tous.
Salutations.
Thierry
Bonjour Biquet08 et
Voici le code du bouton valider de ton USF à remplacer
Private Sub BC_Valide_Click()
Dim sAnnée As String
Dim ColFind As Long, ColType As Long, ChoixMois As Integer, ColMois As Long
Dim NLig As Long
'Le champ "Date" ne doit pas être vide
If Me.TB_jour = "" Then
'Retour à la saisie du montant
Me.TB_jour.SetFocus
Exit Sub
End If
'Le champ "Mois" ne doit pas être vide
If Me.CB_Mois = "" Then
'Retour à la saisie du montant
Me.CB_Mois.SetFocus
Exit Sub
End If
'Le champ "Intitulé" ne doit pas être vide
If Me.CB_intitule = "" Then
'Retour à la saisie du montant
Me.CB_intitule.SetFocus
Exit Sub
End If
'Le champ "Montant" ne doit pas être vide
If Me.TB_montant = "" Then
'Retour à la saisie du montant
Me.TB_montant.SetFocus
Exit Sub
End If
' Avec la feuille Base
With Sheets("Base")
' Récupérer la dernière année en cours
sAnnée = .Range("B" & Rows.Count).End(xlUp).Value
On Error Resume Next ' En cas d'echec on continue
' Récupérer la colonne contenant le choix
ColFind = .Range("H:I").Find(What:=Me.CB_intitule, LookIn:=xlValues, LookAt:=xlWhole, _
SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Column
ColType = ColFind - 8 ' Pour déterminer si 1ère colonne = Recettes / 2ème colonne = Dépenses
On Error GoTo 0
End With
' Avec la feuille de l'année en question
With Sheets(sAnnée)
' Numéro du mois choisi
ChoixMois = 1 + Me.CB_Mois.ListIndex
' Calculer la colonne
ColMois = 2 + (5 * (ChoixMois - 1) * (1 + (ChoixMois = 1)))
' Trouver la 1ère ligne vide dans la colonne concernée
NLig = .Cells(Rows.Count, ColMois).End(xlUp).Offset(1, 0).Row
With .Cells(NLig, ColMois)
'Envoyer l'intitulé dans la feuille
.Value = Me.CB_intitule.Value
'Envoyer la date dans la feuille
.Offset(0, 1).Value = Me.TB_jour.Value
'Envoyer le montant dans la bonne colonne
' en s'assurant de la valeur en monnaie (ccur)
.Offset(0, 2 + ColType).Value = CCur(Me.TB_montant)
.Offset(0, 2 + ColType).NumberFormat = "#,##0.00\ €"
End With
End With
'Vider les cases saisies pour une nouvelle fiche
Me.CB_intitule.Value = ""
Me.TB_jour.Value = ""
Me.TB_montant.Value = ""
End Sub
A+
Bonsoir BrunoM45,
Je te remercie grandement pour ton aide
J'ai testé ta solution cela marche nickel, c'est génial.
Me reste plus qu'à essayer de comprendre ton code.
Encore merci et bonne soirée.
Thierry