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...
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 Selectle "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 SubBonjour
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")).Valueproblè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")).Valueil faut donc changer
If fin_ligne = 2 Then fin_ligne = 3par .... (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 = 6Fred
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