Formulaire pour ajouter des montants

Bonjour,

J'ai un tableau de dépenses que j'alimente chaque mois, je souhaite créer un formulaire me permettant d'intégrer des montants au fur et à mesure en choisissant (en menu déroulant) le mois ou j’affecte mon montant et l'affectation (logement, courses...).

Les montants doivent s'ajouter automatiquement !

J'ai conscience que ce n'est pas facile et je ne sais même pas si c'est faisable ! , aussi je n'attend pas de vous que vous fassiez tout le travail, quelques pistes me conviennent également.

Merci par avance pour votre aide.

13excel-test.xlsx (12.56 Ko)

Bonsoir,

Tu peux commencer par dessiner le formulaire (à ta convenance). Il faut y mettre selon ce que tu veux faire : une TextBox pour saisie du montant, deux ComboBox, une pour désigner le mois, l'autre la catégorie, deux boutons, un pour Valider, l'autre pour Annuler.

On pourra t'aider ensuite pour affecter les listes aux ComboBox, et pour la procédure de validation.

Cordialement.

Bonjour,

Merci beaucoup je vais faire ça dès que possible et je le poste ! Au moins vous me rassurer ça à l'air faisable !

merci beaucoup !

Bonjour,

Voila le document :

j'espère que ça ira

Merci, merci

Bonjour,

Un premier jet...

Pour prendre de bonnes habitudes dès le départ, j'appelle ton attention sur :

• l'indentation du code : cela peut paraître une astreinte mais c'est tout le contraire une fois qu'on a considéré le temps qu'on gagne par la suite à la lecture et dans la recherche d'erreurs, et l'habitude étant prise, on le fait automatiquement ;

• le renommage des contrôles : cela permet de s'y retrouver plus vite, cela raccourcit les noms, et le cas échéant (assorti de l'utilisation de numéros d'ordre dans le nom) cela facilite l'utilisation de boucles (soit des réductions conséquentes du code à écrire et également un gain de rapidité).

Particularités :

• L'ouverture en non modal ne se justifie pas dans ce type de saisie, au contraire : le Userform doit être modal pour empêcher toute interaction simultanée avec la feuille et garantir une meilleure sécurité de l'opération.

• La liste des catégories de ton tableau est nommée Catég, nom affecté préalablement à l'exécution à la propriété RowSource du Combo.

• La liste des mois de ton tableau est nommée Mois, elle n'est pas affectée au Combo correspondant comme la précédente, car horizontale. Elle est affectée lors de l'initialisation du Userform (proc. Initialize) en la transposant en vertical.

• Tu utilises un tableau Excel, nommé donc automatiquement par Excel, on va donc utiliser ce nom lors de l'affectation du montant saisi au tableau. Le nom du tableau exclu l'en-tête, donc sa cellule (1, 2) soit B8, qui correspond au choix Logement-Janvier a la particularité de correspondre aux ListIndex 0, 0 des Combo, et par suite le Listindex accompagnant le choix fait dans les Combo correspondant exactement au décalage en ligne (Catég) et en colonne (Mois) à partir de cette cellule du tableau. Cela permet donc de viser directement la cellule à affecter sans aucune autre recherche.

Pour le reste (vérifications) tu verras ce qu'il en est et ce qu'il y a éventuellement lieu de modifier ou compléter.

Cordialement.

Bonjour,

Merci beaucoup pour ton travail

Tes conseils sont un peu obscure pour moi malheureusement, mon niveau est très faible dans ce domaine, c'était la première fois que je créais un formulaire pour être honnête.

Néanmoins j'ai quand même cherché à comprendre :

MFerrand a écrit :

• l'indentation du code : cela peut paraître une astreinte mais c'est tout le contraire une fois qu'on a considéré le temps qu'on gagne par la suite à la lecture et dans la recherche d'erreurs, et l'habitude étant prise, on le fait automatiquement ;

Indentation = retrait ou "alinéa" en début de code c'est ça ?

MFerrand a écrit :

L'ouverture en non modal

c'est à dire pouvoir utiliser le tableau Excel en même temps que le formulaire (ici en supprimant "vbModeless" dans le code je repasse en mode modal)

Pour le reste malheureusement je ne comprends pas vraiment (ou plutôt je ne visualise pas vraiment les choses)

Merci beaucoup en tout cas d'avoir pris du temps pour moi , il faut maintenant faire en sorte que quand je souhaite rentrer plusieurs montant pour le même mois, ces montants s'additionnent.

exemple : lundi je fais des courses pour 10€, je complète le tableau par le formulaire,

Mardi je fais des courses pour 5€, je complète le tableau par le formulaire et dans mon tableau le montant sera de 15€.

Encore un très grand merci pour votre aide et vos explications !

Bonjour,

Pour une première fois, tu t'es plutôt bien débrouillé...

Il n'est pas anormal que tu ne comprennes pas tout au départ, il y a le langage (un peu technique) qu'il faut assimiler mais c'est nécessaire pour être sûrs de parler des mêmes composants ou objets, et il y a des éléments qui nécessitent un peu de pratique.

Pour ce qui est de l'indentation, un exemple fera mieux comprendre :

Sub MaProc() 'on est à la marge pour la déclaration de procédure
    Dim dl As Integer, i As Integer 'déclarations de variables (à typer de préférence)
    'instructions diverses (se succèdent au retrait 1)
    With ActiveSheet 'toujours retrait 1, mais début instr. With...End With
        dl = .Range("A" & .Rows.Count).End(xlUp).Row 'retrait 2 à l'intérieur de With...End With
        On Error GoTo erreur 'instruction gestion d'erreur
        For i = 2 To dl 'retrait2, mais début boucle For...Next
            If .Cells(i, 1) = .Cells(i, 10) Then 'retrait3 à l'intérieur boucle (et début condition)
                'instructions si condition vraie (retrait4)
            Else
                'instructions si condition fausse
            End If 'If...Else...End If au même retrait
        Next i 'au même retrait que For
    End With 'au même retrait que With
erreur: 'étiquette branchement en cas erreur (va automatiquement à la marge)
    'traitement erreur
End Sub 'fin de proc. (à la marge)

Comme tu le vois, à la marge les instructions qui déclarent la procédure (Sub et End Sub) et les étiquettes de ligne permettant des branchements directs à partir d'une instruction qui y renvoie (c'est notamment utilisé pour la gestion d'erreurs). On ne saute généralement pas de ligne à l'intérieur, mais il est recommandé d'en sauter entre les procédures...)

A l'intérieur, on est au retrait 1 (le retrait [touche Tab] se règle dans les options de l'éditeur, il est de 4 par défaut), on y reste tant que des instructions "ordinaires" se succèdent. Mais dès lors que survient une instruction particulière (regroupement, condition, boucle) qui conditionne les instructions qui suive jusqu'à une instruction de fin, on passe à un retrait supplémentaire entre les instructions de début et fin concernées.

With est une instruction qui met en mémoire un objet (et End With y met fin) : entre les deux toutes les propriétés ou méthodes commençant par un point (après espace) se réfèrent à cet objet mémorisé.

For initialise une boucle : les instructions entre For et Next vont se répéter un certain nombre de fois...

If indique une condition (qui peut être traitée sur une ligne dans les cas simples, mais généralement en implique plusieurs).

Il peut y avoir quantité d'instructions de la sorte imbriquées les unes dans les autres, et tu te rendras vite compte que l'indentation te permet au premier coup d'oeil de les distinguer les unes des autres, et notamment de voir si un morceau d'instruction fait défaut (qui entrainera une erreur d'exécution).

Cela fait gagner un temps considérable à la lecture...


Pour le reste, explications au fil des questions que tu poseras...

Merci beaucoup en tout cas d'avoir pris du temps pour moi , il faut maintenant faire en sorte que quand je souhaite rentrer plusieurs montant pour le même mois, ces montants s'additionnent.

Cette question ne m'avait pas échappé, mais j'attendais que tu te la poses et indique comment tu veux la gérer. En effet, rien ne t'empêcher de cumuler ailleurs les dépenses de même catégorie intervenant plusieurs fois par mois, et de rentrer le total en fin de mois dans ton tableau.

Mais évidemment, on peut modifier la procédure générale pour additionner le montant saisi au montant figurant déjà dans le tableau. La modification est légère et si tu confirmes je peux l'opérer sans délai.

Cordialement.

Pour avancer :

Pour additionner systématiquement :

dans la procédure Private Sub cbAjout_Click (module du Userform à afficher par clic droit sur Usrform1 > Code), repérer :

    With [tblDépenses].Cells(1, 2)
        If .Offset(n, k) <> 0 Then
            If MsgBox("Voulez-vous modifier le montant de : " & cbxCat.Value & " pour : " _
             & cbxMois.Value & " ?", vbYesNo + vbQuestion, "Modification d'un montant") _
             = vbNo Then Exit Sub
        End If
        .Offset(n, k) = tbMt.Value
    End With

Remplacer ce fragment de code par le suivant :

    With [tblDépenses].Cells(1, 2)
       .Offset(n, k) = .Offset(n, k) + Replace(tbMt.Value, ".", ",")
    End With

Après End With, tu peux ajouter une ligne : Unload Me , pour décharger automatiquement le formulaire.

Avec le nouveau code on additionne, si tu veux diversifier : soit additionner, soit remplacer, on peut soit mettre un dispositif de questionnement, soit ajouter un bouton : le premier ajoutera, le second remplacera...

(Dans ce cas, on organisera les procédures autrement pour ne pas avoir à répéter les vérifications qui seraient communes aux deux boutons.)

Cordialement.

Bonsoir,

c'est super merci beaucoup je vais essayer de bien m’imprégner de tous tes conseils pour commencer et surtout je vais essayé de bien tout comprendre je te poserai surement des questions par la suite !

Merci beaucoup en tout cas ! j'apprends des choses c'est super !

Merci

Rechercher des sujets similaires à "formulaire ajouter montants"