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. 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

    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
        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. 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. 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 !