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

XL 2021 Demande de programme VBA pour calculs de volumes/poids et date du plus ancien produit

toto142

XLDnaute Junior
Bonjour à tous,

Je souhaiterais solliciter la communauté pour m'aider à créer deux programmes VBA pour automatiser certaines tâches dans un tableau sur Excel.

  1. Premier programme :Je souhaite que le programme calcule la somme des volumes et des poids des produits dans la feuille "Stocks", en fonction de la nocivité et du laboratoire sélectionnés par l'utilisateur. La nocivité et le laboratoire sont définis dans des cases grises du tableau "Nocivité". Le programme devra parcourir le tableau "Stocks", filtrer les produits qui correspondent à la nocivité et au laboratoire choisis, puis afficher la somme des volumes et des poids dans le tableau "Nocivité".
  2. Deuxième programme :Ce programme devra inscrire la date du produit le plus ancien stocké dans chaque laboratoire, en vérifiant toutes les dates présentes dans la feuille "Stocks" pour chaque laboratoire. La date la plus ancienne devra être automatiquement renseignée pour chaque laboratoire dans le tableau correspondant.
Je tiens à préciser que toutes les variables doivent être déclarées correctement et que les codes doivent être clairs et compréhensibles.

Merci d'avance pour votre aide !
 

Pièces jointes

  • Stockage.xlsm
    451 KB · Affichages: 5

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Toto,
Tenez vous vraiment à utiliser des macros VBA ?
Car on peut le faire en simples formules, voir PJ, avec :
VB:
Volume :
=SOMME.SI.ENS(Stocks!$D$1:$D$22;Stocks!$F$1:$F$22;Tri!A2;Stocks!$E$1:$E$22;"L")
Poids :
=SOMME.SI.ENS(Stocks!$D$1:$D$22;Stocks!$F$1:$F$22;Tri!A2;Stocks!$E$1:$E$22;"kg")
Date la plus ancienne :
=MIN(SI(Stocks!$G$2:$G$22=Tri!F2;Stocks!$A$2:$A$22))
( à valider avec Maj+Ctrl+Entrée sur les anciennes versions XL )
Evidemment on peut le faire en VBA, mais quel intérêt ?
 

Pièces jointes

  • Stockage.xlsm
    172.8 KB · Affichages: 2

vgendron

XLDnaute Barbatruc
Bonjour

pourquoi des macros alors que des formules font l'affaire? (si j'ai bien compris)
1) transformer les différents tableaux en Table Structurée (en leur donnant un nom: ex: t_BDD, t_Stock, t_...)
2) utiliser des formules
 

Pièces jointes

  • Stockage.xlsm
    457.2 KB · Affichages: 1

vgendron

XLDnaute Barbatruc
juste une remarque sur cette "demande"

VB:
Je tiens à préciser que toutes les variables doivent être déclarées correctement et que les codes doivent être clairs et compréhensibles.
ca fait un peu 'professeur' qui s'adresse aux élèves...
rappel: ici, il n'y a que des bénévoles qui interviennent SI ils veulent..
et dans le cas présent, le demandeur c'est toi.., c'est toi qui doit essayer de comprendre, pas à nous d'executer
 

toto142

XLDnaute Junior

Bien évidemment, il est très simple de réaliser cela en utilisant des fonctions Excel, mais moi, je cherche à travailler mon écriture VBA, car je suis encore novice.

Si vous avez des suggestions ou conseils pour améliorer ce code ou l'approche en VBA, je suis preneur. Merci !
 

vgendron

XLDnaute Barbatruc
Bonjour

pour inscrire une formule PAR VBA, voici ma méthode
1) créer la chaine formule qui contient la formule telle qu'elle sera inscrite dans la cellule
2) placer la formule

ex: inscrire en A1 la formule =somme(B1:B10)
VB:
sub InscrireFormule()
dim Formule as string

Formule="=sum(B1:B10)"
range("A1").formula=Formule
end sub

puisque VBA est Anglais, il faut écrire la formule en Anglais (ca évite de devoir passer par des formulalocal qui ne fonctionnent pas toujours à moins de revalider la cellule...
==> utiliser les noms anglais des fonctions (Somme==>Sum)
==> les points-virgule deviennent des virgules
==> les guillemets " deviennent des double guillemets ""


si tu souhaites que ce soit VBA qui effectue le calcul et ne mette QUE le résultat, tu peux passer par la fonction "Evaluate"
ou alors, tu te tapes une ou des boucles et des if pour calculer ton résultat
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Toto, Vgendron,
ca fait un peu 'professeur' qui s'adresse aux élèves...
Ou plutôt étudiant qui voudrait du tout cuit.

En PJ un exemple avec Worksheet_Activate dans la feuille Tri, elle s'exécute lorsqu'on sélectionne la feuille Tri.
VB:
Sub Worksheet_Activate()
    Application.ScreenUpdating = False
    Volume = "=SOMME.SI.ENS(Stocks!$D$1:$D$22;Stocks!$F$1:$F$22;Tri!A2;Stocks!$E$1:$E$22;CAR(76))"
    Poids = "=SOMME.SI.ENS(Stocks!$D$1:$D$22;Stocks!$F$1:$F$22;Tri!A2;Stocks!$E$1:$E$22;CAR(107)&CAR(103))"
    DatePlusAncienne = "=MIN(IF(Stocks!R2C7:R22C7=RC[-1],Stocks!R2C1:R22C1))"
    DL = [A100].End(xlUp).Row
    Range("B2:B" & DL).FormulaLocal = Volume
    Range("C2:C" & DL).FormulaLocal = Poids
    Range("B2:C" & DL) = Range("B2:C" & DL).Value
    DL = [F100].End(xlUp).Row
    Range("G2").FormulaArray = DatePlusAncienne
    Range("G2").AutoFill Destination:=Range("G2:G" & DL), Type:=xlFillDefault
    Range("G2:G" & DL) = Range("G2:G" & DL).Value
End Sub
Evidemment sans déclaration ni commentaires car je n'ai pas l'habitude de recevoir ce genre de consignes à mon âge.
Je tiens à préciser que toutes les variables doivent être déclarées correctement et que les codes doivent être clairs et compréhensibles.
 

Pièces jointes

  • Stockage (V2).xlsm
    175 KB · Affichages: 0

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…