Simplification macro Excel

Résolu
grhum7 Messages postés 6 Statut Membre -  
grhum7 Messages postés 6 Statut Membre -
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. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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

    0
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Ok, je dois m'absenter; retour en fin d'apr-midi (j'espère)

    Merci d'^tre un peu patient :o)
    0
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. grhum7 Messages postés 6 Statut Membre
     
    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
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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
      0
  6. grhum7 Messages postés 6 Statut Membre
     
    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 !
    0