Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Gestion de dépenses et suivi budgetaire

Monhtc

XLDnaute Occasionnel
Bonjour le forum. J'essaie de monter un programme via VBA pour la gestion des dépense d'un budget qui est subdivisé en ligne budgétaire. Avec pour chaque paiement:

  • La dotation budgétaire initiale
  • le montant des dépenses antérieur sur la ligne budgétaire concerné
  • Le cumul des dépenses. C'est à dire le montant des dépenses antérieures ajouté au montant de la dépense actuel
  • Le solde qu'il reste sur la ligne concernée
Merci infiniment.
 
Solution
Bonsoir ou Bonjour @Monhtc , le Forum

Bon je pense que tu veux encore une fois de plus le beurre et l'argent du beurre et tout ceci aved des explications au compte goutte ...

Je pense qu'entre le mode Correction, qui doit reprendre les Soldes Cummulés, et ton mode Impression Historique à un instant "T", on doit complètement scinder les deux actions, elle n'ont rien à voir...

Tu trouveras un "ToggleButton" maintenant dans cette v07 qui permet de scinder ces actions complètement différentes.

J'espère que cette fois-ci on est bon, car c'est bourré de Verrues qui nourrissent plein de Crabes là dedans, à force ça va te pêter à la figure et te pincer le nez !

Bon Dimanche
@+Thierry

Monhtc

XLDnaute Occasionnel
Explication des deux modes:
  1. Mode annulation de OP
Il 'sagit dans ce mode de paiement, la valeur de la textboxmontant devra etre négatif. ainsi le cumul (Textboxcumul) serait égale à l'anterieur (textboxanterieur) dans laquelle on retranche la textboxmontant.
Les formules de de calcul de textboxcumul et textboxsolde ne change pas.
Le probleme c'est qu'il est imposssible de saisir un montant en négatif dans la textboxMontant
Exemple: Voir image
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re

Oui mais ça c'était déjà dans ton userform, ce sont les régles qui sont gérées en "Key Press" :

VB:
Private Sub TextBoxMontant_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("0123456789", Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub

Si tu authorises le "-" ça va péter plus loin aussi sur des lignes qui étaient existantes dans ton userform d'origine dans l'évèmenent Change de la TextBoxMontant, dès qu'il voit "-" = BOUM !

Là c'est insoluble, et un peu indigeste après la soupe aux crabes !! Il aurait fallu penser à ça plus tôt... Pas une fois la livraison terminée ! Si tu travaillais avec moi sur le déploiement d'ERP comptables pro tu te ferais bien enguirlander en "co-pilot accounting side" de projet !!!

Là pour être propre il faudrait reprendre le UserForm pratiquement du début ! Et ne compte pas sur moi sur ce coup ci.

Désolé mais je pense avoir consacré beaucoup trop de temps à ce truc qui ne servira à personne mis à par tes besoins ultra-spécifiques.
Bien à toi
@+Thierry
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bon comme j'avais quand même la v04 BETA ouverte... Avant de fermer j'ai pensé à une "saleté de verrue" comme suit :

1) Tu ajoutes un "-" dans le Key Press

VB:
Private Sub TextBoxMontant_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("-0123456789", Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub

2) Tu ajoutes ce bout de code :
If Len(Me.TextBoxMontant) = 1 And Me.TextBoxMontant = "-" Then Exit Sub

Dans le Change :
VB:
Private Sub TextBoxMontant_Change()
Dim n As Integer
Dim c As Range
'Dim firstAddress
Dim MyCol As Byte

If Len(Me.TextBoxMontant) = 1 And Me.TextBoxMontant = "-" Then Exit Sub

Ca sent le "crabe pourri" mais bon... Tu verras si ca te convient en dépannage !

@+Thierry
 

Monhtc

XLDnaute Occasionnel
Bonjour le forum Bonjour le fil, Bonjour spécialement à @_Thierry ... J'èspère que ce message trouvera chacun de vous en pleine forme.
J'ai une suggestion par rapport à la V4 du fichier qui deja il faut le noter marche parfaitement. J'aimerais que la recherche en textbox8 fonctionne à la fois comme un filtre sur la base des éléments saisis
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Hello @Monhtc , le Forum

Ah celle là je la voyais venir, et bien non, ce n'est pas possible tel que le programme avait été conçu à l'orgine sur la partie gauche... avec la ListBox et la TextBox

C'est non, car si on filtre la ListeBox plus rien ne fonctionnera car ça a été développé sur le ListBoxChangeItem.ListIndex

VB:
With WSBDD
    Me.LabelTransaction = .Range("A" & ListBoxChangeItem.ListIndex + 2)
    Me.ComboBoxEngagementCode = Format(.Range("H" & ListBoxChangeItem.ListIndex + 2), "0000")
    Me.ComboBoxEngagementCode.Locked = True
    Me.ComboBoxFinancement = .Range("E" & ListBoxChangeItem.ListIndex + 2)
    Me.ComboBoxCat = .Range("F" & ListBoxChangeItem.ListIndex + 2)
    Me.ComboBoxReglementMethod = .Range("G" & ListBoxChangeItem.ListIndex + 2)
    Me.ComboBoxBeneficiary = .Range("C" & ListBoxChangeItem.ListIndex + 2)
    Me.ComboBoxBenefAccount = .Range("D" & ListBoxChangeItem.ListIndex + 2)
    Me.TextBoxDotation = .Range("K" & ListBoxChangeItem.ListIndex + 2)
    Me.TextBoxAnterieur = .Range("L" & ListBoxChangeItem.ListIndex + 2)
    Me.TextBoxMontant = .Range("J" & ListBoxChangeItem.ListIndex + 2)
    Me.TextBoxSolde = .Range("M" & ListBoxChangeItem.ListIndex + 2)
    Me.TextBoxCumul = .Range("N" & ListBoxChangeItem.ListIndex + 2)
    Me.TextBoxOPprovisoire = .Range("O" & ListBoxChangeItem.ListIndex + 2)
    Me.TextBox9 = .Range("I" & ListBoxChangeItem.ListIndex + 2) & " CORRECTION"
    Me.Textdate = .Range("P" & ListBoxChangeItem.ListIndex + 2)
  
    For Each CTRL In Me.Controls
     If Left(CTRL.Name, 3) = "OPB" Then
       If CTRL.Caption = .Range("B" & ListBoxChangeItem.ListIndex + 2) Then
         CTRL.Value = True
       End If
     End If
    Next
  
End With
'Et probablement ailleurs aussi.....................

Si nous n'avons plus les mêmes données et donc les mêmes indexes nous ne matcherons plus avec la Feuille "BDD"...

Donc là c'est niet !

Avec la TextBox8 j'ai ajouté un algo pour qu'il te selectionne déjà le béneficiare qui match dans la ListBox ... Maintenant si tu veux chercher autre chose il faut juste "jouer" sur le numéro colonne (2 = bénéficiare)

VB:
Private Sub TextBox8_Change()
Dim MySearch As String
Dim i As Integer

If Me.TextBox8 = "" Then Exit Sub

MySearch = Me.TextBox8

With Me.ListBoxChangeItem
    For i = 0 To .ListCount - 1
        If InStr(UCase(.Column(2, i)), UCase(MySearch)) <> 0 Then
        .Selected(i) = True
        End If
    Next
End With

End Sub

Je te laisse "t'amuser".

Bon dimanche
@+Thierry
 

Monhtc

XLDnaute Occasionnel
Domage pour moi alors. L'idée m'est venue plus tard. Car apres des mois d utilisation je risque d'avoir des centaine de paiement ainsi pour retrouver par exemple un paiement il va falloir fouiner mais c'est deja un très bon boulot, car à la phase d'experience tout marche nickel à mon niveau.
Et si l'on supprimais la textbox8 et à la place un bouton pour ouvrir un second formulaire sur lequel il serait possible. Enfin est ce possible d'ailleurs?
Car je pense aussi à pouvoir sélectionner un ou plusieurs paiement pour en un bordereau d'envoi
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re,

Ce projet est fini, terminé et il a largement dépassé le cadre de son sujet qui je le rappelle état :
"Gestion de dépenses et suivi budgetaire"... Tu n'as pas l'impression de tirer un peu sur la corde... Non ?

Car la "création d' un bordereau d'envoi" n'a plus rien à voir avec la demande et les besoins exprimés :


Si tu ne sais pas faire essaie de faire un fichier représentatif sans données confidentielles et tu ouvres un nouveau Fil de discussion avec les explications de tes besoins sur cette nouvelle demande.

Bon Dimanche,
@+Thierry
 

Discussions similaires

Réponses
11
Affichages
3 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…