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

[job75 a résolu] Somme d'une plage sous condition en VBA

  • Initiateur de la discussion Initiateur de la discussion Lone-wolf
  • 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 !

Lone-wolf

XLDnaute Barbatruc
bonjour à tous 😀

je cherche à réaliser une macro pour totaliser les sommes d'une commande si celles-ci correspondent au numéro de commande.

Exemple:
Feuil1
Commande n° 1: article = X: =55.-
Commande n° 1: article = Y: =25.-
Commande n° 1: article = Z: =75.-
Commande n° 2: article = A: =25.-
Commande n° 2: article = B: =85.-

Feuil2
Commande n° 1: Total = 155.-
Commande n° 2: Total = 110.-

Voir PJ

Merci pour votre aide



A+ 😎
 

Pièces jointes

Dernière édition:
Re : Somme d'une plage sous condition en VBA

Bonjour,

En modifiant ton format colonne H de la feuille 1 (qui n'est pas vu comme un format nombre)

=SOMMEPROD((Feuil1!$B$2:$B$7=Feuil2!B3)*(Feuil1!$H$2:$H$7))

a+
 
Re : Somme d'une plage sous condition en VBA

Bonjour Loup Solitaire, bonjour le forum,

Ce que je ne comprends pas dans ton exemple c'est par quelle magie des données apparaissent dans l'onglet Feuil2 qui ne sont pas dans l'onglet Feuil1...?

Je crois que tu devrais faire la chose suivante :
Onglet Feuill1 les données.
Onglet Feuil2 ce que tu as avant le traitement de la macro.
Onglet Feuil3 ce que tu voudrais dans l'onglet Feuil2, après le traitement de la macro.
Ça serait plus clair. En tous cas pour moi...

[Édition]
Bonjour Chalet on s'est croisé...
 
Re : Somme d'une plage sous condition en VBA

Bonjour CHALET53, Robert

Merci tout d'abord d'avoir répondu.

@Robert: aaaaahh! C'est la magie ACCESS. 😉 Et oui, je reprends sous Excel un travail effectué sous Access et qui donne ces résultat suite à une requête.

@CHALET53, merci pour ta proposition, mais si je pouvais l'avoir en VBA ça serait sympa.
EDIT: la formule affiche erreur de valeur #VALEUR.


A+😎
 
Dernière édition:
Re : Somme d'une plage sous condition en VBA

Bonjour tous,

#valeur à cause de la ???? en Feuil1!H2

Code:
=SOMMEPROD((Feuil1!$B$3:$B$7=Feuil2!B3)*Feuil1!$H$3:$H$7)
en ligne 3 et étirée fonctionne sans soucis
 
Dernière édition:
Re : Somme d'une plage sous condition en VBA

L'enregistreur de macro donne :
Sub Macro1()
'
' Macro1 Macro
'
Range("J3:J4").Select
Selection.Formula = _
"=SUMPRODUCT((Feuil1!$B$3:$B$7=Feuil2!B3)*Feuil1!$H$3:$H$7)"
Range("J4").Select
End Sub
 
Re : Somme d'une plage sous condition en VBA

Bonjour à tous,

Une solution VBA avec cette macro dans le code de Feuil2 :

Code:
Private Sub Worksheet_Activate()
Dim ad1$, ad2$, r1 As Range, r2 As Range, t1, t2, i&
With Feuil1 'CodeName
  .[H:H].Replace ".-", "", xlPart 'nettoyage...
  .[H:H].Replace ".", "." 'remplace le point par le point...
  ad1 = .[B:B].Address(, , , True)
  ad2 = .[H:H].Address(, , , True)
End With
Set r1 = Range("B1", Range("B" & Rows.Count).End(xlUp)(2)) 'au moins 2 éléments
Set r2 = r1.Offset(, 6) 'colonne H
t1 = r1: t2 = r2 'matrices, plus rapide
For i = 2 To UBound(t1) - 1
  t2(i, 1) = Evaluate("SUMIF(" & ad1 & "," & t1(i, 1) & "," & ad2 & ")")
Next
r2 = t2
End Sub
Fichier joint.

A+
 

Pièces jointes

Re : [job75 a résolu] Somme d'une plage sous condition en VBA

Re,

Le tableau en Feuil2 pouvant être raccourci, il peut être utile d'ajouter à la fin de la macro :

Code:
Range(r2(UBound(t2)), r2(Rows.Count)).ClearContents
Tester avec ce fichier (2).

A+
 

Pièces jointes

Re : [job75 a résolu] Somme d'une plage sous condition en VBA

Bonjour le fil, le forum,

Noter que sur les fichiers précédents l'instruction :

Code:
.[H:H].Replace ".", "." 'remplace le point par le point...
n'est pas nécessaire.

Elle l'est si en colonne H de Feuil1 il y a des valeurs textes comme 35.20.

Fichier (3).

A+
 

Pièces jointes

Re : [job75 a résolu] Somme d'une plage sous condition en VBA

Bonsoir Lone-wolf,

Merci beaucoup, en fait j'ai une meilleure solution.

Elle consiste à entrer une seule formule dans la plage en colonne H :

Code:
Private Sub Worksheet_Activate()
Dim ad1$, ad2$, r1 As Range, r2 As Range
With Feuil1 'CodeName
  .[H:H].Replace ".-", "", xlPart 'nettoyage...
  .[H:H].Replace ".", "." 'remplace le point par le point...
  ad1 = .[B:B].Address(, , , True)
  ad2 = .[H:H].Address(, , , True)
End With
Set r1 = Range("B2", Range("B" & Rows.Count).End(xlUp)(2))
Set r2 = r1.Offset(, 6) 'colonne H
r2.Formula = "=SUMIF(" & ad1 & "," & r1.Address & "," & ad2 & ")"
r2 = r2.Value 'ne garde que les valeurs
Range(r2(r2.Rows.Count), r2(Rows.Count - 1)).ClearContents
End Sub
Fichier (4).

J'ai testé sur Excel 2010 les fichiers (3) et (4) avec 6000 lignes sur les 2 feuilles :

- fichier (3) => 4,53 secondes

- fichier (4) => 1,75 secondes.

Bonne fin de soirée.
 

Pièces jointes

Dernière édition:
- 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

Discussions similaires

N
Réponses
5
Affichages
3 K
Nicocotte125
N
A
Réponses
1
Affichages
1 K
A
C
Réponses
3
Affichages
2 K
claivier_58
C
K
Réponses
2
Affichages
2 K
Compte Supprimé 979
C
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…