Simplification macro Excel

Résolu
Bonjour,

Je suis en train de réaliser un tableau excel pour gérer un budget. J'ai dans une feuille ("data") un tableau résumant les dépenses/recettes par poste et par mois. L'utilisation de formule directement dans les cellules ralentissait considérablement l'exécution des tâches, d'où l'idée de passer en macro.

Le problème, c'est que j'ai des lignes et des lignes de code relativement répétitives, et bien sûr j'ai le message "Procédure trop longue". N'étant qu'un débutant du VBA, pourriez vous m'aider pour simplifier ces lignes de codes afin que la macro puisse être exécutée. Elle s'étend jusqu'à la ligne 54 !

Merci beaucoup pour votre aide !
grhum7

'POSTES de dépenses
'Assurance
Sheets("Data").Range("b27").Value = Application.WorksheetFunction.SumIfs(Sheets("CCourant").Range("D5:D65536"), Sheets("CCourant").Range("R5:R65536"), 1, Sheets("CCourant").Range("c5:c65536"), "Assurance")
Sheets("Data").Range("c27").Value = Application.WorksheetFunction.SumIfs(Sheets("CCourant").Range("D5:D65536"), Sheets("CCourant").Range("R5:R65536"), 2, Sheets("CCourant").Range("c5:c65536"), "Assurance")
Sheets("Data").Range("d27").Value = Application.WorksheetFunction.SumIfs(Sheets("CCourant").Range("D5:D65536"), Sheets("CCourant").Range("R5:R65536"), 3, Sheets("CCourant").Range("c5:c65536"), "Assurance")
Sheets("Data").Range("e27").Value = Application.WorksheetFunction.SumIfs(Sheets("CCourant").Range("D5:D65536"), Sheets("CCourant").Range("R5:R65536"), 4, Sheets("CCourant").Range("c5:c65536"), "Assurance")
Sheets("Data").Range("f27").Value = Application.WorksheetFunction.SumIfs(Sheets("CCourant").Range("D5:D65536"), Sheets("CCourant").Range("R5:R65536"), 5, Sheets("CCourant").Range("c5:c65536"), "Assurance")
Sheets("Data").Range("g27").Value = Application.WorksheetFunction.SumIfs(Sheets("CCourant").Range("D5:D65536"), Sheets("CCourant").Range("R5:R65536"), 6, Sheets("CCourant").Range("c5:c65536"), "Assurance")
Sheets("Data").Range("h27").Value = Application.WorksheetFunction.SumIfs(Sheets("CCourant").Range("D5:D65536"), Sheets("CCourant").Range("R5:R65536"), 7, Sheets("CCourant").Range("c5:c65536"), "Assurance")
Sheets("Data").Range("i27").Value = Application.WorksheetFunction.SumIfs(Sheets("CCourant").Range("D5:D65536"), Sheets("CCourant").Range("R5:R65536"), 8, Sheets("CCourant").Range("c5:c65536"), "Assurance")
Sheets("Data").Range("j27").Value = Application.WorksheetFunction.SumIfs(Sheets("CCourant").Range("D5:D65536"), Sheets("CCourant").Range("R5:R65536"), 9, Sheets("CCourant").Range("c5:c65536"), "Assurance")
Sheets("Data").Range("k27").Value = Application.WorksheetFunction.SumIfs(Sheets("CCourant").Range("D5:D65536"), Sheets("CCourant").Range("R5:R65536"), 10, Sheets("CCourant").Range("c5:c65536"), "Assurance")
Sheets("Data").Range("l27").Value = Application.WorksheetFunction.SumIfs(Sheets("CCourant").Range("D5:D65536"), Sheets("CCourant").Range("R5:R65536"), 11, Sheets("CCourant").Range("c5:c65536"), "Assurance")
Sheets("Data").Range("m27").Value = Application.WorksheetFunction.SumIfs(Sheets("CCourant").Range("D5:D65536"), Sheets("CCourant").Range("R5:R65536"), 12, Sheets("CCourant").Range("c5:c65536"), "Assurance")

'Audiovisuel
Sheets("Data").Range("b28").Value = Application.WorksheetFunction.SumIfs(Sheets("CCourant").Range("D5:D65536"), Sheets("CCourant").Range("R5:R65536"), 1, Sheets("CCourant").Range("c5:c65536"), "Audiovisuel")
Sheets("Data").Range("c28").Value = Application.WorksheetFunction.SumIfs(Sheets("CCourant").Range("D5:D65536"), Sheets("CCourant").Range("R5:R65536"), 2, Sheets("CCourant").Range("c5:c65536"), "Audiovisuel")
Sheets("Data").Range("d28").Value = Application.WorksheetFunction.SumIfs(Sheets("CCourant").Range("D5:D65536"), Sheets("CCourant").Range("R5:R65536"), 3, Sheets("CCourant").Range("c5:c65536"), "Audiovisuel")
Sheets("Data").Range("e28").Value = Application.WorksheetFunction.SumIfs(Sheets("CCourant").Range("D5:D65536"), Sheets("CCourant").Range("R5:R65536"), 4, Sheets("CCourant").Range("c5:c65536"), "Audiovisuel")
Sheets("Data").Range("f28").Value = Application.WorksheetFunction.SumIfs(Sheets("CCourant").Range("D5:D65536"), Sheets("CCourant").Range("R5:R65536"), 5, Sheets("CCourant").Range("c5:c65536"), "Audiovisuel")
Sheets("Data").Range("g28").Value = Application.WorksheetFunction.SumIfs(Sheets("CCourant").Range("D5:D65536"), Sheets("CCourant").Range("R5:R65536"), 6, Sheets("CCourant").Range("c5:c65536"), "Audiovisuel")
Sheets("Data").Range("h28").Value = Application.WorksheetFunction.SumIfs(Sheets("CCourant").Range("D5:D65536"), Sheets("CCourant").Range("R5:R65536"), 7, Sheets("CCourant").Range("c5:c65536"), "Audiovisuel")
Sheets("Data").Range("i28").Value = Application.WorksheetFunction.SumIfs(Sheets("CCourant").Range("D5:D65536"), Sheets("CCourant").Range("R5:R65536"), 8, Sheets("CCourant").Range("c5:c65536"), "Audiovisuel")
Sheets("Data").Range("j28").Value = Application.WorksheetFunction.SumIfs(Sheets("CCourant").Range("D5:D65536"), Sheets("CCourant").Range("R5:R65536"), 9, Sheets("CCourant").Range("c5:c65536"), "Audiovisuel")
Sheets("Data").Range("k28").Value = Application.WorksheetFunction.SumIfs(Sheets("CCourant").Range("D5:D65536"), Sheets("CCourant").Range("R5:R65536"), 10, Sheets("CCourant").Range("c5:c65536"), "Audiovisuel")
Sheets("Data").Range("l28").Value = Application.WorksheetFunction.SumIfs(Sheets("CCourant").Range("D5:D65536"), Sheets("CCourant").Range("R5:R65536"), 11, Sheets("CCourant").Range("c5:c65536"), "Audiovisuel")
Sheets("Data").Range("m28").Value = Application.WorksheetFunction.SumIfs(Sheets("CCourant").Range("D5:D65536"), Sheets("CCourant").Range("R5:R65536"), 12, Sheets("CCourant").Range("c5:c65536"), "Audiovisuel")

'Autre
Sheets("Data").Range("b29").Value = Application.WorksheetFunction.SumIfs(Sheets("CCourant").Range("D5:D65536"), Sheets("CCourant").Range("R5:R65536"), 1, Sheets("CCourant").Range("c5:c65536"), "Autre")
Sheets("Data").Range("c29").Value = Application.WorksheetFunction.SumIfs(Sheets("CCourant").Range("D5:D65536"), Sheets("CCourant").Range("R5:R65536"), 2, Sheets("CCourant").Range("c5:c65536"), "Autre")
Sheets("Data").Range("d29").Value = Application.WorksheetFunction.SumIfs(Sheets("CCourant").Range("D5:D65536"), Sheets("CCourant").Range("R5:R65536"), 3, Sheets("CCourant").Range("c5:c65536"), "Autre")
Sheets("Data").Range("e29").Value = Application.WorksheetFunction.SumIfs(Sheets("CCourant").Range("D5:D65536"), Sheets("CCourant").Range("R5:R65536"), 4, Sheets("CCourant").Range("c5:c65536"), "Autre")
Sheets("Data").Range("f29").Value = Application.WorksheetFunction.SumIfs(Sheets("CCourant").Range("D5:D65536"), Sheets("CCourant").Range("R5:R65536"), 5, Sheets("CCourant").Range("c5:c65536"), "Autre")
Sheets("Data").Range("g29").Value = Application.WorksheetFunction.SumIfs(Sheets("CCourant").Range("D5:D65536"), Sheets("CCourant").Range("R5:R65536"), 6, Sheets("CCourant").Range("c5:c65536"), "Autre")
Sheets("Data").Range("h29").Value = Application.WorksheetFunction.SumIfs(Sheets("CCourant").Range("D5:D65536"), Sheets("CCourant").Range("R5:R65536"), 7, Sheets("CCourant").Range("c5:c65536"), "Autre")
Sheets("Data").Range("i29").Value = Application.WorksheetFunction.SumIfs(Sheets("CCourant").Range("D5:D65536"), Sheets("CCourant").Range("R5:R65536"), 8, Sheets("CCourant").Range("c5:c65536"), "Autre")
Sheets("Data").Range("j29").Value = Application.WorksheetFunction.SumIfs(Sheets("CCourant").Range("D5:D65536"), Sheets("CCourant").Range("R5:R65536"), 9, Sheets("CCourant").Range("c5:c65536"), "Autre")
Sheets("Data").Range("k29").Value = Application.WorksheetFunction.SumIfs(Sheets("CCourant").Range("D5:D65536"), Sheets("CCourant").Range("R5:R65536"), 10, Sheets("CCourant").Range("c5:c65536"), "Autre")
Sheets("Data").Range("l29").Value = Application.WorksheetFunction.SumIfs(Sheets("CCourant").Range("D5:D65536"), Sheets("CCourant").Range("R5:R65536"), 11, Sheets("CCourant").Range("c5:c65536"), "Autre")
Sheets("Data").Range("m29").Value = Application.WorksheetFunction.SumIfs(Sheets("CCourant").Range("D5:D65536"), Sheets("CCourant").Range("R5:R65536"), 12, Sheets("CCourant").Range("c5:c65536"), "Autre")


6 réponses

  1. Ok c'est bon ! Merci, c'est moi qui avait supprimer une ligne sans m'en rendre compte ! Désolé.

    Du coup ça fonctionne Nickel !! Un très grand merci, car je ne connaissais pas cette fonction, que je vais essayer d'étudier de plus près.
    Peux tu m'expliquer le code
    Derlig = .Columns("A").Find("*", , , , , xlPrevious).Row

    Mille merci !
    1. Bonjour,

      Merci Michel_m , je comprends à peu près ton code, mais malheureusement il ne fonctionne pas. Lorsque je l'exécute rien ne se passe, mais je n'ai pas de message d'erreur. Est ce qu'il y a quelque chose que je dois modifier pour l'adapter à ma feuille ? J'utilise excel 2007, est ce que ça viendrait de là ?

      grhum7
      1. Contributeur
        Bonjour,

        Ci joint la maquette de travail qui, elle, fonctionne

        Peut-^tre n'as tu pas mis à jour l'affectation à la macro de ton bouton...

        https://www.cjoint.com/?3EklksgEthE
    2. Contributeur
      Et voilà pour les dépenses à toi de jouer pour les recettes sur le m^me principe et la présentation de la feuille "data" : zéro non apparent, décimales, euro....

      Option Explicit
      '-----------------------------
      Sub consolider()
      Dim Derlig As Integer, T_data
      Dim Idx As Byte, Col As Byte
      '------
      Application.ScreenUpdating = False
      '---------
      'Dépenses:
      T_data = Sheets("data").Range("A27:M47")
      With Sheets("Ccourant")
      For Idx = 1 To UBound(T_data)
      Derlig = .Columns("A").Find("*", , , , , xlPrevious).Row
      For Col = 2 To 13
      T_data(Idx, Col) = Application.SumIfs(.Range("D5:D" & Derlig), _
      .Range("R5:R" & Derlig), Col - 1, _
      .Range("c5:c" & Derlig), T_data(Idx, 1))
      Next
      Next
      End With
      '--------
      'consolidation dépenses
      Sheets("data").Range("A27:M47") = T_data
      ' recettes
      'A TOI DE JOUER
      End Sub

      Michel
      1. Contributeur
        Ok, je dois m'absenter; retour en fin d'apr-midi (j'espère)

        Merci d'^tre un peu patient :o)
        1. Contributeur
          Bonjour,

          Envoie plutôt ton classeur, ou un extrait, en pièce jointe car sinon, il est difficile de tester une proposition

          pour joindre une pièce
          mettre le classeur sans données confidentielles en pièce jointe sur
          https://www.cjoint.com/
          puis copier l'adresse du lien et la coller dans le message de réponse