Bon de commande automatique (réalisé par dhany)

Salut à tous,

Je me permets de venir solliciter votre aide car j'avais, l'année passée, été aidé par une super star EXCEL sur ce forum et il semblerait que cette personne ne soit plus active sur le site.

Dhany m'avait à l'époque aidé à réaliser un bon de commande automatique qui prenait l'information sur un tableau "X" et la retranscrivait automatiquement sur le bon de commande standard. J'aurais besoin de l'optimiser et surtout de comprendre comment cette personne l'avait réaliser afin de ne plus me retrouver dans cette situation à l'avenir.

Est ce que qqn pourrait essayer de m'aider à comprendre please?

Milles merci pour votre aide et excellente fin de semaine à tou

Bonjour,

Je pense que tu aurais plus de chance d'avoir une réponse si tu expliquais ce dont tu as besoin, tout en l'illustrant avec des exemples voir ton fichier si possible.

Cordialement

Merci Vince 1512,

Effectivement, je pensais avoir attaché le dossier mais il semblerait que non...

Pour résumer, j'ai un tableau X reprenant 5 catégories de produits chacun ayant un code propre de 1.1 à 5.7. Dhany m'avait à l'époque aidé en intégrant les 4 premières catégories au tableau. En inscrivant le code produit dans le Bon de Commande en page 2 le nom et le prix du produit s'annotaient automatiquement. J'ai voulu ajouter la catégorie BUSINESS LUNCH comme 5ème catégorie et mon bon de commande ne la reconnait hélas pas...

Je suis donc bloqué de ce côté.

Re,

j'ai refais à ma sauce la macro (je comprenais strictement rien à son code, surement à cause du fait que je m'y connais pas assez).

Vu la simplicité de mon code, il est possible que j'ai oublié certaine fonctionnalité ou sécurité qu'il avait faite.

Donc si quelqu'un passe par là et est capable de reprendre son code ...

Cordialement

Un tout grand merci Vince! C'est top!!!

Est ce que tu penses juste pouvoir m'expliquer comment tu procèdes et éventuellement m'expliquer le code? Comme ça si jamais je dois encore ajouter une catégorie je serai à l'avenir comment faire sans devoir déranger tout le monde.

Thank's et bonne fin d'aprem.

Bonsoir à tous...

sauf erreur de ma part il suffit de changer un 4 en 5 sur cette ligne pour que tout fonctionne (dans le code initial de DHANY que je salut au passage)

 vx = Val(Left$(Target, 1)): If vx < 1 Or vx > 4 Then Exit Sub
 vx = Val(Left$(Target, 1)): If vx < 1 Or vx > 5 Then Exit Sub

Fred

Works perfectly!!!

Un tout grand merci. C'est Top. Et si maintenant je vous lais ajouter une catégorie "6", comment devrais opérer? Qu'est ce que je devrais changer dans la formule et où devrais je l'encoder? Je suis vraiment nul là dedans...

Merci d'avance

bonjour à tous

si je peux me permettre...

https://forum.excel-pratique.com/viewtopic.php?f=10&t=123871

valable en réalité pour tous VBAiste

on le comprend tout de suite quand on relit un code d'autrui, ou qu'on veut modifier son propre code à soi

amitiés

Bonjour.

Si tu veux du 6 maintenant.... il suffira de remplacer le 5 par 6 dans la ligne de code ci dessus...

Comme à été fait pour passer du 4 au 5.... (enfin en théorie... j'avoue que je n'ais plus trop de souvenirs du code écrit par Dhany... ) et mon téléphone ne lit pas encore le VBA....

Fred

Bonjour à Greg (et aux autres),

merci à Vince et Fred de t'avoir aidé ; effectivement, pour une 5ème catégorie, il suffisait de remplacer 4 par 5.

pour une 6ème catégorie : remplacer 5 par 6 ; pour une 7ème catégorie : remplacer 6 par 7 ; etc...


je te retourne ton fichier Excel (avec plusieurs autres modifs) :


A) sur la 1ère feuille "MENU - PRIX"

1) en colonne A, fusion verticale raccourcie de 4 lignes ➯ rose pour A2:A31 au lieu de A2:A35

2) j'ai supprimé ta colonne J inutile (car elle était vide) ➯ dernière cellule : i39 (au lieu de J39)


B) sur la 2ème feuille "BDC REPAS"

1) j'ai amélioré la présentation du texte de la cellule D58 ; dans une cellule, tu peux passer à la ligne avec Alt Entrée.

2) à droite de la colonne K, tu as 9 autres colonnes (L à T) ; dernière cellule : T61

image

tu as aussi des données en P47:Q61 ; j'ai tout laissé tel que, mais si tu n'as pas besoin de ces données, pense à supprimer les 9 colonnes L:T ; si au contraire tu veux garder ces données, tu devrais les déplacer sur une 3ème feuille supplémentaire, et éventuellement masquer (= cacher) cette 3ème feuille.


C) modifs de la sub Worksheet_Change()

1) 1ère ligne : au lieu de If Target.Count > 1 ... : If Target.CountLarge > 1

2) 2ème ligne Dim : il manque le type de lgm : lgm& ; mais j'ai supprimé cette variable car je n'utilise plus Rows.Count ;

ça donne donc : Dim celX As Range, dl1&, dl2&, lng As Byte, vx As Byte

3) deux lignes plus loin, c'est là qu'est le changement par rapport à la dernière catégorie (de 4 en 5) :

... : If vx < 1 Or vx > 5 Then Exit Sub

4) dessous, le bloc With qui était ainsi :

  With Worksheets("MENU - PRIX")
    lgm = Rows.Count
    dl1 = .Cells(lgm, 2).End(xlUp).Row
    dl2 = .Cells(lgm, 7).End(xlUp).Row
    If dl2 > dl1 Then dl1 = dl2
    Set celX = .Range("B2:B" & dl1).Offset(, k).Find(Target, , , 1)
  End With

est devenu :

  With Worksheets("MENU - PRIX")
    dl1 = .[B500].End(3).Row: dl2 = .[G500].End(3).Row: If dl2 > dl1 Then dl1 = dl2
    Set celX = .Range("B2:B" & dl1).Offset(, k).Find(Target, , -4163, 1, 1)
  End With

au lieu du Rows.Count, c'est maintenant .[B500] et .[G500] ; ça simplifie le code, et j'ai fait ça car sur la 1ère feuille, ton menu va jusqu'en ligne 39 ; si tu agrandissais 5× ce menu, ça irait jusqu'en ligne 195 (5*39) ; donc tu vois que jusqu'à 500, ça te fait vraiment une très grosse marge !

note que .End(3) est la même chose que .End(xlUp), en plus court ; j'ai aussi complété le Find() : .Find(Target, , -4163, 1, 1) est la même chose que .Find(Target, , xlValues, xlWhole, xlByRows)


voilà, t'as plus qu'à faire tout ça dans ton fichier réel ! à ton tour de bosser, maint'nant !

courage, camarade ! c'est comme ça qu'tu vas pouvoir progresser !

dhany

Rechercher des sujets similaires à "bon commande automatique realise dhany"