simplification d'un code

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

  • Classeur10.xls
    23.5 KB · Affichages: 45
  • Classeur10.xls
    23.5 KB · Affichages: 45
  • Classeur10.xls
    23.5 KB · Affichages: 47

Papou-net

XLDnaute Barbatruc
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.
 

mephis

XLDnaute Occasionnel
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.
 

Gorfael

XLDnaute Barbatruc
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+
 

Papou-net

XLDnaute Barbatruc
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

  • Copie de Classeur10.xls
    27 KB · Affichages: 26
  • Copie de Classeur10.xls
    27 KB · Affichages: 32
  • Copie de Classeur10.xls
    27 KB · Affichages: 33

mephis

XLDnaute Occasionnel
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:

Papou-net

XLDnaute Barbatruc
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.
 

Papou-net

XLDnaute Barbatruc
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.
 

ROGER2327

XLDnaute Barbatruc
Re : simplification d'un code

Bonjour à tous


Une autre solution (sans classement).​


ROGER2327
#6265


Mardi 10 Phalle 139 (Sainte Nitouche, orante - fête Suprême Quarte)
3 Fructidor An CCXX, 5,9166h - lycoperdon
2012-W34-1T14:11:59Z
 

Pièces jointes

  • XLD_190579_sommeprod.xls
    39 KB · Affichages: 24

Statistiques des forums

Discussions
311 725
Messages
2 081 949
Membres
101 851
dernier inscrit
vaiata