Problème de macro VBA

Petrus-71

XLDnaute Nouveau
Bonjour à tous,
Je suis un nouvel uilisateur d'excel que je découvre. Quel merveilleux outil ! Je m'intéresse aux macros commandes et à l'univers VBA qui me semble assez complexe à maîtriser. Si quelqu'un possède quelques atuces pour progresser pas à pas, je suis preneur.
J'ai une demande qui a sans doute été traitée, mais mes recherches restent infructueuses.
J'ai un fichier dans lequel je rentre mes dépenses mensuelles. La feuille "dépenses mensuelles" totalise pour le mois chaque poste de dépenses. Je souhaite reporter ces montants (cellules vertes) dans la feuille "vierge" en colonne en respectant l'emplacement des postes situés en lignes et en utilisant des macros plus "light"
que les miennes qui n'utilisent ni variables, ni boucles et qui sont lourdes (même si elles fonctionnent quand même).
Je vous joins le fichier qui vous parlera mieux que ma prose.
Merci à toute personne qui prendra simplement le temps juste de regarder.
bien cordialement,
 

Pièces jointes

  • recettes-dépenses-Essai.xlsm
    67.1 KB · Affichages: 10
Solution
Bonjour Petrus-71, Phil, Staple,

je n'ai rien changé sur ta feuille cachée "2004-F" ; j'ai fait plein d'modifs, partout ailleurs : les 3 feuilles visibles et tout le code VBA ; pour les 3 feuilles : j'ai amélioré la présentation et amélioré certaines formules initiales, par exemple quand tu avais utilisé inutilement la fonction SOMME().


pour les feuilles "2019" et "vierge" : colonne % : il n'y aura plus de valeurs d'erreur #DIV!0 si P12 = 0 ; sur la feuille "vierge", tu avais mis 2 règles de MFC alors qu'une seule règle suffit : hors MFC, j'ai mis un fond gris par défaut (ce qui, en même temps, a supprimé le fond vert de certaines cellules) ; j'ai supprimé la...​

Phil69970

XLDnaute Barbatruc
Bonjour @Petrus-71, le forum

Je te propose ce fichier qui remplacera avantageusement ton fichier....
J'ai renommé le nom interne des boutons des mois en bouton 1 , 2 , 3 ..... pour pouvoir m'en resservir facilement ....
J'ai crée une plage nommée "ZoneSup" pour le bouton efface....
J'ai supprimé tous tes modules et je les ai remplacé par 2 modules plus light....
1) Le 1er qui gère la copie en fonction du mois cliqué
2) Le 2eme qui s'occupe de l’effacement des données
On peut très bien les réunir dans le même module

*Pour avoir un maximum de réponse il faut mieux poster une question excel dans le forum excel....
*Je n'ai fait que rationaliser tes macros ...assez lourde que tu avais fait. ;)
Mon code est égale à ton code, ni plus ni moins en 100 fois plus rapide et plus court...

@Phil69970
 

Pièces jointes

  • Recettes-dépenses-Essai V1.xlsm
    51.6 KB · Affichages: 6
Dernière édition:

Phil69970

XLDnaute Barbatruc
Bonsoir staple1600

C'est bien ce que j'ai suggéré à @Petrus-71 pour avoir un maximum de lisibilité.
Certes moins direct que toi....(bien que cela soit une infos)
Si il (re)poste sa question dans le bon forum je supprimerais et déplacerais ma réponse à la suite de sa question.
*Pour avoir un maximum de réponse il faut mieux poster une question excel dans le forum excel....
@Phil69970
 

soan

XLDnaute Barbatruc
Inactif
Bonjour Petrus-71, Phil, Staple,

je n'ai rien changé sur ta feuille cachée "2004-F" ; j'ai fait plein d'modifs, partout ailleurs : les 3 feuilles visibles et tout le code VBA ; pour les 3 feuilles : j'ai amélioré la présentation et amélioré certaines formules initiales, par exemple quand tu avais utilisé inutilement la fonction SOMME().


pour les feuilles "2019" et "vierge" : colonne % : il n'y aura plus de valeurs d'erreur #DIV!0 si P12 = 0 ; sur la feuille "vierge", tu avais mis 2 règles de MFC alors qu'une seule règle suffit : hors MFC, j'ai mis un fond gris par défaut (ce qui, en même temps, a supprimé le fond vert de certaines cellules) ; j'ai supprimé la règle MFC du fond gris ; reste donc la règle MFC du fond bleu ; à part ces couleurs gris ou bleu des plages concernées, la présentation de "vierge" est la même que celle de "2019" : même zoom de 92% ; mêmes largeurs de colonnes ; même format de nombre avec séparateur de milliers, et 2 décimales sans symbole € (le texte de C1 "en Euros" suffit, et les colonnes peuvent être moins larges, ce qui permet une meilleure visibilité d'ensemble) ; bien sûr, je n'ai pas changé le format de nombre de la colonne "%" : c'est toujours "Pourcentage, avec une seule décimale" ; tu peux voir d'autres petits détails, comme : O4 et P4 sur 2 lignes au lieu d'une seule ; "É" en A16.

pour la feuille "Dépenses mensuelles" : alignement à droite pour tous les textes qui se terminent par le signe « : », en A2:A5, B1, E3:E6, H2:H7 ; ajout de bordures pour F7, la cellule à gauche de la cellule verte G7 ; correction de bordures pour d'autres cellules ; texte de C9:C10 mis en C9 et texte de i9:i10 mis en i9 ➯ ça a libéré la ligne 10, ce qui te fait une ligne de données en plus ; bien sûr, j'ai remonté d'une ligne tes cases de dépenses de la colonne i, ainsi que leur case verte associée de la colonne J ; voici un exemple concret : pour "ELECTRICITE", ce n'est plus en i11:i12 et J12 mais en i10:i11 et J11 ; il va de soi que le code VBA de la sub CpyTotaux() tient compte de ces changements, ainsi que celui de la sub EFFACE() ; il n'y a que 2 modules car j'ai supprimé tous les autres.

@Phil69970 : oh, comme c'est bizarre ! toi aussi, tu as supprimé tous les autres modules ? 😜 (on a eu la même idée, hein ? 😃 faut croire que Petrus n'avait pas vraiment besoin de 13 modules !)



Module2 : il y a uniquement la sub EFFACE() (7 lignes) :

VB:
Sub EFFACE()
  If ActiveSheet.Name <> "Dépenses mensuelles" Then Exit Sub
  Application.ScreenUpdating = 0
  Range("B2:C7, D5:D6, F3:F7, I2:I6, A10:B46, C10:H27, C30:H46, I11, I13, I15, " _
    & "I17, I19, I21:I24, I27:I29, I32:I33, I35:I37, I40:I46").ClearContents
  [B29] = "BUREAU"
End Sub

Module1 : il y a d'abord la sub CpyTotaux() (33 lignes) :

VB:
Private Sub CpyTotaux(k As Byte)
  If ActiveSheet.Name <> "Dépenses mensuelles" Then Exit Sub
  Application.ScreenUpdating = 0
  With Worksheets("vierge")
    [D2:D4].Copy: .Cells(5, k).PasteSpecial -4163   'Traitement, Laurence, Sécu AJ / MGEN
    .Cells(8, k) = [D7]                             'Sécu. Remb
    .Cells(9, k) = [G6]                             'Remb. Divers
    [G3:G4].Copy: .Cells(10, k).PasteSpecial -4163  'Loyer bijouterie, Dons Vir.
    .Cells(14, k) = [A47]                           'Alimentation
    .Cells(15, k) = [C28]                           'Prod Entretien
    .Cells(16, k) = [D28]                           'Automobile
    [D47].Resize(, 4).Copy                          'Impôts, Cadeaux, Habits, Santé
    .Cells(17, k).PasteSpecial -4163, , , True
    .Cells(21, k) = [J11]                           'EDF
    .Cells(22, k) = [I25]                           'Téléphone
    .Cells(23, k) = [J15]                           'Eau
    .Cells(24, k) = [J19]                           'Fioul
    .Cells(25, k) = [J17]                           'BOIS
    .Cells(26, k) = [J13]                           'Gaz
    .Cells(27, k) = [J33]                           'Prêt Immob.
    .Cells(28, k) = [I30]                           'Assurances
    [E28].Resize(, 3).Copy                          'Bricolage, Jardin, Loisirs + Sports
    .Cells(29, k).PasteSpecial -4163, , , True
    .Cells(32, k) = [H47]                           'Divers
    .Cells(33, k) = [B47]                           'Bureau
    .Cells(34, k) = [C47]                           'Equipement
    .Cells(35, k) = [H28]                           'Vacances
    .Cells(36, k) = [I47]                           'Copropriété
    .Cells(37, k) = [I38]                           'Frais Bancaires
    .Select: [A1].Select: Application.CutCopyMode = 0
    Worksheets("Dépenses mensuelles").Select
  End With
End Sub

puis il y a les 12 appels, un pour chacun des 12 boutons de mois :

Code:
Sub JANV()
  CpyTotaux 3
End Sub

Sub FEVR()
  CpyTotaux 4
End Sub

Sub MARS()
  CpyTotaux 5
End Sub

Sub AVRIL()
  CpyTotaux 6
End Sub

Sub MAI()
  CpyTotaux 7
End Sub

Sub JUIN()
  CpyTotaux 8
End Sub

Sub JUILLET()
  CpyTotaux 9
End Sub

Sub AOUT()
  CpyTotaux 10
End Sub

Sub SEPTEMBRE()
  CpyTotaux 11
End Sub

Sub OCTOBRE()
  CpyTotaux 12
End Sub

Sub NOVEMBRE()
  CpyTotaux 13
End Sub

Sub DECEMBRE()
  CpyTotaux 14
End Sub

le n° transmis est celui de la colonne : 3 (= C) à 14 (= N).

le Module2 fait 84 lignes en tout.



si besoin, tu peux demander une adaptation.
à te lire pour avoir ton avis. ;)

soan
 

Pièces jointes

  • recettes dépenses.xlsm
    52.1 KB · Affichages: 3
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
=>Phil

tu as écrit : « Pourtant, 13 est un chiffre porte-bonheur .....:rolleyes: »

ah ? selon certains superstitieux qui évitent de croiser un chat noir ou de passer sous une échelle, le chiffre 13 porte malheur au contraire ! moi je n'y crois pas, et ce que j'ai dit est de façon générale : je suis sûr que tu n'es pas toi-même superstitieux, sinon tu n'aurais pas écrit que 13 porte bonheur ! 😃 quoiqu'avec ton smiley "roll eyes" au bout, sait-on jamais ?
soan
 
Dernière édition:

Petrus-71

XLDnaute Nouveau
Bonjour Phil, Bonjour soan,
Merci à tous les deux pour vos réponses très rapides et pertinentes. Vos solutions correspondent à ce que je voulais faire sans y parvenir. Je ne maîtrise ni la syntaxe, ni ls procédures (ni même le fonctionnement d'un forum qui est une première pour moi). Je vais essayer de comprendre ce que vous avez fait pour pouvoir le réinvetir dans d'autres projets. Je suis venu pour apprendre, non ? Promis, la prochaine question sera placée au "bon endroit".
Merci du temps que vous m'avez consacré tous les deux.
Bien cordialement,:)
 

Discussions similaires

Statistiques des forums

Discussions
312 110
Messages
2 085 388
Membres
102 882
dernier inscrit
Sultan94