XL 2019 somme d'une plage après chaque saut de ligne

Kaganaias

XLDnaute Nouveau
Bonjour,

J'ai 3 colonnes (A , B et C)
A est le nom du produit (produit 1, 2 etc.)
B est une donnée chiffrée associée au produit.

Les données chiffrées concernent le produit en A qu'entre deux espaces.

Problème: je veux faire la somme des données chiffrées du nom du produit en C (uniquement sur la ligne où "Produit" est renseigné) mais la plage de donnée est "aléatoire". Je souhaite que la formule somme "à tirer en C" s'adapte au "nombre" de chiffres.

En pièce jointe un exemple.

Je vous remercie,
 

Pièces jointes

  • somme après chaque saut de ligne.xlsx
    7.4 KB · Affichages: 12

chris

XLDnaute Barbatruc
Bonjour
Ce type de tableau sera inexploitable en dehors de la somme...

Crée plutôt un tableau structuré, avec une répétition du produit (masquée par une MFC) et une formule
Ainsi tu pourras ajouter des lignes, trier par produit, sans risquer des erreurs
 

Pièces jointes

  • Somme_Produits.xlsx
    14.9 KB · Affichages: 6

Kaganaias

XLDnaute Nouveau
Bonjour
merci pour votre réponse, il s'agit d'un tableau qui sort comme ça (je ne le construit pas).
Votre solution semble fonctionner mais je n'ai pas de connaissances sur la façon d'enregistrer les éléments que vous avez balisés comme Tableau1, [#Cette ligne];[PRODUIT ] etc. dans votre formule.

Je ne souhaite pas qu'il y ait répétition du produit à chaque ligne car cela implique que je le copie colle manuellement (or ce tableau m'est livré tel quel)

Merci.
 

chris

XLDnaute Barbatruc
RE

On peut retraiter en quelques clics par PowerQuery intégré à Excel et restituer un TCD
1720720174457.png

Sinon explique l'intérêt d'ajouter les sommes au tableau initial...
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir @Kaganaias et bienvenue sur XKD :),
Bonsoir à tous ;),

La formule suivante en C2 à recopier vers le bas :
=SI(A2="";"";SOMMEPROD(DECALER(B2;0;0;SIERREUR(EQUIV("*";A3:A999;0);999);1)))

nota : si un produit peut avoir plus de 999 lignes alors il faudra augmenter cette valeur.
 

Pièces jointes

  • Kaganaias- somme par produit- v1.xlsx
    14 KB · Affichages: 3

vgendron

XLDnaute Barbatruc
Hello le fil

une autre possibilité par macro VBA
VB:
Sub CalculTotaux()
Dim Tabdata() As Variant

    With ActiveSheet
        LastLine = .Range("B" & .Rows.Count).End(xlUp).Row + 1
        Tabdata = .Range("A2:C" & LastLine).Value
        
        For i = LBound(Tabdata, 1) To UBound(Tabdata, 1)
            If Tabdata(i, 1) <> "" Or Tabdata(i, 2) <> "" Then
                Total = Total + Tabdata(i, 2)
            Else
                Tabdata(i, 3) = Total
                Total = 0
            End If
        Next i
        Range("A2:C" & LastLine) = Tabdata
    End With
End Sub
 

Kaganaias

XLDnaute Nouveau
RE

On peut retraiter en quelques clics par PowerQuery intégré à Excel et restituer un TCD
Regarde la pièce jointe 1200424
Sinon explique l'intérêt d'ajouter les sommes au tableau initial...
Bonjour,
Je vous remercie,
j'ai mal balisé mon post: je ne suis pas sur une version tableur qui dispose de cette fonctionnalité (en réalité, je suis sur libre office calc, j'enregistre automatiquement les classeurs en .xlsx).

Je serai curieux de tester Power Query quand je pourrai me procurer une version récente d'excel.

Effectivement, je vais également proposer à l'initiateur du tableur de faciliter le travail sur le tableau: pas de sauts de lignes et la référence face au chiffre.

Cordialement
 

Kaganaias

XLDnaute Nouveau
Bonsoir @Kaganaias et bienvenue sur XKD :),
Bonsoir à tous ;),

La formule suivante en C2 à recopier vers le bas :
=SI(A2="";"";SOMMEPROD(DECALER(B2;0;0;SIERREUR(EQUIV("*";A3:A999;0);999);1)))

nota : si un produit peut avoir plus de 999 lignes alors il faudra augmenter cette valeur.
Bonjour,
Je vous remercie, cette formule fonctionne parfaitement.
C'est précisément ce que je recherchais.

Je comprends que la fonction SOMMEPROD n'a qu'une matrice.
La fonction DECALER n'est usitée que pour la hauteur (les autres arguments de la formule étant: ligne 0, colonne 0, largeur 1)
Pour l'argument de la hauteur de la fonction DECALER, vous avez utilisé la formule EQUIV (assortie d'un SIERREUR) afin d'avoir une hauteur qui s'adapte à la "distance" entre les présences de caractères dans la colonne A ("Produit").

==> Pourquoi un SOMMEPROD et non un SOMME tout court? Vous l'avez mis dans l'hypothèse où j'aurais plus de critères que le seul produit?
==> pour quelle raison le SIERREUR ?
==> peu familier de la fonction EQUIV, pouvez vous m'indiquer pour quelle raison le 1er argument (valeur_cherchée) est "*" ?

Merci d'avance,
Cordialement
 

Kaganaias

XLDnaute Nouveau
Hello le fil

une autre possibilité par macro VBA
VB:
Sub CalculTotaux()
Dim Tabdata() As Variant

    With ActiveSheet
        LastLine = .Range("B" & .Rows.Count).End(xlUp).Row + 1
        Tabdata = .Range("A2:C" & LastLine).Value
       
        For i = LBound(Tabdata, 1) To UBound(Tabdata, 1)
            If Tabdata(i, 1) <> "" Or Tabdata(i, 2) <> "" Then
                Total = Total + Tabdata(i, 2)
            Else
                Tabdata(i, 3) = Total
                Total = 0
            End If
        Next i
        Range("A2:C" & LastLine) = Tabdata
    End With
End Sub
Bonjour je vous remercie,
Comme l'indique chris, j'aurais dû préciser dans mon post que je n'utilise pas microsoft excel à proprement parler..
J'utilise calc. Dès lors, le VBA ne peut pas être reporté tel quel sur le module macro de libreoffice (LibreOffice Basic).
Je vais tout de même essayer avec l'option VBA support.
Cordialement
 

Discussions similaires

Statistiques des forums

Discussions
313 769
Messages
2 102 234
Membres
108 181
dernier inscrit
Chr1sD