Macro - Remplissage et Impression Auto
Hello,
Aujourd’hui au menu une ‘simple’ gestion de stock
La feuille ‘Stock_In’ reprend sous forme de tableau les palettes envoyées en stock (chambre froide)
Date, numéro du BL, code produit, description, et quantité de palettes envoyées pour ce même code
La feuille ‘BL’ représente le bon de livraison que j’imprime et je mets sur la palette avant de l’envoyer. J’imprime chaque BL quatre fois, un pour chaque côté de la palette filmée
Je souhaiterais SVP une macro qui me permette de :
- imprimer automatiquement (en remplissant les cellules J3, A6 et A14) 4 exemplaires de chaque ligne du tableau pour un numéro de BL donné
Exemple : pour le AB20-01 je souhaiterais qu’il y ait 12 feuilles qui sortent de l’imprimante (car j’envoie 2 palettes de ABCD025 et 1 palette de ABCD020)
4 pour ABCD025
4 pour ABCD025
4 pour ABCD020
- enregistrer en un fichier PDF les produits envoyés dans mon exemple
3 feuilles > ABCD025, ABCD025, ABCD020
La cellule J3 pourrait être remplie comme ce qui suit
J3 : le numéro de palette, typiquement ça doit commencer a 1
Exemple : pour ABCD025 pour les 4 premières feuilles imprimées, j’aurais en J3 la valeur 1
pour ABCD025 la deuxième série des 4 feuilles imprimées, j’aurais en J3 la valeur 2
pour ABCD020 les dernières 4 feuilles imprimées, j’aurais en J3 la valeur 3
Si vous avez d’autres idées pour la structure je prends
Merci a tous pour votre temps et votre savoir
Hello,
J'ai refléchi encore et encore et avant qu'il ne soit trop tard, peut-être me permettrez vous cette légère modification qui viendrait simplifier le schéma
Dans le feuille Stock_In, dans le tableau colonne E "Quantité" au lieu d'inscrire 2, peut-être serait-il plus simple que par défaut la quantité soit 1 et si j'envoie deux palettes (même code et même description) je crée deux lignes (ça m'arrange pour les coûts, car si j'envoi deux palettes, je peux en sortir une demain et la deuxieme plusieurs jours après)
Merciii
Bonjour
Pour la rubrique Code, vous voulez quoi dans cette rubrique car dans votre feuille stock, vous avez un doublon. D'où si vous utilisez la cellule J2, cela ne va vous renvoyer que la première ligne donc ABCD025...
Merci Dan,
Je pense qu'avec un fichier ça sera plus clair, d'autant plus que j'ai adapté la feuille Stock_In à ma légère modification
J'ai ajouté 3 feuilles qui correspondent à mes attentes, je pense que tu comprendras tout de suite, c'est assez explicite
sorry, j'ai envoyé trop vite le message précédent
Ok. Je vois dans le dernier fichier
Ce que l'on peut faire, c'est juste un code qui va générer les feuilles sur base de la feuille BL considérée comme modèle et que l'on dupliquera pour chaque ligne de la feuille Stockin
Bon cela ?
Bonjour Dan,
Oui ça peut le faire
Pourrait-on mettre trois boutons dans la feuille Stock_In
1. "Générer les BL" > cette macro va créer les feuilles supplémentaires comme tu l'as si bien proposé
2. "Imprimer les BL" > cette macro va imprimer les feuilles générées en 4 exemplaires chacune
3. "Enregistrer en PDF" > va enregistrer sur un dossier les feuilles générées afin de garder un historique
Cela te paraît possible ?
Bonjour dani,
Le fichier en retour pour test :
- La feuille BL est considérée comme feuille Modèle. Je l'ai remaniée pour supprimer un maximum de cellules fusionnées (toujours à éviter quand c'est possible avec VBA.
- Bouton Bon de livraison : crée une feuille en dupliquant la feuille BL et ce, pour chaque ligne de la feuille Stockin. A noter que le bouton supprime toujours toutes les feuilles BL créées au préalable avant de générer de nouvelles feuilles
- Bouton Imprime : Imprime chaque feuille BL en 4 exemplaires
- Bouton Sauvegarde Pdf : Sauve chaque feuille BL créée dans le répertoire défini par la variable Chemin. Par défaut je l'ai supposé dans le même répertoire que le fichier Stock.
Cordialement
Je te remercie sincèrement pour ton temps, voici mes retours
BON LIVRAISON
D’une manière générale, j'ai compris que cette macro dupliquait la feuille BL avec les informations provenant du tableau de la feuille Stock_In, donc pour toutes les mises en formes, en-tête etc.. que je souhaiterais apporter, je modifie simplement le modèle, c’est bien ça ?
Deux retours sur cette macro
1. Serait-il possible que la macro ne s’exectue à chaque fois que pour les nouvelles lignes, car je serai amené à alimenter le tableau et si à chaque lancement de la macro, toutes les lignes sont prises en compte ce sera pas très lisible et je vais plus me retrouver
2. Serait-il possible d’avoir en J3 une info type « Numéro de palette / Nombre total de palettes » dans notre exemple ça donnerait
BL1 en J3 > « 1/3 »
BL2 en J3 > « 2/3 »
BL3 en J3 > « 3/3 »
IMPRIMER BL
RAS, c’est top, chaque BL est imprimé en 4 exemplaires.
SAUVE PDF
Je n’ai pas pu tester cette macro car il y a un problème apparemment (voir images)
Si je veux modifier le chemin pour l’enregistrement, est-ce que ma modification est bonne, ponctuation incluse
Remplacement deChemin = ThisWorkbook.Path & "\"Par
Chemin = "C:\Users\monnom\mondossier\"
Merci encore
Bonjour
1. BON LIVRAISON
.. je souhaiterais apporter, je modifie simplement le modèle, c’est bien ça ?
Oui c'est exact
1. Serait-il possible que la macro ne s’execute à chaque fois que pour les nouvelles lignes, car je serai amené à alimenter le tableau et si à chaque lancement de la macro, toutes les lignes sont prises en compte ce sera pas très lisible et je vais plus me retrouver
Cela peut se faire mais il faut un repère. Par exemple on peut ajouter un X dans la feuille Stock_In en colonne F, si le bon a été généré. Votre avis ?
2. Serait-il possible d’avoir en J3 une info type « Numéro de palette / Nombre total de palettes » dans notre exemple ça donnerait
Oui. Pour que ce soit facile on pourrait trier afin que les BL soient classés par ordre croissant. Cela se ferait par code bien entendu. Ok pour vous ?
2. SAUVE PDF
Si je veux modifier le chemin pour l’enregistrement, est-ce que ma modification est bonne, ponctuation incluse
Oui c'est tout à fait juste.
Par contre pour l'erreur, j'ai testé avant et cela fonctionne. Vérifiez que le format votre date est en J1 inclut bien les tirets entre le jour, mois et année. et pas de slash --> "/"
Re,
Cela peut se faire mais il faut un repère. Par exemple on peut ajouter un X dans la feuille Stock_In en colonne F, si le bon a été généré. Votre avis ?
Oui, c'est parfait.
Oui. Pour que ce soit facile on pourrait trier afin que les BL soient classés par ordre croissant. Cela se ferait par code bien entendu. Ok pour vous ?
Je n'ai pas très bien compris...En fait, ce qui est important pour moi c'est de savoir a une date donnée combien de palettes ont été envoyées. Dans notre cas, le 26/11 trois palettes ont été envoyées, si ce que tu préconises va dans le même sens alors c'est parfait. En d'autres termes, la date est importante après l'ordre l'est moins, tant que je sais combien de palettes ont été envoyées et qu'elles sont numérotées
Par contre pour l'erreur, j'ai testé avant et cela fonctionne. Vérifiez que le format votre date est en J1 inclut bien les tirets entre le jour, mois et année. et pas de slash --> "/"
J'ai modifié le format de cellule, j'ai mis "dd-mm-yyyy" et le même message d'erreur apparait
Je n'ai pas très bien compris...En fait, ce qui est important pour moi c'est de savoir a une date donnée combien de palettes ont été envoyées. Dans notre cas, le 26/11 trois palettes ont été envoyées, si ce que tu préconises va dans le même sens alors c'est parfait. En d'autres termes, la date est importante après l'ordre l'est moins, tant que je sais combien de palettes ont été envoyées et qu'elles sont numérotées
Au vu de ton message, mettons que j'ai 4 lignes complétée au 26/11, 3 lignes avec le BL# comme dans le fichier mais aussi 1 ligne de plus avec un numéro de BL différent. Là J3 doit mentionner quoi ? pour 3 lignes --> 1/3, 2/3 et 3/3 et pour 1 ligne 1/1 ?
Pour le PDF, cela fonctionne chez moi. Fais ce test en remplaçant la ligne complète par --> MsgBox Chemin & Sheets(i).Name & "_" & Sheets(i).Range("J1") & ".pdf"
Dis moi ce que cela te renvoie comme info
Hello Dan,
Au vu de ton message, mettons que j'ai 4 lignes complétée au 26/11, 3 lignes avec le BL# comme dans le fichier mais aussi 1 ligne de plus avec un numéro de BL différent. Là J3 doit mentionner quoi ? pour 3 lignes --> 1/3, 2/3 et 3/3 et pour 1 ligne 1/1 ?
Bien vu !
Pour le PDF, cela fonctionne chez moi. Fais ce test en remplaçant la ligne complète par --> MsgBox Chemin & Sheets(i).Name & "_" & Sheets(i).Range("J1") & ".pdf"
Dis moi ce que cela te renvoie comme info
Ca m'affiche une MsgBox en me disant que C:\Users\monnom\Telechargement\BL1_26/11/2020.pdf etc... je pense que tu avais bien vu dès le départ avec ces "/" mais j'ai bien modifié le format de date dans ma feuille BL (dd.mm.yyyy) et quand je génère les BL avec le bouton BON LIVRAISON, je vois bien que tous mes BL sont au format 26.11.2020...étrange ! Je viens de voir (juste avant d'envoyer le message sur le forum) que dans les BL génèrés en J1 j'ai bien 26.11.2020 mais dans la barre de formule j'ai 26/11/2020
Aussi, si ce n'est pas trop, pourrait-on regrouper les BL en une seul fichier pdf avec comme nom "BL - Numéro du BL" dans notre exemple BL - AB20-01 qui contiendrait les 3 feuilles 2 pour ABCD025 et 1 pour ABCD020.
J'ai rajouté une colonne F pour savoir si le bon a été émis, du coup peut-on s'affranchir et supprimer la colonne E car ca sera toujours 1 finalement
Merci
Bonjour
En théorie, je ne fais qu'un envoi par journée, mais il se pourrait qu'un deuxième envoi soit envisage.
On pourrait alors sauver le fichier sous un nom comme ceci --> BL_AB020_Date_heure. Exemple --> BL_20201205_092010 (20201205 = 05/12/2020 et 092010 = 09h 20min 10sec). Pour le numéro du bon AB020 ou autre, cela suppose qu'il n'y a toujours que 5 caractères (on fait abstraction de l'indice 01, 02 après ce numéro)
Aussi, si ce n'est pas trop, pourrait-on regrouper les BL en une seul fichier pdf avec comme nom "BL - Numéro du BL" dans notre exemple BL - AB20-01 qui contiendrait les 3 feuilles 2 pour ABCD025 et 1 pour ABCD020
Oui c'est faisable mais en évitant l'indice 01, et en le remplaçant par la proposition ci-dessus (avec heure, minute, seconde). Cela évite d'avoir un bug si vous sauvegardez deux fois la même chose ou le même jour car mettre un indice derrière BL-AB020 est plus compliqué. Il faudrait aller vérifier que le fichier n'existe pas déjà dans le répertoire de sauvegarde.
Hello Dan,
On pourrait alors sauver le fichier sous un nom comme ceci --> BL_AB020_Date_heure. Exemple --> BL_20201205_092010 (20201205 = 05/12/2020 et 092010 = 09h 20min 10sec). Pour le numéro du bon AB020 ou autre, cela suppose qu'il n'y a toujours que 5 caractères (on fait abstraction de l'indice 01, 02 après ce numéro)
En fait, ma numération de BL est la suivante AB20-01
AB > nom de la compagnie
20 > l'année 2020
-01 > numéro de bon en 2020
Donc mon 5e bon en Janvier 2021 sera AB21-05 etc...
Si tu as une autre suggestion pour les numéroter je suis preneur, je viens de commencer
Sans vouloir t'embêter (mais on est là aussi pour apprendre
Si c'est plus simple à réaliser ce que tu préconises, vas-y
Merci Dan
Non le souci c'est que l'on peut sauver dans un seul pdf, des bons avec la référence AB20-01 et AB20-02 (exemple dans le fichier) et que là je ne comprends pas pourquoi sauvez sous le nom BL_AB20-01 sachant que dans le pdf il y aura les bom AB20-01 et AB20-02.
Exemple : Si j'ai deux bons AB20 que je sauve dans la journée. Le premier va s'appeler BL_AB20-01. je ferme le fichier puis je décide de sauver une deuxième bon AB20, Je fais comment pour savoir qu'il doit avoir l'extension AB20-02 ?
D'où l'idée d'utiliser la date et l'heure.
Faut garder en tête qu'une fois imprimé, on ne sait pas si le PDF a été généré. On peut le différer... ou alors le fait d'imprimer inclut automatiquement la génération du pdf mais ce n'était pas l'idée puisque l'on a un 3ieme bouton
D'accord Dan, allons-y pour la date et l'heure :)
Le fichier en retour pour test
Il faudra déterminer le répertoire de sauvegarde dans la variable Chemin de la macro qui génère le Pdf
Le nom du fichier sauvegardé sera --> BL_ + les 4 premiers caractères du bon (nom de compagnie et année) + date inversée + heure
Super Dan !
On se rapproche de la fin, presque tout est bon.
- Cela ne génère que quand il n'y a pas de X dans la colonne F, le fichier est bien sauvegardé comme il faut
Mes deux retours :
Finalement, est-il possible de supprimer la colonne E (je voudrais pas casser les macros) ?
Par rapport, à l'histoire de " Numéro de Palette / Nombre Total de Palette " en cellule J3
que tu avais si bien résumé
Au vu de ton message, mettons que j'ai 4 lignes complétée au 26/11, 3 lignes avec le BL# comme dans le fichier mais aussi 1 ligne de plus avec un numéro de BL différent. Là J3 doit mentionner quoi ? pour 3 lignes --> 1/3, 2/3 et 3/3 et pour 1 ligne 1/1 ?
C'est exact
Merci Dan
Finalement, est-il possible de supprimer la colonne E (je voudrais pas casser les macros) ?
On peut supprimer la colonne E mais la cellule J3 va contenir quoi dès lors ?
Edit : si on supprime la colonne E, il faut adapter trois lignes dans le code Bon_livraison :
1. A cette ligne If UCase(cel.Offset(0, 4)) <> "X" Then il faut remplacer le 4 par 3
2. Sur la ligne .Range("J3") = cel.Offset(0, 3) 'Quantité soit Inhiber en mettant une apostrophe devant le point juste avant Rangeou si on veut avoir toujours 1 par défaut, on remplace cette ligne par ceci --> .Range("J3") = 1
3. A ligne bon emis remplacer le 4 par 3