simplification d'un code

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

mephis

XLDnaute Occasionnel
Bonjour à tous et merci d'avance de votre aide.

Mon programme sert à calculer un inventaire plus rapidement, j'ai une feuille avec tout les achats répertorier, et une autre feuille qui additionne tout les achats d'un même produit.

Si j'ai acheté 2 boite de petits-pois le lundi, 5 le mardi et 3 le jeudi, dans la feuille inventaire il devra me marquer 10 à côté de petits-pois.

Mon programme fonctionne mais est structuré de cette façon :

For i = 1 To 20
Sheets("Achat Cuisine").Select
If Sheets("Achat Cuisine").Cells(i, 1) = "petits pois" Then
Sheets("Inventaire Cuisine").Select

For j = 1 To 20
If Sheets("Inventaire Cuisine").Cells(j, 1) = "petits pois" Then

Cells(j, 2) = Cells(j, 2).Value + Sheets("Achat Cuisine").Cells(i, 2).Value


End If
Next
End If
Next


Le problème est que j'ai des centaines d'articles donc mon programme va devenir long et au final je ne vais pas gagner le temps que j'aimerai.



Mon deuxième problème est mon calcul ( 2+5+3) n'est bon qu'une fois:

Si je rajoute une commande de petits-pois avec une quantité de 7 boites, le calcul sera (2+5+3)+(2+5+3+7)


Je vous met un petit fichier joint qui reprends tout ce que je viens de dire merci.
 

Pièces jointes

Re : simplification d'un code

Bonjour mephis,

Voici une méthode avec une seule boucle, dont la limite supérieure est calculée par le programme :

Code:
Sub tri()
Dim Produit As String
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
  Produit = Sheets("Achat Cuisine").Cells(i, 1)
  With Sheets("Inventaire cuisine")
    Set Pdt = .Range("A:A").Find(Produit, LookIn:=xlValues, lookat:=xlWhole)
    If Pdt Is Nothing Then Exit Sub
    .Cells(Pdt.Row, 2).Value = .Cells(Pdt.Row, 2).Value + Sheets("Achat cuisine").Cells(i, 2).Value
  End With
Next
End Sub
Espérant avoir répondu.

Cordialement.
 
Re : simplification d'un code

Merci papou-net mais ça fonctionne pour mon premier problème, mais pas pour le deuxième, si je met deux petits-pois et que j'apuis sur le bouton il va bien me mettre deux boites, mais si je rappuis il va m'en mettre 4.
 
Re : simplification d'un code

Salut mephis et le forum
Code:
mais pas pour le deuxième, si je met deux petits-pois et que j'apuis sur le bouton il va bien me mettre deux boites, mais si je rappuis il va m'en mettre 4.
Il suffit de remettre ta page achat à zéro avant de sortir de ta macro.A+
 
Re : simplification d'un code

RE mephis,

Voici donc une version qui devrait te satisfaire.

Si le produit n'existe pas dans la feuille Inventaire, la macro le rajoute. Donc, si tu entres de nouveaux produits dans la feuille Achats, tu n'as rien d'autre à faire que de cliquer sur Bouton1 dans la feuille Inventaire.

Remarque : pour faciliter la totalisation par produit, la macro effectue un tri automatique sur la feuille Achats. Ne t'étonnes donc pas de ce changement.

Espérant avoir solutionné ta demande.

Cordialement.

PS : bonjour Gorfael.
 

Pièces jointes

Re : simplification d'un code

c'est génial papou-net merci beaucoup


PS: As-tu changer des paramètres? Quand je fais un copier coller de ce que tu m'a donner en changeant les noms à changer ça me dit:

"la méthode Sort à échoué" et cette partit du code est en jaune


.Columns("A:C").Sort Key1:=.Range("A2"), Order1:=xlAscending, Key2:=.Range("C2") _
, Order2:=xlAscending, Key3:=.Range("B2"), Order3:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:=xlSortNormal


PS bis: Mon problème venait des listes déroulante que j'avais ton programme n'est pas compatible si tu possèdes des liste déroulante dans tes feuilles mais ce n'est pas grave.

Encor merci et bonne continuation.
 
Dernière édition:
Re : simplification d'un code

RE :

Si tu ne fais pas le tri sur la liste, les totaux seront erronés si les produits sont mélangés. Il faut alors revoir le programme.

Si tu peux joindre ton fichier, je regarderais ce qu'il est possible de faire.

Cordialement.
 
Re : simplification d'un code

C'est gentil mais le tri c'était juste du gadget ce n'était pas vraiment utile, c'est déjà bien sympathique de ta part.

Merci .
Cordialement.

RE :

Non, le tri n'est pas du gadget, il est indispensable pour la bonne totalisation par produits si ces derniers sont éparpillés sur la feuille. Je l'ai prévu ainsi pour simplifier le code de la macro.

Mais si tu es certain que les produits ne seront jamais mélangés, ok ça peut rester ainsi.

Cordialement.
 
- 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

Réponses
15
Affichages
775
Réponses
5
Affichages
905
Réponses
4
Affichages
729
Réponses
8
Affichages
776
Réponses
8
Affichages
389
  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
449
Retour