Rediriger les données dans les bonnes colonnes d'un tableau VBA

Bonjour,

Ce classeur me sert à gérer, un bien grand mot, les recettes et les dépenses d'un club.

Certaines recettes ou dépenses se font soit par chèques, virements ou soit par en numéraires et parfois les deux!

Est-il possible de modifier la macro (module 1), qui pour le moment ne fait la différence du type de paiement, en deux groupes "Banque" ou/et "numéraires pour que les données arrivent dans le tableau "Bilan financier 2024" dans les bonnes colonnes "C" et "F" pour la banque et "D" et "G" pour le numéraire.

Actuellement je dois créer deux lignes pour les mêmes opérations avec un paiement différent

On m'a suggéré qui y avait quelques améliorations à apporter à ce classeur, je pense que celle-ci en est une :)

je vous sollicite de nouveau et je vous remercie .

22bayard-forum.zip (267.65 Ko)

PS: le fichier se zippe et je ne sais pas pourquoi???

Bonjour

Est-il possible de modifier la macro (module 1), qui pour le moment ne fait la différence du type de paiement, en deux groupes "Banque" ou/et "numéraires pour que les données arrivent dans le tableau "Bilan financier 2024" dans les bonnes colonnes "C" et "F" pour la banque et "D" et "G" pour le numéraire.

Je pense ne pas avoir compris car les montants de novembre sont bien placés par rapport au code que vous avez en colonne B et E.
Pouvez-vous donner un exemple lorsque vous écrivez "deux lignes".
Vous voudriez n'avoir par exemple qu'un seul code pour Frais divers ? (actuellement 6280 et 6281)

Pour les améliorations, déjà dans la feuille DATA, votre tableau est au format structuré et dans ce format il ne faut pas laisser de lignes sans données. La ligne 37 doit être supprimées

NB : Le fichier se zip automatiquement si le poids du fichier est trop gros pour être posté --> https://forum.excel-pratique.com/s/goto/889949 et https://forum.excel-pratique.com/s/goto/881268

Crdlt

Bonjour Dan,

Vous voudriez n'avoir par exemple qu'un seul code pour Frais divers ? (actuellement 6280 et 6281)

C'est exact car actuellement je dois faire deux lignes, une banque et une numéraire

Pour les améliorations, déjà dans la feuille DATA, votre tableau est au format structuré et dans ce format il ne faut pas laisser de lignes sans données. La ligne 37 doit être supprimées

C'est fait

merci

J'avais oublier le fichier

21bayard-forum.zip (267.07 Ko)

Je vais prendre un exemple afin de bien comprendre avant de poster le code

Feuille Novembre 2023 : en F7 vous avez 300 eur et en H7 vous avez 400 eur

Feuille Bilan : vous voulez en C12 --> 300 eur et en D12 -> 400 Eur

Correct ?

Si oui, cela voudrait dire que vous supprimerez le code 7021 au profit du 7020 pour les 2 cas

En reprenant l'exemple proposé:

Feuille Novembre 2023 : en F7 vous avez 300 eur et en H7 vous avez 400 eur

C'est exactement ça, que l'on puisse sur la même ligne dans "bilan" avoir deux sommes, une bancaire et une numéraire.

Un peu confuse mon explication du début mais le résultat est là!!

Je vous donne ce que vous pouvez corriger :

1. Dupliquez le code Function Total(Code) dans le module 1
2. Renommez le code Function Total(Code) en Function TotalB(Code)
3. Renommez le code dupliqué Function Total(Code) en Function TotalN(Code)


Une fois fait, modifiez ceci dans chacun des codes :

1. Function TotalB(Code), remplacez la ligne "Total = Total + Application.sum..... " par celle ci-dessous

TotalB = TotalB + Application.Sum(Union(sht.Range("F" & lig), sht.Range("G" & lig)))

2. Function TotalN(Code), remplacez la ligne "Total = Total + Application.sum..... " par celle ci-dessous

TotalN = TotalN + Application.Sum(Union(sht.Range("H" & lig), sht.Range("I" & lig)))

ensuite allez dans votre feuille Bilan :
- en C12 ajoutez cette formule --> =totalB(B12) puis recopiez-la vers le bas (jusque ligne 27)
- en D12 ajoutez cette formule --> =totalN(B12) puis recopiez-la vers le bas (jusque ligne 27)

Faites respectivement la même chose pour F28 et G28 (à recopier jusque ligne 46)

Si ok, je peux regarder pour d'autres améliorations

Crdlt

J'ai fait quelques test et ça marche très bien.

Le seul problème, pour le moment, c'est l'affichage des sommes, je n'ai plus le symbole € malgré le choix dans le format de cellule (voir image)

Sinon merci pour ton travail!!

Le seul problème, pour le moment, c'est l'affichage des sommes, je n'ai plus le symbole €

Si vous l'avez. Aucun souci de mon coté
Augmentez la largeur de colonnes ou zoomez sur la feuille

c'est exact, je n'avais pas pensé à ça, le Zoooom!!

merci et vu l'heure bon appétit!!

c'est exact, je n'avais pas pensé à ça, le Zoooom!! merci et vu l'heure bon appétit!!

Ok et également
On peut passer à quelques améliorations si vous voulez.

Ok pas de problème pour moi!

Dans vos noms de feuilles, vous ajoutez l'année pour les mois et pour la feuille Bilan
L'année prochaine vous allez continuer de la même manière ?

Oui, je repart d'un classeur vierge de tous calculs.

mais je suis preneur de toutes idées

Dans chacune de vos feuilles mois, vous avez un code Private Sub Worksheet_BeforeDoubleClick... que l'on peut remplacer pour un code unique en procédant comme ceci :

- Supprimez ce code dans toutes vos feuilles mois
- Dans l'éditeur VBA, allez dans Thisworbook, et collez le code ci-dessous

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean)

If UCase(Sh.Name) Like "BILAN*" Then Exit Sub
If Not Intersect(Range("E7:E37"), Target) Is Nothing Then
    If IsNumeric(Right(Sh.Name, 4)) Then
        If UCase(Target) = "X" Then Target = vbNullString Else Target = "X"
        Cancel = True
    End If
End If
End Sub

faites quelques tests

Le plus important sera de veiller à mettre l'année dans les 4 derniers caractères de vos feuilles mois

C'est OK, ça fonctionne.

merci

Ok si vous voulez on peut aussi faire cela pour le code Private Sub Worksheet_SelectionChange que je vois dans certaines de vos feuilles.

Tout ce qui pourrait améliorer mon fichier sera le bienvenu

Comme précédemment, dans chacune de vos feuilles mois où vous avez un code Private Sub Worksheet_Selectionchange...

- Supprimez ce code dans toutes vos feuilles mois
- Dans l'éditeur VBA, allez dans Thisworbook, et collez le code ci-dessous

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim nom As String

nom = UCase(Sh.Name) 'nom de feuille

Select Case True
    Case nom Like "MENU"  'cas feuille Menu
        With Target
          If .Value = vbNullString Then Exit Sub
            On Error Resume Next
            Sheets(.Value).Visible = True
            Sheets(.Value).Select
            On Error GoTo 0
            Exit Sub
        End With

    Case nom Like "MEMBRES" 'cas feuille membres
        With Target
            If .Column <> 16 Then Exit Sub
            If .Count > 1 Then Exit Sub
            If .Row < 4 Then Exit Sub  'cette ligne autorise la saisie d'une date à partir de la ligne 4
            If .Row > 56 Then Exit Sub 'cette ligne limite la saisie d'une date à la ligne 50
            Call affichercalendrier
        End With

    Case nom Like "*BILAN*": Exit Sub 'cas feuille Bilan

    Case Else
        If IsNumeric(Right(nom, 4)) Then 'feuille nommee avec annee
            With Target
                If .Column <> 1 Then Exit Sub
                If .Count > 1 Then Exit Sub
                If .Row < 4 Then Exit Sub  'cette ligne autorise la saisie d'une date à partir de la ligne 4
                If .Row > 35 Then Exit Sub 'cette ligne limite la saisie d'une date à la ligne 50
            End With
            Call affichercalendrier
        End If
End Select
End Sub

Faites quelques tests

ça fonctionne également mais je ne comprends pas les lignes suivantes:

Case nom Like "*BILAN*": Exit Sub 'cas feuille Bilan

    Case Else
        If IsNumeric(Right(nom, 4)) Then 'feuille nommee avec annee
            With Target
                If .Column <> 1 Then Exit Sub
                If .Count > 1 Then Exit Sub
                If .Row < 4 Then Exit Sub  'cette ligne autorise la saisie d'une date à partir de la ligne 4
                If .Row > 35 Then Exit Sub 'cette ligne limite la saisie d'une date à la ligne 50
            End With
            Call affichercalendrier
        End If

Je n'ai pas de date à rentrer sur cette feuille, les seules dates qu'il y a c'est avec

=AUJOURDHUI()

Ou alors je n'ai pas tout compris, fort possible aussi!

Je n'ai pas de date à rentrer sur cette feuille, les seules dates qu'il y a c'est avec

Je n'ai pas compris votre souci.
Le cas CASE ELSE, concerne toutes les feuilles qui ne sont pas mentionnées dans les autres CASE
Lorsque le code passe sur CASE ELSE, on lui fait contrôler que le nom de l'onglet contient bien l'année dans les 4 derniers caractères
Donc aucun rapport avec la date "aujourdhui" dont vous parlez

CASE Bilan, c'est pour vérifier que la feuille n'a pas le nom "Bilan" ou "Bilan 2024"

Rechercher des sujets similaires à "rediriger donnees bonnes colonnes tableau vba"