Parcourir Colonne Ouvre PDF-Imprime-et Coche
Bonjour à Tous !
Je souhaite parcourir ligne par ligne tous les noms de mes fichiers pdf qui ce trouve dans ma colonne B pour les imprimer et mettre un "X" en colonne ("BB") par exemple pour confirmer l'impression..
Option Explicit
Public Sub ouvrir_pdf()
Dim ws As Worksheet
Dim Chemin As String
Dim Derlig As Long
Set ws = ActiveSheet
Chemin = ThisWorkbook.Path & Application.PathSeparator
Derlig = ws.Range("B" & Rows.Count).End(xlUp).Row & ".pdf"
ThisWorkbook.FollowHyperlink Chemin & Derlig
Set ws = Nothing
End Sub
J'ai fait ce code mais ça ne fonctionne pas :/
Bonjour,
Une piste mais d'abords lire les commentaires avant de tester et le faire sur une copie du classeur en ayant laissé que deux ou trois lignes avec les noms de fichiers pdf :
Declare Function ShellExecute _
Lib "shell32.dll" _
Alias "ShellExecuteA" ( _
ByVal hwnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long
Sub Imprimer_Tous_Les_PDF_Repertoire()
Dim Chemin As String
Dim Fichier As String
Dim I As Long
'Choix de ton imprimante...pour tous tes fichiers .pdf
Application.Dialogs(xlDialogPrinterSetup).Show
'les pdf sont dans le même dossier que celui du classeur
Chemin = ThisWorkbook.Path & Application.PathSeparator
'boucle à partir de B2 jusqu'à la dernière ligne non vide, adapter si la première ligne est plus basse ou si elle commence à 1
For I = 2 To Range("B" & Rows.Count).End(xlUp).Row
'attention, l'extension ".pdf" doit être présente sinon, la rajouter ici !
Fichier = Range("B" & I).Value '& ".pdf"
'contrôle que le fichier existe bien sur le disque
If Dir(Chemin & Fichier) <> "" Then
'inscrit le X en colonne BB en regard du fichier imprimé
Range("BB" & I).Value = "X"
'imprime
ShellExecute 0, "print", Chemin & Fichier, vbNullString, Chemin, 0&
End If
Next I
End Sub
Bonjour Theze,
J'ai enfin eu le temps de m'y pencher aujourd'hui.
Cette partie me pose problème :
Declare Function ShellExecute _
Lib "shell32.dll" _
Alias "ShellExecuteA" ( _
ByVal hwnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long
C'est tout en rouge et ça me met une fenêtre:
" Erreur de compilation: Le code contenu dans ce projet doit être mis à jour pour pouvoir être utilisé sur les système 64 bits. Vérifiez et mettez à jour les instructions Declare, puis marquez-les avec l'attribut PtrSafe. "
J'ai fait un bouton ActiveX pour piloter l'impression :
Private Sub CommandButton1_Click()
Dim Chemin As String
Dim Fichier As String
Dim I As Long
'Choix de ton imprimante...pour tous tes fichiers .pdf
Application.Dialogs(xlDialogPrinterSetup).Show
'les pdf sont dans le même dossier que celui du classeur
Chemin = ThisWorkbook.Path & Application.PathSeparator
'boucle à partir de A4 jusqu'à la dernière ligne non vide, adapter si la première ligne est plus basse ou si elle commence à 1
For I = 4 To Range("A" & Rows.Count).End(xlUp).Row
'attention, l'extension ".pdf" doit être présente sinon, la rajouter ici !
Fichier = Range("A" & I).Value '& ".pdf"
'contrôle que le fichier existe bien sur le disque
If Dir(Chemin & Fichier) <> "" Then
'inscrit le X en colonne E en regard du fichier imprimé
Range("E" & I).Value = "X"
'imprime
ShellExecute 0, "print", Chemin & Fichier, vbNullString, Chemin, 0&
End If
Next I
End Sub
Par contre Declare Function je l'ai mis dans ma Feuil1.... Est-ce le bon endroit ?
Okey !!
J'ai réussi dans un module j'ai mis :
Declare PtrSafe Function ShellExecute _
Lib "shell32.dll" _
Alias "ShellExecuteA" ( _
ByVal hwnd As Long, _
ByVal lpOperation As String, _
ByVal lpFile As String, _
ByVal lpParameters As String, _
ByVal lpDirectory As String, _
ByVal nShowCmd As Long) As Long
et dans mon bouton j'ai mis :
Private Sub CommandButton1_Click()
Dim Chemin As String
Dim Fichier As String
Dim I As Long
'Choix de ton imprimante...pour tous tes fichiers .pdf
Application.Dialogs(xlDialogPrinterSetup).Show
'les pdf sont dans le même dossier que celui du classeur
Chemin = ThisWorkbook.Path & Application.PathSeparator
'boucle à partir de A4 jusqu'à la dernière ligne non vide, adapter si la première ligne est plus basse ou si elle commence à 1
For I = 4 To Range("A" & Rows.Count).End(xlUp).Row
'attention, l'extension ".pdf" doit être présente sinon, la rajouter ici !
Fichier = Range("A" & I).Value '& ".pdf"
'contrôle que le fichier existe bien sur le disque
If Dir(Chemin & Fichier) <> "" Then
'inscrit le X en colonne BB en regard du fichier imprimé
Range("E" & I).Value = "X"
'imprime
ShellExecute 0, "print", Chemin & Fichier, vbNullString, Chemin, 0&
End If
Next I
End Sub
Il me demande bien l'imprimante que je souhaite.
Je clic sur "OK" mais rien ne se passe ...
EDIT : Ça fonctionne c'est bon !
Concernant le code à cette endroit:
Chemin = ThisWorkbook.Path & Application.PathSeparator
Est-il possible de dire le chemin ? Mon excel ne serra pas toujours dans le dossier des pdf en faite..
J'ai test ceci:
Chemin = ChoixDossier
Function ChoixDossier()
If Val(Application.Version) >= 10 Then
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = ActiveWorkbook.Path & "\"
.Show
If .SelectedItems.Count > 0 Then
ChoixDossier = .SelectedItems(1)
Else
ChoixDossier = ""
End If
End With
Else
ChoixDossier = InputBox("Répertoire?")
End If
End Function
Quand j'essai l'impression il me demande alors l'imprimante, puis le chemin mais du coup il me lance plus l'impression..
Bonjour,
Avec une petite fonction :
Private Sub CommandButton1_Click()
Dim Chemin As String
Dim Fichier As String
Dim I As Long
'Choix de ton imprimante...pour tous tes fichiers .pdf
Application.Dialogs(xlDialogPrinterSetup).Show
Chemin = ChoixDossier
If Chemin = "" Then Exit Sub
'ajoute le séparateur
Chemin = Chemin & Application.PathSeparator
'boucle à partir de A4 jusqu'à la dernière ligne non vide, adapter si la première ligne est plus basse ou si elle commence à 1
For I = 4 To Range("A" & Rows.Count).End(xlUp).Row
'attention, l'extension ".pdf" doit être présente sinon, la rajouter ici !
Fichier = Range("A" & I).Value '& ".pdf"
'contrôle que le fichier existe bien sur le disque
If Dir(Chemin & Fichier) <> "" Then
'inscrit le X en colonne BB en regard du fichier imprimé
Range("E" & I).Value = "X"
'imprime
ShellExecute 0, "print", Chemin & Fichier, vbNullString, Chemin, 0&
End If
Next I
End Sub
Function ChoixDossier() As Variant
With Application.FileDialog(4)
If .Show = -1 Then ChoixDossier = .SelectedItems(1)
End With
End Function
hé bien c’est parfait !
Merci Theze
EDIT: Petit plus, est-il possible de cocher en colonne B c'est A4 en C c'est A3 et en D c'est une autre imprimante en A2 ? Ou plus simple par défault c'est A4 mais si on coche la colonne B c'est A3 et si on coche la colonne C c'est A2 sur une autre imprimante prédéfinit ..?
Bonjour,
EDIT: Petit plus, est-il possible de cocher en colonne B c'est A4 en C c'est A3 et en D c'est une autre imprimante en A2 ? Ou plus simple par défault c'est A4 mais si on coche la colonne B c'est A3 et si on coche la colonne C c'est A2 sur une autre imprimante prédéfinit ..?
Là, ça va devenir compliqué car il te faut utiliser les fonctions API pour avoir accès aux imprimantes sous Windows et juste pour éviter deux ou trois clics, tu vas devoir faire une usine à gaz mais bon, sur le net, tu peux trouver du code à adapter à tes besoins !
Ouais bon effectivement si c'était assez simple niveau codage ça aurait été parfait mais si c'est une usine a gaz pour comme tu l'as dis éviter quelque clic tant pis ce n'est pas grave ^^
Merci en tous cas !
Essais avec :
Application.Dialogs(xlDialogPrint).Show
tu devrais avoir une fenêtre plus complète pour paramétrer l'imprimante !