Impression onglet avec VBA
Bonjour à tous,
Je crée ce post aujourd'hui car j'ai besoin d'aide sur un fichier que l'on m'a confié au travail.
Je suis à l'aise avec les fonctions très basiques en VBA mais la il s'agit d'un fichier qui dépasse de loin mes compétences.
Car en effet, ce n'est pas moi qui a crée ce dernier (la personne n'est plus au sein de l'entreprise) mais je dois aujourd'hui en assuré la maintenance et le suivi.
Ce fichier est utilisé par le service logistique de mon entreprise pour éditer automatiquement des bons de livraison et des fiches palettes afin de fluidifier ce travail pénible.
Il fonctionne à l'aide de import d'une BDD renseigné à part (2ieme fichier joint), une fois importé le reste se fait uniquement en utilisant des macros dans le fichier principal (1er fichier joint).
Voici les problèmes que je rencontre :
- Dans l'onglet "BL", lors de l'impression de ces derniers (effectué avec le bouton présent dans l'onglet "contrôle"), j'aimerai qu'à chaque BL s'affiche en haut à gauche le dépôt et le dépositaire correspondant (actuellement rien ne s'affiche, c'est un rajout manuel sur l'exemple envoyé).
- Toujours dans l'onglet "BL", est-il possible de rajouter un total de la colonne total qui ne gène pas l'impression en case AQ 155 par exemple ? (Voir 3ieme pièce jointe)
- Et le dernier point, lors de l'importation un message d'incompatibilité s'affiche et je ne sais pas pourquoi.
J'espère avoir été assez précis dans ma demande. Un grand merci d'avance pour votre aide.
Bonne fin de journée à vous et prenez soin de vous.
Bonjour
Alors pour ceci
- Dans l'onglet "BL", lors de l'impression de ces derniers (effectué avec le bouton présent dans l'onglet "contrôle"), j'aimerai qu'à chaque BL s'affiche en haut à gauche le dépôt et le dépositaire correspondant (actuellement rien ne s'affiche, c'est un rajout manuel sur l'exemple envoyé).
J'ai pas compris, tu veux des noms ? qui proviennent d'où ??
pour ceci
Toujours dans l'onglet "BL", est-il possible de rajouter un total de la colonne total qui ne gène pas l'impression en case AQ 155 par exemple ? (Voir 3ieme pièce jointe)
pourquoi tu ne le fait pas toi même ? a priori rien de l’empêche ...
pour ceci
- Et le dernier point, lors de l'importation un message d'incompatibilité s'affiche et je ne sais pas pourquoi.
l'erreur se situe sur cette ligne de code
fCtrl.Range("I" & CStr(6 + ((nombreEditions - 1) * 3))).Value = fCtrl.Range("I" & CStr(6 + ((nombreEditions - 1) * 3))).Value + ((fCde.Cells(ligne, 16).Value * fCde.Cells(ligne, 17).Value) + fCde.Cells(ligne, 19).Value)
c'est a ce moment là que le code essai de remplir ce tableau
quand il fait la 3e ligne code edition 0 quand il détermine le nombre de paquets nécessaire.. sachant que palette = 0 et que nb ex = "" difficile de faire un calcul...
maintenant pourquoi il y a ces valeurs.... je ne suis pas rentré dans le code complet... mais tu sais peut-être... d'ailleurs pourquoi il y a code edition 0 ???
Fred
Re bonjour
Pour la dernière erreur donc.... voici la solution
remplacer le code du module3 par celui ci :
' Tri des éditions.
Public Sub TriEditions()
Dim refresh As Boolean
Dim curseur As XlMousePointer
Dim siErreur As Boolean
refresh = Application.ScreenUpdating
Application.ScreenUpdating = False
curseur = Application.Cursor
Application.Cursor = xlWait
Dim premiereEdition As Integer
Dim numeroEdition As Integer
Dim nombreEditions As Integer
Dim numeroLigne As Integer
Dim nomFeuilleEdition As String
Dim fCtrl As Worksheet
Dim fCde As Worksheet
Dim fModele As Worksheet
siErreur = True
On Error GoTo erreur
Set fCtrl = Module1.FeuilleControle()
Set fCde = Module1.FeuilleCommande()
Set fModele = Module1.FeuilleModeleEdition()
nombreEditions = 0
' Recherche du numéro d'édition le plus faible.
With fCde
premiereEdition = .Cells(2, 12).Value
For ligne = 2 To .Range("A" & Rows.Count).End(xlUp).Row
numeroEdition = .Cells(ligne, 12).Value
If numeroEdition < premiereEdition Then
premiereEdition = numeroEdition
End If
Next
End With
' Tri
fCde.Sort.SortFields.Clear
fCde.Sort.SortFields.Add Key:=Range("L2"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortTextAsNumbers
With fCde.Sort
.SetRange fCde.UsedRange
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
fCtrl.Range("A6").Value = premiereEdition
' Création des feuilles des éditions.
For ligne = 2 To fCde.Range("A" & Rows.Count).End(xlUp).Row
numeroEdition = fCde.Cells(ligne, 12).Value
nomFeuilleEdition = "@_Ed_" + Trim(CStr(numeroEdition)) & Replace(Trim(fCde.Cells(ligne, 13).Value), "/", "_")
If Len(nomFeuilleEdition) > 30 Then nomFeuilleEdition = Left(nomFeuilleEdition, 30)
If Not Module1.FeuilleExiste(nomFeuilleEdition) Then
fModele.Copy After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = nomFeuilleEdition
nombreEditions = nombreEditions + 1
fCtrl.Range("A" & CStr(6 + ((nombreEditions - 1) * 3))).Value = numeroEdition
fCtrl.Range("B" & CStr(6 + ((nombreEditions - 1) * 3))).Value = fCde.Cells(ligne, 13).Value
fCtrl.Range("C" & CStr(6 + ((nombreEditions - 1) * 3))).Value = "n°" & CStr(numeroEdition) & " " & fCde.Cells(ligne, 13).Value
fCtrl.Range("G" & CStr(6 + ((nombreEditions - 1) * 3))).Value = fCde.Cells(ligne, 16).Value / fCtrl.Cells(2, 5).Value
Sheets(nomFeuilleEdition).Cells(13, 19).Value = fCtrl.Range("C" & CStr(6 + ((nombreEditions - 1) * 3))).Value
Sheets(nomFeuilleEdition).Cells(2, 5).Value = fCde.Cells(ligne, 13).Value
Sheets(nomFeuilleEdition).Cells(2, 7).Value = fCde.Cells(ligne, 12).Value
fCtrl.Range("H" & CStr(6 + ((nombreEditions - 1) * 3))).Value = 0
fCtrl.Range("I" & CStr(6 + ((nombreEditions - 1) * 3))).Value = 0
End If
' On se positionne dans la feuille de l'édition sur la première ligne vide.
numeroLigne = 5
Do While CStr(Sheets(nomFeuilleEdition).Cells(numeroLigne, 1).Value) <> ""
numeroLigne = numeroLigne + 1
Loop
Sheets(nomFeuilleEdition).Cells(numeroLigne, 1).Value = fCde.Cells(ligne, 8).Value
Sheets(nomFeuilleEdition).Cells(numeroLigne, 3).Value = fCde.Cells(ligne, 6).Value
Sheets(nomFeuilleEdition).Cells(numeroLigne, 4).Value = fCde.Cells(ligne, 5).Value
Sheets(nomFeuilleEdition).Cells(numeroLigne, 2).Value = fCde.Cells(ligne, 3).Value
Sheets(nomFeuilleEdition).Cells(numeroLigne, 5).Value = fCde.Cells(ligne, 9).Value
Sheets(nomFeuilleEdition).Cells(numeroLigne, 6).Value = fCde.Cells(ligne, 15).Value
Sheets(nomFeuilleEdition).Cells(numeroLigne, 9).Value = fCde.Cells(ligne, 14).Value
Sheets(nomFeuilleEdition).Cells(numeroLigne, 10).Value = fCde.Cells(ligne, 16).Value
Sheets(nomFeuilleEdition).Cells(numeroLigne, 11).Value = fCde.Cells(ligne, 17).Value
Sheets(nomFeuilleEdition).Cells(numeroLigne, 12).Value = fCde.Cells(ligne, 18).Value
Sheets(nomFeuilleEdition).Cells(numeroLigne, 13).Value = fCde.Cells(ligne, 19).Value
Sheets(nomFeuilleEdition).Cells(numeroLigne, 24).Value = fCde.Cells(ligne, 7).Value
fCtrl.Range("H" & CStr(6 + ((nombreEditions - 1) * 3))).Value = Sheets(nomFeuilleEdition).Cells(numeroLigne, 9).Value + fCtrl.Range("H" & CStr(6 + ((nombreEditions - 1) * 3))).Value
fCtrl.Range("I" & CStr(6 + ((nombreEditions - 1) * 3))).Value = fCtrl.Range("I" & CStr(6 + ((nombreEditions - 1) * 3))).Value + _
((fCde.Cells(ligne, 16).Value * fCde.Cells(ligne, 17).Value) + fCde.Cells(ligne, 19).Value)
Module1.AjusterHauteurLignes Sheets(nomFeuilleEdition)
Module1.AjusterLargeurColonnes Sheets(nomFeuilleEdition)
Next
siErreur = False
erreur:
' Tri
fCde.Sort.SortFields.Clear
fCde.Sort.SortFields.Add Key:=Range("C2"), _
SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortTextAsNumbers
With fCde.Sort
.SetRange fCde.UsedRange
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
If siErreur Then
Application.Cursor = xlDefault
MsgBox "Une erreur s'est produite pendant le tri des éditions:" & vbNewLine & vbNewLine & Err.Description, vbOKOnly + vbExclamation, "Erreur"
End If
Application.ScreenUpdating = refresh
Application.Cursor = curseur
Set fCtrl = Nothing
Set fCde = Nothing
Set fModele = Nothing
End Sub
Fred
Bonjour à vous !
Tout d'abord merci car vous m'avez permis de régler 2 problèmes sur 3.
Pour le dernier je vais essayer de m'expliquer plus précisément.
Lorsque l'opérateur va appuyer sur le bouton "imprimer les BL" dans l'onglet "contrôle" cela va sortir autant de BL qu'il y a de ligne dans l'onglet "BL" à partir de la ligne A59. Sur chaque ligne est associé un dépôt et un dépositaire (lieu de livraison). (voir pièce jointe)
Il faudrait donc qu'à chaque impression de BL (dans le cas de la photo il y a donc seulement 3), le dépôt et le dépositaire associé apparaissent en haut à gauche à la place de ce qu'il y a actuellement (à savoir "dépôt" et "dépositaire" écrit à la main comme un débutant que je suis ...)
J’espère avoir été plus précis dans mes explications.
Cordialement
Alexis
Bonsoir
je viens de regarder un petit peu ton fichier... et je suis assez embêter.... car j'ai fais l'essai de l'appuie sur imprimer BL de la feuille contrôle... tel que le code est actuellement il fait l'impression de la feuille telle qu'elle est visible (onglet BL) en trois exemplaires... (et quelque soit le nombre de lignes...)
fBL.PrintOut 1, 1, 1
fBL.PrintOut 1, 1, 1
fBL.PrintOut 1, 1, 1
donc il n'y a pas d'impression différentiée pour calais et Lille...ou par numéro d’édition... donc dans ces conditions difficile de mettre tantôt le dépôt de calais puis celui de Lille...
donc encore une fois je ne comprends pas... sachant qu'une seule feuille est imprimée....
Fred
Bonjour,
Effectivement la base de donnée présente dans le fichier n’était pas du tout adaptée pour l'explication et j'en suis désolé.
J'ai crée une nouvelle BDD de test dans le fichier que j'ai joint.
Si vous regardez dans l'onglet "commande" vous vous apercevrez que 1 seul et unique dépôt et dépositaire peut être présent pour chaque numéro de semi (colonne C). (voir capture d'écran)
En appuyant sur le bouton d'impression des BL, la macro va alors imprimer 3 versions (Je ne le savais pas jusqu’à maintenant mais c'est parfaitement normal) pour chaque numéro de semi différent. Donc dans le cas de la nouvelle BDD, il y a 7 numéros de semi différents donc 21 BL seront imprimés.
Ma question est donc la suivante : est-il possible de faire apparaître dans le coin en haut a gauche des BL le dépôt et le dépositaire correspondant au bon numéro de semi ?
Dans l'exemple du fichier envoyé : pour le n° de semi 32, le dépôt "AMIENS SUD (2)" et le dépositaire "BB" devrait apparaître lors de l'impression dans le coin supérieur gauche du BL.
Bien à vous !
Alexis
Bonjour
ci joint donc un nouvel essai...
j'ai aussi corrigé le code pour qu'il ne supprime plus le total et la somme mis en ligne 135... et j'en ai rajouter une aussi sur la deuxième feuille... il faut donc recopier le code qui est présent dans le module 8 dans le fichier original... il faudra aussi apporter quelques modifications ajouter une ligne à la zone d'impression, refaire le Total et la somme, et refaire la hauteur des lignes + bordures en bas de la première feuille..
un fichier pdf essai d'impression du résultat..
Fred
Bonjour Fred
Merci beaucoup ! Cela fonctionne parfaitement !
Bonne journée à vous
Cordialement
Alexis