Mise en place d'un gestionnaire de Bon de Livraison et Bon de Commande

capture d ecran 2017 08 04 a 12 51 30 capture d ecran 2017 08 04 a 12 51 30

Bonjour,

Je traite des BC & BL via Excel :

Ma mise en page et la présentation des Bon de Commande est faite.

Au milieu se trouve un tableau dans lequel je dois faire apparaitre par ligne :

La référence du produit commandé, sa quantité, son prix, etc.

Une référence = une ligne.

Problème : quand j'arrive en bout de tableau. Je dois générer un nouveau BL ou BC...

Je cherche donc l'astuce pour que, une fois le nombre de lignes dépassées (32 pour mon exemple), Excel génère une nouvelle feuille/page à la présentation identique et insère le reste des lignes à l'endroit voulu... Avec une numérotation de page active serait génial !

Pouvez vous me rediriger ou prendre le temps de m'expliquer pour une solution possible.

En vous remerciant par avance.

Bonjour

Problème : quand j'arrive en bout de tableau. Je dois générer un nouveau BL ou BC...

Sur la même feuille ?

Cordialement

Bonjour Dan,

Merci de prendre le temps.

Sur la même feuille ? oui - ou si il existe une autre méthode je suis preneur.

Admettons que j'ai une commande avec 34 réf.(le tableau ne présente que 32 lignes)

Soit j'étire mon tableau mais dans ce cas cela imprimera la page (ou enregistrera le pdf) sur deux pages avec l'entête sur la première et le pied sur la deuxième. Pas cool. il existe bien la réduction d'échelle mais il me faut des formats BC et BL standards.

Soit je clic sur nouvelle saisie, ce qui efface les saisies du tableau, puis je génère un nouveau BC. Ce n'est pas optimisé comme solution.

Comme demandé je te joins le fichier.

Crdt,

32bc-bl-v2-0.xlsm (264.75 Ko)

Re

Vous voulez faire cela de manière automatique ou via un bouton placé sur la feuille ? La deuxième solution serait la plus efficace et la plus simple mais cela oblige à cliquer sur le bouton pour générer la nouvelle page une fois arrivé à la ligne 32

Cordialement

Bonjour Dan,

Peu importe la solution, passer par un bouton ne dérange en aucun cas. Ce n'est pas dérangeant car la feuille est un formulaire de saisie ligne par ligne... Je mets le bouton à la fin.

C'est du VBA ?

Je n'ai toujours pas trouver comment faire !

Merci pour votre retour Dan.

Alex.

Re

Essayez ce code que vous associez à un bouton sur votre feuille

Sub nouvellepage()
Dim lig As Integer
lig = Cells.Find("*", LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row + 2
Range("A1:L" & lig - 1).Copy Range("A" & lig)
lig = lig + 18
Range("B" & lig & ":D" & lig + 31).ClearContents
Range("E" & lig & ":I" & lig + 31).ClearContents
Range("J" & lig & ":K" & lig + 31).ClearContents
ActiveSheet.PageSetup.PrintArea = "$A$1:$L$" & lig + 40
End Sub

Juste une chose, certaines colonnes sont fusionnées et cela ne me semble pas utile. (colonne C, D et H). évitez les fusions au max si vous devez utiliser VBA. Cela finit toujours par provoquer des soucis dans les codes

Cordialement

Super Dan,

Je note pour le conseil des cellules fusionnées !

Encore merci, j'ai bien essayé votre code et il fonctionne très bien : il copie entièrement la page et la recopie aux dimensions exacts pour les colonnes !!!

En revanche, serait-il possible de faire de même pour les lignes. Le code reproduit le même nombre de ligne mais avec la même hauteur pour toutes : Hauteur = 15.

Enfin, la colonne "Désignation" est une rechercheV de la page PAR. Je vous laisse le dossier plus complet pour voir.

Est-il possible lors de la recopie qu'il copie aussi les fonction dans les cellules, et les formats des cellules ?

(ex : tapez de "1" à "230" dans une case référence, le format mettra automatiquement le format code produit "PAR000")

Encore super pour votre retour et votre patience.

Alex.

Re

Remplacez le code par celui-ci

Sub nouvellepage()
Dim lig As Integer
lig = Cells.Find("*", LookIn:=xlValues, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row + 2
Rows("1:" & lig - 1).Copy Range("A" & lig)
lig = lig + 18
Range("B" & lig & ":D" & lig + 31).ClearContents
Range("J" & lig & ":K" & lig + 31).ClearContents
ActiveSheet.PageSetup.PrintArea = "$A$1:$L$" & lig + 40
End Sub

Encore une chose à penser c'est au niveau des boutons, à chaque copie les boutons seront aussi copiés. Pourquoi ne pas les placer ailleurs éventuellement. En dehors de la feuille à imprimer par exemple.

Un détail, vous êtes sous excel MAC ?

Cordialement

Hello Dan,

Génial, ton code fonctionne à la perfection... Je vais clore le sujet :

Il me reste juste un petit souci et si tu peux prendre le temps ce serai génial :

J'ai ajouté un code de suppression des ligne ajoutées lors d'une nouvelle saisie.

Cf. VBA "suppression" associé au bouton "Nouvelle saisie".

Je te joins le nouveau fichier à jours, tu n'as plus qu'à activer le bouton "nouvelle saisie" pour avoir un aperçu...

Le logo "image" de la société ne se supprime pas avec les lignes.

Comment faire ? aurais tu une solution ?

Merci encore !!

PS: je prends à nouveau note des conseils pour le positionnement des boutons.

Alex.


Re...

Oui je suis sous Excel 2011 ( MAC).

Cdt,

Alex

Re

Pour le code de suppression associé à Nouvelle Saisie, voici un petit correctif :

Sub Suppression()
' Suppression Macro
With ActiveSheet
    .Rows("60:800").Delete Shift:=xlUp
    .Range("F13,F15,J15,J19:J50,C19:D50,C54:F56").ClearContents
    .Range("J4") = .Range("J4") + 1
End With
End Sub

Je vais regarder pour les images.

En relisant les codes, mon petit conseil (si tu me permets...), évite de mettre des accents dans le nom de tes feuilles et dans les commentaires de codes. Excel MAC te renvoie toujours des lettres erronées (ex : é = Ž) ou des espaces vides qui rendent parfois la lecture difficile et parfois peuvent te poser des problèmes dans l'exécution du code voire si tu devais porter cette appli sous excel Windows.

Amicalement

En relisant les codes, mon petit conseil (si tu me permets...), évite de mettre des accents dans le nom de tes feuilles et dans les commentaires de codes. Excel MAC te renvoie toujours des lettres erronées (ex : é = Ž) ou des espaces vides qui rendent parfois la lecture difficile et parfois peuvent te poser des problèmes dans l'exécution du code voire si tu devais porter cette appli sous excel Windows.

Effectivement, quand j'ai transférer le fichier pour exploitation sous windows, il à fallu que je modifie mes codes sur certains points, notamment comme tu dis les accent et le "°" de N° qui ne passe pas...

De même il faut aussi que j'interviennes sur les formats des cellules ou la taille de la fenêtre : sur mon écran je vois les 3/4 de la feuille quand je suis à 100% alors que sous Windows, je vois à peine la moitié...

Dans tous les cas, encore merci pour votre mis à profit de vos compétences !

J'attends votre retour pour l'image.

Amicalement,

Alex.

Re

De même il faut aussi que j'interviennes sur les formats des cellules ou la taille de la fenêtre : sur mon écran je vois les 3/4 de la feuille quand je suis à 100% alors que sous Windows, je vois à peine la moitié...

Oui c'est normal. C'est du à l'OS MAC qui a été crée sous UNIX. Si tu prends un programme quelconque fait sous cette plateform, ce sera la même chose. Mais tu peux régler le souci de manière automatique à l'ouverture du fichier en détectant si tu es sous MAC ou sous Windows.

Pour le code de suppression des images :

1. Dans le code "Suppression" : rajouter cette ligne juste avant le END SUB -->

Call effaceimage

2. Rajouter le code ci-dessous en dessous du code Suppression

Sub effaceimage()
Dim img As Byte
On Error Resume Next
For img = 5 To ActiveSheet.Shapes.Count
    ActiveSheet.Shapes(img).Delete
Next img
End Sub

Le chiffre 5 considère qu'il y a 5 images dans le tableau de base.

Cordialement

TOP TOP TOP... Tout fonctionne à la perfection ! Good job Dan.

"Mais tu peux régler le souci de manière automatique à l'ouverture du fichier en détectant si tu es sous MAC ou sous Windows."

Comment fais-tu ???

Encore merci pour le travail fourni.

Je cloture le topic.

Au plaisir pour d'autres astuces Excel ^^

Alex.

Petit pb du moment :

Une fois la feuille verrouillée et seulement quand la feuille est verrouillée , quand je veux faire "Nouvelle Page" cela me dit :

"microsoft visual basic 400".

Aurais-tu une astuce pour parler cela ?

Merci.

Amicalement,

Alex.

Re

Une fois la feuille verrouillée et seulement quand la feuille est verrouillée , quand je veux faire "Nouvelle Page" cela me dit :

"microsoft visual basic 400".

Dans le code "Nouvelle page", ajoute ceci au début -->

Activesheet.unprotect

En fin de code juste avant le End Sub, ajoute -->

Activesheet.protect

Faudra faire de même dans le code de suppression de ligne.

Cordialement

Re

"Mais tu peux régler le souci de manière automatique à l'ouverture du fichier en détectant si tu es sous MAC ou sous Windows." Comment fais-tu ???

Dans Thisworkbook, essaie en remplaçant le code Private Sub WorkBook_Open() par celui ci-après :

Private Sub WorkBook_Open()
Dim sh As Worksheet, setZoom As Long
Application.ScreenUpdating = False
    For Each sh In ThisWorkbook.Worksheets
        If Application.OperatingSystem Like "*Win*" Then
            setZoom = 100
        Else: setZoom = 125
        End If
        sh.Activate
        ActiveWindow.Zoom = setZoom
    Next sh
Application.ScreenUpdating = True
Sheets(1).Select
Sheets("Bon de Commande").Activate
Range("F13").Select
End Sub

Coridalement

Hello Dan,

Merci pour tes réponses précédentes... ça fonctionne parfaitement.

Je vais faire des modifications de présentations (dé-fusionner les cellules qui ne servent à rien, mettre à part les boutons, enlever les caractères spéciaux dans les "msgbox", etc.), ajouter deux fois colonnes, adapter les codes, les doubler pour créer les BL en fonctions des BC...

Ca va me prendre un peu de temps puis je reviendrais surement vers toi pour deux trois petites choses que j'ai déjà en tête (Si tu le veux bien).

Ex : lors de la création d'une nouvelle page, j'ai une somme respective à chaque feuille("TOTAL UNITÉS").

Hors il me faudrait, pour bien faire, une somme totale de toutes les pages en bas de chaque page. Mais comment créer une somme de cellules potentiellement existante ou non ?

Aller hop, je me mets au travail et je reviens vers toi.

Encore merci pour ta disponibilité Dan.

Bonne journée.

Alex.

Re

Pas besoin de doubler les codes, il suffit de dire sur quelle feuille on se trouve lorsque l'on génère une nouvelle page

Pour la somme des totaux, il suffit de créer une variable qui reprend le total.

Fais d'abord le fichier, on adaptera le(s) code(s) en fonction

Cordialement

HELLO Dan,

I'm Back... en forme et avec du travail

Alors voila, j'ai repris le dossier, ajouté ce dont j'avais besoin en supplément puis apporté toutes les modifications qui découlaient du "changement / déplacement" de cellules dans les codes, plus deux que tu m'avais conseillé. (éviter les cellules fusionnées inutiles, etc.) Mis à part le fais de mettre les boutons en dehors de la page car peut importe où je les place, ils se dupliquent quand même (Pb mineur qui ne m'empêche pas de travailler).

Rentrons dans le vif du sujet. J'ai rédigé ça par étapes que voici :

Code pour bouton "Nouvelle Page" :

Fonctionne pour une deuxième page. Au delà, si je clique pour une troisième, il va doubler l’existant : soit 4 pages au final. Puis 8, puis 16, etc.

Code pour "Efface image" :

Suite à ça, quand je fais « nouvelle saisie », il y a beaucoup trop d’images (1 logo Entreprise généré par page), la suppression ne les efface pas toutes.

Code pour bouton "Nouvelle page" :

Le code fonctionne pour l’onglet Bon de Commande, comment faire pour que l’onglet Bon de Livraison suive la même démarche car ces deux documents, à la présentation un peu différente, doivent présenter les mêmes informations.

Code VBA ou Formule ? Total et sous-total :

Pour le sous total : pas de souci. C’est une somme, des quantités et des tarifs, fonction de la page.

Par contre le TOTAL doit être une somme de l’ensemble du document, et ça sur la première page ainsi que les futurs pages pour le moment inexistantes !!

RECHERCHEV dans une Feuil :

Pour des raisons pratiques, j’ai classé un fournisseur par Feuil.

Pour le moment, ma RECHERCEV va dans la Feuil demandé dans la formule.

SIERREUR(RECHERCHEV(C23;PAR!$A$2:$O$300;4;FAUX);" ")

Soit je duplique les Feuilles de travail par fournisseur et c’est supra lourd, soit je passe par une astuce que je ne connais pas aujourd’hui.

Voila,J'éspère que je ne t'en demande pas trop. Je te remercie par avance pour tout le travail fourni !!!!

Au plaisir de te lire

Ps : je te joins le fichier (vierge de ses données) pour avoir un aperçu.

Amicalement

Alex.

25fichier-pour-dan.xlsm (305.87 Ko)

Re,

Code pour bouton "Nouvelle Page" :

Dans le code, remplace cette ligne -->Rows("1:" & lig - 1).Copy Range("A" & lig) par

Rows("1:61").Copy Range("A" & lig)

Code pour bouton "Nouvelle page" :

Le code fonctionne pour l’onglet Bon de Commande, comment faire pour que l’onglet Bon de Livraison

Ta macro Nouvellepage se trouve mal placée. Déplace là de la feuille Bon de Commande dans le Module1. Ensuite réassocie tes boutons Nouvelle à cette macro.

Par contre je ne vois pas de bouton sur la feuille Bon de lIvraison et suppose qu'il doit être ajouté.

Je reviens pour le reste si ok pour les deux points ci-dessus

Cordialement

Rechercher des sujets similaires à "mise place gestionnaire bon livraison commande"