Code répétitif besoin de simplifier

Fermé
sebseb - Modifié par sebseb le 13/06/2016 à 23:50
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 18 juin 2016 à 08:21
Bonjour,

Je souhaite crée une sorte de logiciel pour mon BDE dans mon école. Ce logiciel va permettre d'enregistrer toutes les ventes que le BDE effectue.

Par exemple si un étudiant vient pour commander un coca + un twix je clic sur ma checkbox twix + coca et il me sors le prix unitaire ainsi que le nom des mes ventes dans une autre feuille de calcul.

J'ai trouvé une macro qui le fais très bien sauf que je dois répéter ma macro autant de fois que j'ai de produit a vendre.... c'est très long et sachant que j'ai deux paramètre qui varient : le nom de ma checkbox situé dans un userform, et les coordonnées d'une feuille de calcul ou est référencé le prix de chaque produit....

En bref si un jour je veux modifier la macro je devrai le faire sur les 50 produits alors que j'ai uniquement deux paramètres qui varient....

J'ai essayé de le faire par une fonction mais je n'ai jamais utilisé ce principe auparavant et j'ai pas trop compris les différentes explications sur développer.com...
Si vous pouvez m'aider à trouver une solution je vous en serrai bien reconnaissant !

voici le code :

If coca.Value = True Then 'une des deux valeurs à faire varier ça peut être coca ou icetea ou bien café etc...

With Worksheets("Tarifs Produits") 'dans la feuille tarifs produit
.Activate 'je l'active
.Range("A3:C3").Select 'je selectione ma rangé qui correspond la reference de mon produit cette valeur peut prendre la valeur : A5:C5 ou F8:H8 ou H2:J2 etc ...
End With 'fin du with
Selection.Copy 'je copie ma selection

With Worksheets("Commande en cours") 'dans la feuille commande en cours
.Activate 'je l'active
derlig = .Range("B1048576").End(xlUp).Row 'compte quelle est la dernière ligne sur la colonne B
.Range("B" & derlig + 1).Select 'je selectionne le n° de la case qui correspond à la dernière case +1
ActiveSheet.Paste 'je cole ma selection de la feuille Tarifs produit à la suite des autres produits
End With

End If


J'espère avoir été claire.. en vous remerciant d'avance !
A voir également:

5 réponses

PatFoll Messages postés 111 Date d'inscription lundi 30 mai 2016 Statut Membre Dernière intervention 5 juillet 2016 20
14 juin 2016 à 00:11
Déclare les valeurs des produits, correspondant à leurs tarifs. Gros travail mais ensuite le calcul se fera automatiquement à chaque fois que tu demanderas quelques choses, peut importe la quantité.
0
gorgal Messages postés 8 Date d'inscription mardi 14 juin 2016 Statut Membre Dernière intervention 17 juin 2016
14 juin 2016 à 12:37
Salut, c'est "sebseb" j'ai crée un compte ccm c'est pour ça que j'ai changé de pseudo, bref.
Merci pour ton aide mais je n'ai pas trop compris comment est-ce que je pourrai faire ça... j'ai mis un lien vers le fichier excel, peut-être que tu pourra voire un peu mieux ce que je recherche en testant le programme..

http://www.cjoint.com/c/FFokCeAzV1w
0
gorgal Messages postés 8 Date d'inscription mardi 14 juin 2016 Statut Membre Dernière intervention 17 juin 2016 > gorgal Messages postés 8 Date d'inscription mardi 14 juin 2016 Statut Membre Dernière intervention 17 juin 2016
15 juin 2016 à 10:47
Lien supprimé Cf nouveau lien dans la discussion d'après
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
14 juin 2016 à 07:48
bonjour

J'espère avoir été claire..

Loupé !



Mettre le classeur sans données confidentielles en pièce jointe sur https://www.cjoint.com/
et coller le raccourci par un clic droit sur le lien proposé dans le message de réponse

Dans l’attente

0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
14 juin 2016 à 17:02
J'ai supprimé les anciens liens

Mettre la PJ en .zip et non en.rar
0
gorgal Messages postés 8 Date d'inscription mardi 14 juin 2016 Statut Membre Dernière intervention 17 juin 2016
Modifié par gorgal le 14/06/2016 à 22:08
Ok pas de soucis voici le lien :)

http://www.cjoint.com/c/FFoudq8LtKY

Faut cliquer sur l'onglet accueil en bas (si c'est pas sur l'onglet par défaut) et clic sur le bouton "commande hors menu" j'ai pas encore fais l'autre option... Puis après le reste devrais rester logique :D
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303 > gorgal Messages postés 8 Date d'inscription mardi 14 juin 2016 Statut Membre Dernière intervention 17 juin 2016
15 juin 2016 à 08:41
Bonjour,

Décidément...

Windows me dit que de dossier compressé n'est pas valide !!!

essaies peut-^tre sans zip...
0
gorgal Messages postés 8 Date d'inscription mardi 14 juin 2016 Statut Membre Dernière intervention 17 juin 2016
15 juin 2016 à 10:45
J'ai recrée un autre fichier zip avec un autre logiciel peut-être que ça va marcher... Quand je clic sur le lien ça marche nickel pour moi.. :O

https://www.cjoint.com/c/FFpiRfSTZRw
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
15 juin 2016 à 11:01
gagné! :o)

sois patient
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
Modifié par michel_m le 16/06/2016 à 09:16
Bonjour

bravo pour la présention agréable de ton formulaire :o))

Ci joint proposition pour traitement des commandes

tu as la prise en compte des sélections de produits pour 2 gammes (café et soda) qui attaque une procédure commune valable pour toutes les gammes: Sub commander(mchoix)
a toi de terminer pour les 3 gammes restantes...

Attention: tu as des discordances d'orthographe des produits ente la feuille "tarifs" et le formulaire, ce qui fout un sacré b...

Je n'ai pas traité l'étape 3 car je n'ai pas compris ton système;
par exemple je te commande un café, une tartiflette et un soda
tel que tu l'as réalisé, tu me présentes la note pour le café, je te paye, et tu enregistres le bénef sur le café, m^me punition pour la tartiflette et enfin repunition pour le soda....
normalement ,il faudrait me présenter qu'une note globale et tu enregistres le tout...
de m^me, je reprends ce que je t'avais écris hier:
si je viens de voir à ta buvette et que je te commande 3 cafés et 4 chocolats pour mes petit(e)s camarades et moi, comment fais-tu ?

la bête:
http://www.cjoint.com/c/FFqhn1JZjpt

dans l'attente
 Michel
0
gorgal Messages postés 8 Date d'inscription mardi 14 juin 2016 Statut Membre Dernière intervention 17 juin 2016
16 juin 2016 à 17:52
Merci de m'avoir aider aussi rapidement ! c'est cool ! je vais regarder ça ce soir et je te tiens au jus !
Et je te demandais si ça marchait au niveau du téléchargement ;) désole pour le malentendu !
Puis c'est sur qu'il faudrait que je gère le choix de rentrer une quantité... car normalement fallait cliquer autant de fois que nécessaire pour ajouter 1, 2, ou 3 produit du même type... C'est claire que c'est pas super ergonomique comme idée !

Merci du coup de pouce !
0
gorgal Messages postés 8 Date d'inscription mardi 14 juin 2016 Statut Membre Dernière intervention 17 juin 2016
16 juin 2016 à 23:15
pas mal d'instruction que j'ai pas compris au premiers abords, je te tiens au jus quand j'ai tout saisie ou pas ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
17 juin 2016 à 08:20
Bonjour
Et je te demandais si ça marchait au niveau du téléchargement ;) désole pour le malentendu !

Effectivement! excuse moi

pour la quantité, l'idéal serait de remplacer les checkbox par des combobox mais c'est un sacré boulot ! si oui, il faudrait un ordre précis pour leur numérotation...
0
gorgal Messages postés 8 Date d'inscription mardi 14 juin 2016 Statut Membre Dernière intervention 17 juin 2016
17 juin 2016 à 10:35
Ok, je te tiens au jus en ce qui concerne la quantité, mais déjà j'ai pas encore compris comment fonctionnait ton code... par exemple j'ai jamais écris ce genre de ligne :
Sub commander(mchoix)

Moi quand j'ecrivais du code (jusqu'à maintenant) j'écrivais uniquement
Sub commander()

Et rien dans les () j'ai appris par moi même donc je connais pas grand choses ... Je vais creuser le truc !
Il y a d'autres truc que je connais pas comme :
Option Explicit
Option Base 1

ou l'objet ReDim :
ReDim T_produit(50, 2)

ou encore :
        Ligvid = .Columns("B").Find("", .Range("B1")).Row
.Cells(Ligvid, "A") = Date
.Cells(Ligvid, "B") = "Total dû"
.Cells(Ligvid, "C") = Total


Bref je vais regarder pas à pas en détail car pour le moment il y a pleins d'objets que je comprend pas ... Mais ça fonctionne donc c'est top ! Pour que je puisse adapter tout ça et améliorer faut que je comprenne tout, c'est mieux que demander à chaque fois ;)
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303 > gorgal Messages postés 8 Date d'inscription mardi 14 juin 2016 Statut Membre Dernière intervention 17 juin 2016
18 juin 2016 à 08:21
Bonjour,
pour t'aider de la lecture
https://bidou.developpez.com/article/VBA/
et
https://silkyroad.developpez.com/vba/tableaux/

pour ma part, il me semble qu'on pourrait simplifier la commande en cochant tous les produits dans toutes les gammes puis valider la commande soit un seul bouton au lieu de cinq. on aurait alors l'ensemble de la commande dans la page "commande en cours" (je n'ai toujours pas compris l'utilité des boutons "bénéfices" , l'action pouvant être effectuée lors de la procédure "commande")
d'ailleurs, si tu maintiens ton procédé actuel, il faut que je reprenne le code de la commande ( code assez complexe dans un multipage) pour cibler uniquement sur la gamme en cours;
reste malgré tout le problème du nombre commandé sur un produit (remplacer le checkbox par un combobox donnant le nombre entre 0 et N.
0