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 !

Rechercher des sujets similaires à "parcourir colonne ouvre pdf imprime coche"