Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Somme conditionnelle

  • Initiateur de la discussion Initiateur de la discussion philjourney
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

P

philjourney

Guest
Bonjour tout le monde,
l'intitulé est un peu nul mais je ne savais pas quoi mettre. Je vous mets un exemple directement ça sera beaucoup plus simple.
Mon problème est le suivant :

J'ai une liste avec un produit par ligne, un code douane, le masse nette, la quantité échangée et le prix de transfert mensuel.
Le code douane peut être identique pour plusieurs produits (2 ou 10) et je dois fournir pour chaque code douane, la somme des masses nettes, les quantités échangées et les prix cumulés. Mon problème c'est que ma liste est très longue alors je voulais savoir s'il était possible de faire ce cumul par une formule, plutôt que manuellement. En fait il faudrait faire une somme conditionnelle, le critère étant somme pour un code douane identique.
Je vous remercie de vos réponses!!

Bonne journée à tous et à toutes
 

Pièces jointes

Re : Somme conditionnelle

Oui sûrement, avec un tel aplomb, je ne peux pas en douter 🙂. Ceci dit, je ne m'y connais pas beaucoup plus en tableaux croisés dynamiques ou TCD, je vais essayer et reviendrai sur le forum si je n'y arrive pas.
Merci en tout cas, à bientôt
 
Re : Somme conditionnelle

Bonjour le fil, bonjour le forum,

Une proposition VBA avec le code ci-dessous. Les Totaux sont reportés dans l'onglet Feuil2.
Code:
Sub Macro1()
Dim dl As Long 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim d As Object 'déclare la variable d (Dictionnaire)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim tt As Variant 'déclare la variable tt (Tableau Temporaire)
Dim t1 As Double 'déclare la variable t1 (Total 1)
Dim t2 As Double 'déclare la variable t2 (Total 2)
Dim t3 As Double 'déclare la variable t3 (Total 3)
Dim dest As Range 'déclare la variable dest (cellule de DESTination)

With Sheets("Feuil2") 'prend en compte l'onglet "Feuil2"
    .Range("A1").CurrentRegion.Clear 'efface les éventuelles anciennes données
    .Range("A1").Value = "Code Douane" 'en-Tête
    .Range("B1").Value = "Total weight" 'en-Tête
    .Range("C1").Value = "Total Qty" 'en-Tête
    .Range("D1").Value = "Total Trans" 'en-Tête
End With 'fin de la prise en compte de l'onglet "Feuil2"
With Sheets("Feuil1") 'prend en compte l'onglet "Feuil1"
    dl = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée dl de la colonne 1 (=A)
    Set pl = .Range("A3:A" & dl) 'définit la plage pl
    Set d = CreateObject("Scripting.Dictionary") 'défin it le dictionnaire d
    For Each cel In pl.Offset(0, 2) 'boucle sur tous les cellules éditée de la colonne C
        cel.Value = "'" & cel.Value 'transforme le code douane en texte (certains étaient sous forme de numéros, d'autre sous forme de texte)
        d(cel.Value) = "" 'alimente le dictionnaire
    Next cel 'prochaine cellule de la boucle
    tt = d.keys 'récupère les valeurs uniques (sans doublon) dans le tableau tempoaire tt
    For i = 0 To UBound(tt) 'boucle sur toutes les valeur du tableau tt
        .Range("A2").AutoFilter Field:=3, Criteria1:=tt(i) 'filtre la ligne 2, colonne C en fonction de la valeur du tabelau tt(i)
        t1 = Application.WorksheetFunction.Sum(pl.SpecialCells(xlCellTypeVisible).Offset(0, 4)) 'définit le total t1 (poids)
        t2 = Application.WorksheetFunction.Sum(pl.SpecialCells(xlCellTypeVisible).Offset(0, 5)) 'définit le total t2 (quantité)
        t3 = Application.WorksheetFunction.Sum(pl.SpecialCells(xlCellTypeVisible).Offset(0, 6)) 'définit le total t1 (transfert)
        .Range("A2").AutoFilter 'supprime le filtre automatique
        Set dest = Sheets("Feuil2").Cells(Application.Rows.Count, 1).End(xlUp).Offset(1, 0) 'définit la cellule de destination
        dest.Value = tt(i) 'place le code douane
        dest.Offset(0, 1).Value = t1 'place le total 1
        dest.Offset(0, 2).Value = t2 'place le total 1
        dest.Offset(0, 3).Value = t3 'place le total 1
        t1 = 0: t2 = 0: t3 = 0 'efface les totaux
    Next i 'prochaine valeur de la boucle
End With 'fin de la prise en compte de l'onglet "Feuil1"
End Sub

Le fichier :
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

  • Question Question
Réponses
2
Affichages
896
A
Réponses
2
Affichages
1 K
0
Réponses
6
Affichages
1 K
N
Réponses
6
Affichages
1 K
O
Réponses
4
Affichages
921
Ophélie Sud Mer
O
S
Réponses
2
Affichages
1 K
salhi_haithem
S
F
Réponses
4
Affichages
3 K
T
Réponses
2
Affichages
960
M
Réponses
1
Affichages
2 K
MrSponge
M
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…