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.

capture 1
12bdd.xlsm (27.01 Ko)

Up

Up

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

excelpratique

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

capture

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

capture

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

Rechercher des sujets similaires à "impression onglet vba"