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

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 !

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

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

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
 
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 ?

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 !
 
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
 
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

Notre forum d’entraide est 100 % gratuit et le restera.
Aucune formation payante, aucun fichier à acheter, rien à vendre. Mais comme tout site, nous devons couvrir nos frais pour continuer à vous accompagner.
Soutenez-nous en souscrivant à un compte membre : c’est rapide, vous choisissez simplement votre niveau de soutien et le tour est joué.

Je soutiens la communauté et j’accède à mon compte membre

Discussions similaires

Retour