Pb sous totaux pourcentage vba excel

Bonjour,

D'avance merci pour l'aide que vous pourrez m'apporter.

Je gère un gros budget sous Excel et j'utilise la fonction sous total. Mais on me demande de calculer le pourcentage par rapport au sous total et çà ne marche pas car je reçois le message d'erreur suivant : Div/0

Voici le code correspondant.

Sub SOUSTOTALRUBRIQUE()
'
' SOUSTOTALRUBRIQUE Macro

'
'
lig = Range("c1").End(xlDown).Row
i = lig - 1
Do While i > 1
total = Cells(i, 4)
mregion = Cells(i - 3, 4)
Do While Cells(i - 3, 4) = mregion
' If total = 0 Then
'Cells(i - 3, 7).Value = ""
Cells(i - 3, 7) = Cells(i - 3, 4) / total
Cells(i - 3, 7).NumberFormat = "0.00%"
If total = 0 Then
Cells(i - 3, 7).Value = ""
End If
i = i - 1
Loop
i = i - 1
Loop
End Sub

Pourriez vous modifier le programme afin qu'il calcule le pourcentage
quelque soit le nombre de rubriques ?

Merci d'avance.

Nicolas

3 réponses

  1. Bonjour,

    c'est le genre de question qui ne doit pas prendre plus de 10mn pour y répondre AVEC le fichier exemple.

    SANS un fichier exmple, j'ai envie de te répondre une évidence qu'un pas à pas devrait confirmer : ton total doit prendre une valeur nulle à un moment donné.

    si tu ne t'en sors pas, monte ton fichier sur CJOINT

    cordialement

    PS : ton besoin de % ne pouvait-il pas se résoudre par des formules ?
    0
    1. Produit CA Région
      Produit1 100 A 19,61%
      Produit3 110 A 21,57%
      Produit6 100 A 19,61%
      Produit15 100 A 19,61%
      Produit18 100 A 19,61%
      510 Total A
      Produit2 565 B 32,51%
      Produit4 100 B 5,75%
      Produit7 567 B 32,62%
      Produit10 400 B 23,01%
      Produit19 106 B 6,10%
      1738 Total B
      Produit5 100 C 25,00%
      Produit8 100 C 25,00%
      Produit11 100 C 25,00%
      Produit12 100 C 25,00%
      400 Total C
      Produit17 120 D 52,86%
      Produit20 107 D 47,14%
      227 Total D
      2875 Total

      On veut le % de chaque produit par rapport à chaque sous-total

      Sub essai()
      lig = Range("c1").End(xlDown).Row
      i = lig - 1
      Do While i > 1
      total = Cells(i, 2)
      mrégion = Cells(i - 1, 3)
      Do While Cells(i - 1, 3) = mrégion
      Cells(i - 1, 4) = Cells(i - 1, 2) / total
      Cells(i - 1, 4).NumberFormat = "0.00%"
      i = i - 1
      Loop
      i = i - 1
      Loop
      End Sub
      0
      1. Bonjour,

        ta macro (la 2ème) fonctionne très bien! je n'ai pas d'erreur.

        si tu veux une solution sans macro, utilise la formule matricielle
        D2=SI(A2="";"";B2/SOMMEPROD(($C$2:$C$20=C2)*$B$2:$B$20))
        (à valider par CTRL+MAJ+ENTER)

        sinon, tu ne semble pas connaître CJOINT : https://www.cjoint.com/

        c'est beaucoup plus pratique pour les personnes à qui tu veux transmettre des données

        A+
        0