Solde periode

Bonjour tout le monde,

j'ai débuté un petit projet, mais vu que je suis novice, je demande l'aide des experts.

J'ai un feuille BANQUE où je dois avoir le solde (ici par exemple en (K150)) de la période précisée dans USF1 selon le mois ou les mois choisis via le bouton CONSULTATION DE SOLDE.

Voici mon fichier :

26banque.xlsm (36.89 Ko)

Je à votre entière disposition pour de plus amples informations.

Bonjour,

Un solde s'établit à une date déterminée...

"Solde d'une période" pourrait éventuellement avoir le sens de balance des débits-crédits de la période, abstraction faite du solde antérieur !

Sois donc un peu plus précis !

En l'absence des données que tu es susceptible de chercher dans ton classeur, on ne voit pas très bien où aller les chercher !

ça se voit que tu es un connaisseur en la matière et ça tombe bien.

le solde antérieur est (K5)

le solde de fin de période doit bien évidement prendre en considération le solde antérieur K5 + les opérations de crédit colonne K - les opérations de débit colonne J pour aboutir au solde final par mois.

exemple : si je choisi DU : JANVIER AU MARS 2017 on aura besoin du solde antérieur + colonne K - colonne J jusqu'au date choisie MARS.

si je choisi DU : FEVRIER AU MARS 2017 on aura besoin du solde colonne K - colonne J jusqu'au date choisie MARS. et on n'aura pas besoin du solde antérieur K5.

Voilà , j'espère que j'ai bien exposé mon problème. A VOUS

Je ne suis pas sûr que toi tu aies bien compris !

Tu me dit : Solde Janvier 2017 : je cherche Solde au 31/01/2017 !

Tu me dit : Solde Mars 2017 : je cherche Solde au 31/03/2017 !

Tu me dit : Solde Janvier 2017 à Mars 2017 (soit : solde des opérations de Janvier 2017 à Mars 2017) : je cherche et fais :

Solde au 31/03/2017 - Solde au 31/12/2016 !!

Cordialement.

[Encore faut-il que cela existe dans le classeur ! Pour cela il conviendrait de limiter les listes des Combo aux données existantes ! ]

tout à fait d'accord.

solde JANVIER AU MARS 2017 signifie DU 01-01-2017 AU 31-03-2017, j'ai donné ce classeur à titre d'exemple, car le fichier original est confidentiel, je voulais juste une piste de démarrage pour arriver à une fin satisfaisante. je ouvert à tes propositions MFerrand.

Si les données manquent par rapport à ce que l'utlisateur demande, un MSGBOX du genre " PAS DE DONNEES! CHOISISSEZ UNE AUTRE PERIODE ".

Ok ! Voilà une proposition...

Private Sub CommandButton1_Click()
    Dim wsA$, sld1$, sld0$, d1, d0, s1, s0, a%, i%
    a = ComboBox1.Value: wsA = "BMCE " & a
    If ComboBox3.ListIndex > -1 Then
        If ComboBox3.ListIndex >= ComboBox2.ListIndex Then
            d1 = DateSerial(a, ComboBox3.ListIndex + 2, 1) - 1
            If ComboBox2.ListIndex > -1 Then d0 = DateSerial(a, ComboBox2.ListIndex + 1, 1) - 1
        Else
            MsgBox "Période définie allant d'un mois à un mois antérieur !", vbInformation, "Erreur"
            Exit Sub
        End If
    Else
        If ComboBox2.ListIndex > -1 Then d1 = DateSerial(a, ComboBox2.ListIndex + 2, 1) - 1
    End If
    If d1 = "" Then
        MsgBox "Aucune période définie pour la recherche d'un solde !", vbInformation, "Erreur"
        Exit Sub
    End If
    sld1 = "SOLDE AU " & Format(d1, "dd/mm/yyyy")
    If d0 <> "" Then sld0 = "SOLDE AU " & Format(d0, "dd/mm/yyyy")
    On Error GoTo noAn
    With Worksheets(wsA)
        On Error GoTo noMois1
        i = .Columns("B:J").Find(sld1).Row
        s1 = .Cells(i, 11).Value
        On Error GoTo noMois0
        If sld0 <> "" Then
            i = .Columns("B:J").Find(sld0).Row
            s0 = .Cells(i, 11).Value
        End If
    End With
    On Error GoTo 0
    If sld0 <> "" Then
        MsgBox "Le solde des opérations de " & MonthName(Month(d0 + 1)) & " à " _
         & MonthName(Month(d1)) & " " & a & " est de : " & Format(s1 - s0, "#,##0.00")
    Else
        MsgBox "Le solde au " & Format(d1, "dd/mm/yyyy") & " est de : " & Format(s1, "#,##0.00")
    End If
    Unload Me
    Exit Sub
noMois0:
    MsgBox sld0 & " non trouvé.", vbInformation, "Erreur": Exit Sub
noMois1:
    MsgBox sld1 & " non trouvé.", vbInformation, "Erreur": Exit Sub
noAn:
    MsgBox "L'année " & ComboBox1.Value & " est manquante.", vbInformation, "Erreur"
End Sub

Private Sub UserForm_Initialize()
    Dim Lst(), i%
    TextBox2.Value = Format(Date, "dddd dd mmmm yyyy")
    ReDim Lst(Year(Date) - 2010)
    For i = 0 To UBound(Lst)
        Lst(i) = 2010 + i
    Next i
    With ComboBox1
        .List = Lst: .ListIndex = .ListCount - 1
    End With
    ReDim Lst(11)
    For i = 1 To 12
        Lst(i - 1) = UCase(MonthName(i))
    Next i
    ComboBox2.List = Lst: ComboBox3.List = Lst
End Sub
20maximob-banque.xlsm (49.28 Ko)

Merci MFerrand pour ta proposition.

mais il y a un hic. quand je sélectionne du janvier à février il me donne un solde erroné , normalement il doit me donner le sold antérieur + le total crédit des mois janvier à février (-) (moins ) le total débit des mois janvier à février.

veux-tu bien voir d'où ça vient ?

Pas besoin de regarder ! Il te dit que le solde Février n'est pas trouvé !

Si le solde de Février existe, il fera la différence entre solde au 28/02/2017 et solde au 31/12/2016.

Si tu ne sers qu'un mois il fournit le solde à la fin de ce mois s'il existe...

NB- Relis mon post précédent. Si je rectifierai les erreurs éventuelles dans le code, je ne programmerai pas autre chose...

Cordialement.

Cher ami

j'ai bien testé ton code, mais il ne fait pas la distinction entre les dates qui figurent dans la colonne A.

quand je demande le solde de janvier, il doit prendre les opérations du 01/01 au 31/01. et ainsi de suite pour les autre mois.

Il ne s'occupe que des sous-totaux soldes mensuels !

c'est ça. tu m'as compris.

A savoir que les sous-totaux doivent prendre en considération les dates de la colonne A .

Pas question de colonne A du premier post jusqu'à maintenant

Tu présentes un modèle de fichier affichant une ligne solde au 31/12 année précédente et une ligne solde au 31/01. L'année ne se limitant pas au mois de janvier, on peut s'attendre à ce que le fichier définitif comprenne des lignes solde au 28/02, au 31/03, etc. jusqu'au 31/12.

Quand tu auras complété ton fichier, tu pourras constater que la procédure de consultation te fournis, soit le solde en fin d'un mois demandé, soit le solde des opérations d'une période d'un ou plusieurs mois (c'est à dire abstraction faite du solde antérieur).

Je n'ai pas vu trop l'utilité d'une telle consultation extrayant des éléments susceptibles d'apparaître et être consulté directement dans le fichier, aussi facilement, quoique sur plusieurs années (si ce que laissent penser les premiers éléments introduits) cela peut sans doute offrir plus de facilité, c'était en tout cas un petit exercice de codage d'extraction...

J'ajoute que le code prendra en compte toute feuille bâtie sur le modèle, toutes les années à partir de 2010, donc au delà de 2017.

Chaque feuille annuelle est censée comporter 13 lignes solde (sur lequelles la procédure ira prélever les chiffres demandés).

Désolé MFerrand pour le dérangement que je t'ai causé,

la saisie des opérations se passent en masse ligne par ligne sans séparation de mois, c'est pour ça que j'ai posté ma demande.

voici mon fichier revisité :

A +

Re

j'ai pensé à élaborer un filtre au niveau de la colonne A. Que pense-tu ?

Tu peux toujours filtrer pour visualiser, cela ne coûte rien...

Ton erreur de départ a été de fournir un fichier indiquant des soldes mensuels (Solde au 31/01...) alors que tu ne sors qu'un solde annuel. Il fallait vérifier ce que tu fournissais et préciser ta demande...

Honnêtement, j'ai décidé de répondre (réponses que je fais durant mes pauses !) parce que je pensais que ce serait rapide, et le petit point qui m'intéressait était de rendre le processus évolutif (prise en compte des années ultérieures sans rien avoir à modifier), ce qui est fait au niveau de l'initialisation du Userform.

Cela n'a pas été aussi rapide que je pensais, en raison des contrôles de saisies (feuilles manquantes, soldes manquants)...

L'obtention des résultats pouvait de toute façon être facilement obtenue par des formules...

Il faut donc remplacer la recherche des soldes par leur constitution puisqu'il ne sont pas précalculés. Ce n'est pas très compliqué mais il faut revoir les contrôles qui ne sont plus adaptés à cette situation. Je veux bien finalement le faire, mais ça va attendre son tour dans ma pile de travaux...

Cordialement.

Cher MFerrand

Merci d'avoir consacré ton temps à me répondre et surtout à m'expliquer le hic de mon post.

je suis vraiment désolé pour la perte de temps engendrée par une mauvaise explication de ma part et un manque de données ( vu la confidentialité du fichier original ).

J'attendrai avec joie mon tour pour arriver un résultat final satisfaisant.

Je m'excuse encore une fois.

Bonjour,

Pas assez en forme au réveil pour m'attaquer aux travaux en cours demandant une attention un peu plus soutenue ! Tu en bénéficies !!

Private Sub CommandButton1_Click()
    Dim wsA$, s1, s0, m1%, m0%, a%, i%, n%
    a = ComboBox1.Value: wsA = "BMCE " & a
    m0 = ComboBox2.ListIndex + 1: m1 = ComboBox3.ListIndex + 1
    If m1 > 0 Then
        If m0 > 0 Then
            If m0 > m1 Then
                MsgBox "Période définie allant d'un mois à un mois antérieur !", vbInformation, "Erreur"
                Exit Sub
            End If
        End If
    Else
        If m0 > 0 Then
            m1 = m0: m0 = 0
        Else
            MsgBox "Aucune période définie pour la recherche d'un solde !", vbInformation, "Erreur"
            Exit Sub
        End If
    End If
    On Error GoTo noAn
    With Worksheets(wsA)
        On Error GoTo 0
        If m0 = 0 Then s0 = .Cells(5, 11)
        n = .Cells(.Rows.Count, 1).End(xlUp).Row
        For i = 7 To n
            If Month(.Cells(i, 1)) <= m1 Then
                If Month(.Cells(i, 1)) >= m0 Or m0 = 0 Then
                    s1 = s1 - .Cells(i, 10) + .Cells(i, 11)
                End If
            Else
                Exit For
            End If
        Next i
    End With
    If m0 > 0 Then
        MsgBox "Le solde des opérations de " & MonthName(m0) & " à " & MonthName(m1) & " " & a _
         & " est de : " & Format(s1, "#,##0.00")
    Else
        MsgBox "Le solde au " & Format(DateSerial(a, m1 + 1, 1) - 1, "dd/mm/yyyy") & " est de : " _
         & Format(s1 + s0, "#,##0.00")
    End If
    Unload Me
    Exit Sub
noAn:
    MsgBox "L'année " & ComboBox1.Value & " est manquante.", vbInformation, "Erreur"
End Sub

Voilà la proc. modifiée. En fait cela la simplifie un peu...

L'Initialize n'est pas modifiée.

Le principe du résultat fourni est le même que précédemment :

  • Tu indiques un mois de début et un mois de fin : la balance des opérations débit-crédit est faite sur la période et le résultat donne le solde des opérations, SANS reprendre le solde antérieur.
  • Tu n'indiques qu'un seul mois (début ou fin peu importe) la proc le prendra en compte pour fournir le solde à la fin du mois indiqué : dans ce cas, il s'agit du solde à une date donnée, qui reprend le solde antérieur.

Cordialement.

19maximob-banque.xlsm (49.87 Ko)

Tu vois, la patience est récompensée par un bijou.

reste un tout petit truc à modifier, il faut compter le solde antérieur quand la période de départ est JANVIER. voilà merci.

Absolument pas !

Pour avoir le solde de départ inclus, tu ne sers qu'un seul mois, c'est simple !

Si tu sers les deux le solde de départ n'est pas inclus.

Tu as donc toutes les possibilités à ta disposition !

Ok . Merci beaucoup de t'avoir fait tourner un peu la tête

ta générosité est incomparable. See you soon.

Rechercher des sujets similaires à "solde periode"