XL 2013 Création d'une macro pour additionner valeurs et envoyer sur autre feuille

débutantplus

XLDnaute Junior
Bonjour à tous et à toutes,
Je suis à la recherche d'une macro qui pourrait me faire gagner beaucoup de temps.
Je souhaiterais que la macro additionne les valeurs "Qté" si les critères "date de livraison" ; "Désignation" ; "lot" ; "liquidé" sont identiques ( sur la feuille "Commandes" )
et qu'elle envoi les résultats des aditions ou si il y a pas d'addition à réaliser des valeurs tout court sur la feuille "stock commande (2) " à la bonne cellule ( date de livraison et critères identiques).
Attention elle doit travailler que sur les lignes portant le critère "liquidé".
J'espère que c'est clair, ne pas hésiter à me demander des précisions, je vous laisse mon fichier ci joint.
Merci d'avance pour votre travail.
 

Pièces jointes

  • Classeur13.xlsm
    807.1 KB · Affichages: 12
Solution
Re bonjour,
Et voici la version avec macro (exécutée lors de l'activation et la désactivation de la feuille)
Dans le module M01_Stock_Cmdes
Enrichi (BBcode):
Sub Qté_Dés_Lot_Date()

     Dim WshStockCmdes As Worksheet: Dim LoS As ListObject
     Dim Nb_Col As Long, Nb_Lgn As Long
    
     Set WshStockCmdes = Feuil11: Set LoS = WshStockCmdes.ListObjects(1)
     Nb_Lgn = LoS.ListRows.Count: If Nb_Lgn < 1 Then Exit Sub
     Nb_Col = LoS.ListColumns.Count - 1: If Nb_Col < 1 Then Exit Sub
    
     Application.ScreenUpdating = False
     With LoS.DataBodyRange.Offset(0, 1).Resize(, Nb_Col)
          .FormulaR1C1 = "=SUMPRODUCT((Tb_CMDES[Qté])*((Tb_CMDES[Désignation]&CHAR(10)&Tb_CMDES[Lot])=(Tb_STOCK_CMDES[#Headers] C))*(Tb_CMDES[Date...

AtTheOne

XLDnaute Impliqué
Supporter XLD
Bonjour à toutes & à tous, bonjour @débutantplus
Voilà toujours une solution par formule.
Tes dates de livraison sont en fait des textes avec comme séparateur le point, j'ai fait avec ...
La concaténation Désignation Lot n'était pas homogène (avec ou sans espace pour séparer) j'ai mis systématiquement un retour à la ligne (ALT+ENTRÉE).
Pour plus de lisibilité dans la formule, j'ai créé deux tableaux structurés "Tb_CMDES" et "Tb_STOCK_CMDES".
La formule (En colonne B) :
Enrichi (BBcode):
=SOMMEPROD((Tb_CMDES[Qté])*((Tb_CMDES[Désignation]&CAR(10)&Tb_CMDES[Lot])=(Tb_STOCK_CMDES[#En-têtes] B:B))*(Tb_CMDES[Date livr.]=TEXTE(Tb_STOCK_CMDES[[#Cette ligne];[Date]];"jj.mm.aaaa")))
à recopie vers la droite par Copier-Coller (et non en tirant vers la droite)
Amicalement
Alain
MODIF : Version sans formules matricielles et compatible Office2013
 

Pièces jointes

  • Formule pour additionner valeurs et envoyer sur autre feuille 2013.xlsm
    881.1 KB · Affichages: 7
Dernière édition:

AtTheOne

XLDnaute Impliqué
Supporter XLD
Re bonjour,
Et voici la version avec macro (exécutée lors de l'activation et la désactivation de la feuille)
Dans le module M01_Stock_Cmdes
Enrichi (BBcode):
Sub Qté_Dés_Lot_Date()

     Dim WshStockCmdes As Worksheet: Dim LoS As ListObject
     Dim Nb_Col As Long, Nb_Lgn As Long
    
     Set WshStockCmdes = Feuil11: Set LoS = WshStockCmdes.ListObjects(1)
     Nb_Lgn = LoS.ListRows.Count: If Nb_Lgn < 1 Then Exit Sub
     Nb_Col = LoS.ListColumns.Count - 1: If Nb_Col < 1 Then Exit Sub
    
     Application.ScreenUpdating = False
     With LoS.DataBodyRange.Offset(0, 1).Resize(, Nb_Col)
          .FormulaR1C1 = "=SUMPRODUCT((Tb_CMDES[Qté])*((Tb_CMDES[Désignation]&CHAR(10)&Tb_CMDES[Lot])=(Tb_STOCK_CMDES[#Headers] C))*(Tb_CMDES[Date livr.]=TEXT(Tb_STOCK_CMDES[[#This Row],[Date]],""jj.mm.aaaa"")))"
          .Value = .Value
          .Replace What:="0", Replacement:="", LookAt:=xlWhole
     End With
     Application.ScreenUpdating = True
    
End Sub
Code de la feuille "stock commandes (2)"

Enrichi (BBcode):
Private Sub Worksheet_Activate()
     Qté_Dés_Lot_Date
End Sub

Private Sub Worksheet_Deactivate()
     Qté_Dés_Lot_Date
End Sub
Avec les mêmes conditions que pour le post #2
Amicalement
Alain
 

Pièces jointes

  • Macro pour additionner valeurs et envoyer sur autre feuille 2013.xlsm
    847.3 KB · Affichages: 9

Discussions similaires

Statistiques des forums

Discussions
312 107
Messages
2 085 359
Membres
102 874
dernier inscrit
Petro2611