Impression automatique

Merci pour votre retour.

ça fonctionne pour 2 et 3 bordereau à imprimer.

par contre ça ne fonctionne pas pour un seul bordereau à imprimer.

C'est pour avoir un fichier "luxe", c'est assez rare que je n'imprime qu'un seul fichier à la fois, mais c'est pratique de temps en temps

Donc si vous avez une solution, je suis preneur

J'ai remarqué une autre problématique pour une utilisation du fichier par plusieurs personne dans un cas assez particulier.

Le chemin du bureau n'est pas le même pour moi et mon collègue ...

J'ai synchronisé mon bureau sur Onedrive : le chemin est donc USERPROFILE\OneDrive\Bureau\

alors que pour mon collègue, c'est le chemin standard qui fonctionne USERPROFILE\Desktop

j'ai conservé les 2 lignes de codes, mais on est obligé de changer l'apostrophe de ligne dès qu'on change d'utilisateur.

Est-ce que vous auriez une solution pour cette problématique particulière ??

Encore merci pour le fichier déjà transmis

Et merci d'avance si vous avez une solution pour les quelques problématiques restantes

Valentin

bonjour

ce qui est bizarre c'est que dans le fichier fourni il n'y a qu'un seul bordereau... et quand j'exécute le code du fichier V 2-2... cela fonctionne très bien chez moi... donc comprend pas...

image

pour ce qui est du chemin qui change en fonction de l'utilisateur

remplacer la ligne :

chemin = Environ("USERPROFILE") & "\Desktop\" & "Impression Bordereau"

par

Select Case (Replace(Environ("USERPROFILE"), "C:\Users\", ""))
Case "Fred" 'a adapter
chemin = Environ("USERPROFILE") & "\Desktop\" & "Impression Bordereau"
Case "toto" 'a adapter
chemin = Environ("USERPROFILE") & "\OneDrive\Bureau\" & "Impression Bordereau"
End Select

le "Fred" et "Toto" est a adapter en fonction du nom du dossier profil sur la machine.. en théorie "Fred" par celui du collègue et "Toto" par le tiens.. et verifier ensuite si "chemin" pointe vers le bon endroit en fonction du pc

Attention aux majuscules et minuscules dans le nom du dossier profil

Fred

Bonjour,

Merci beaucoup pour l'utilisateur. ça fonctionne de mon coté. je fais le test demain avec mon collègue.

Pour l'impression d'un bordereau, j'ai conservé les 2 lignes de codes ci-dessous de l'ancienne version pour conserver la variable memoire pour avoir le numéro du bordereau dans le nom du document.

La dernière version que vous m'avez envoyé écrase les documents puisque tous les bordereaux portent tous le même noms

même avec la modif, le fichier simplifié fonctionne

Mais dans mon fichier, j'ai toujours l'incompatibilité de type sur la ligne avec LBound et UBound

Ci-dessous le code que j'utilise, il me semble que ça correspond ...

Sub impression()
Dim shs As Worksheet
Dim shData As Worksheet
Dim i As Integer
Dim tb As Variant
Dim fin_ligne As Integer

Set shs = Sheets(2)
Set shData = Sheets(2)
Application.ScreenUpdating = False

fin_ligne = shData.Cells(shData.Rows.Count, "W").End(xlUp).Row
If fin_ligne = 2 Then fin_ligne = 3

tb = shData.Range(shData.Cells(5, "W"), shData.Cells(fin_ligne, "W")).Value
If IsEmpty(tb) Then Exit Sub

chemin = Environ("USERPROFILE") & "\Desktop\" & "Impression bordereau"
If Dir(chemin, vbDirectory) = "" Then MkDir chemin

For i = LBound(tb, 1) To UBound(tb, 1)

    'copie dans la cellule O2 le num bordereau

    If memoire <> tb(i, 1) And tb(i, 1) <> "" Then
        memoire = tb(i, 1)
        shs.[O2] = tb(i, 1)
        shs.Copy
        Set destwb = ActiveWorkbook
        With destwb

        nom = "Bordereau N°" & memoire & " - " & Format(shs.[O5], "DD.MM.YY") & ".pdf"
            .ExportAsFixedFormat Type:=xlTypePDF, Filename:=chemin & "\" & nom, Quality:=xlQualityStandard, _
            IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False        ' sauvegarde du fichier au format pdf
            .Close False
        End With
    End If
Next
End Sub

Bonjour

dans le fichier initial le tableau des bordereaux était dans en J2 et lignes suivantes...

donc pour donner un tableau ( tb )avec minimum 2 lignes (donc début ligne 2 et fin ligne 3) même quand il n'y a qu'une seule référence j'ai modifié le code comme ceci..

If fin_ligne = 2 Then fin_ligne = 3

tb = shData.Range(shData.Cells(2, "J"), shData.Cells(fin_ligne, "J")).Value

problème dans ton nouveau fichier que tu n'as jamais transmis... je vois que le tableau des bordereaux est en cellule W5 et lignes suivantes

tb = shData.Range(shData.Cells(5, "W"), shData.Cells(fin_ligne, "W")).Value

il faut donc changer

If fin_ligne = 2 Then fin_ligne = 3

par .... (début de ligne 5 et fin ligne 6 même quand il n'y a qu'une seule ligne dans le tableau..)

If fin_ligne = 5 Then fin_ligne = 6

Fred

Merci beaucoup. ça fonctionne

J'ai encore du boulot pour apprendre le VBA. Je pensais que fin_ligne était par rapport à la cellule de départ (W5 dans mon cas). je n'avais pas pensé que c'était le numéro de la ligne...

Et effectivement je n'ai pas transmis le fichier de base qui est beaucoup plus complet et qui n'est pas tout à fait sur les mêmes cellules.

Pour une prochaine fois je saurais qu'il faut aussi préciser si on ne pars pas de la même ligne, ou utiliser les mêmes cellules

Et encore merci pour le temps que tu as passé à m'aider.

Je pense que je vais pouvoir clôturer le post

Valentin

Pour une prochaine fois je saurais qu'il faut aussi préciser si on ne pars pas de la même ligne, ou utiliser les mêmes cellules

Il est toujours mieux de fournir un fichier de test ayant la structure la plus proche du fichier original... cela évite des surprises...

A+

Fred

Rechercher des sujets similaires à "impression automatique"