bonjour
en effet, il semblerait...
J'ai regardé les messages précédents et dans celui du 11/10 il y a une différence entre les 2 noms -1107-1108... En tout cas, merci de ton aide
et merci pour le code, je vais le tester...
bonne journée
bonjour
en effet, il semblerait...
J'ai regardé les messages précédents et dans celui du 11/10 il y a une différence entre les 2 noms -1107-1108... En tout cas, merci de ton aide
et merci pour le code, je vais le tester...
bonne journée
re-bonjour,
grrrrr... j'ai une erreur avec le code (désolé)
ligne 25
"erreur '91' : Variable objet ou variable de bloc With non définie"
Code : Sélectionner tout - Visualiser dans une fenêtre à part Set oShellFolderItem = oShellFolder.Items.Item(CVar(sFile))
tu sais m'en dire plus ?
merci
Bonjour,
Non, je ne sais pas précisément d'où vient l'erreur.
Ça peut être un dossier non valide, un nom de fichier non valide, la version de Windows (je suis sous XP familial) qui fait que Shell32 fonctionne différemment.
Voici une version avec des vérifications :
Une autre version sans oShellFolder.Items.Item(CVar(sFile)) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 Private Sub CmdPrint_Click() Dim oShell As Object ' Shell32.Shell Dim oShellFolder As Object ' Shell32.Folder Dim oShellFolderItem As Object ' Shell32.FolderItem Dim sFullPathName As String Dim sPath As String, sFile As String ' On suppose que reporting_pdf_name contient le chemin relatif et le nom du fichier. ' Le chemin relatif commence à partir du chemin de la base de données. ' Chemin complet + nom du fichier sFullPathName = CurrentProject.Path & "\" & Me.reporting_pdf_name ' On extrait le chemin sPath = Left(sFullPathName, InStrRev(sFullPathName, "\") - 1) If Len(sPath) < 3 Then sPath = sPath & "\" ' On extrait le nom du fichier sFile = Mid(sFullPathName, InStrRev(sFullPathName, "\") + 1) ' Création objet Shell32.Shell Set oShell = CreateObject("Shell.Application") If oShell Is Nothing Then MsgBox "L'objet oShell n'a pas pû être créé." GoTo EndSub End If ' Obtention objet Shell32.Folder sur le dossier contenant le fichier Set oShellFolder = oShell.NameSpace(CVar(sPath)) If oShellFolder Is Nothing Then MsgBox "Le dossier '" & sPath & "' n'existe pas." Else ' Obtention objet Shell32.FolderItem sur le fichier Set oShellFolderItem = oShellFolder.Items.Item(CVar(sFile)) If oShellFolderItem Is Nothing Then MsgBox "Le fichier '" & sFile & "' n'a pas été trouvé" & vbCrLf & _ "dans '" & sPath & "'" Else ' Appel du verbe "print" (imprimer) oShellFolderItem.InvokeVerb "print" End If End If EndSub: ' Libération des variables objets Set oShellFolderItem = Nothing Set oShellFolder = Nothing Set oShell = Nothing End Sub
Enfin une version avec la fonction ShellExecute de l'API Windows :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 Private Sub CmdPrint_Click() Dim oShell As Object ' Shell32.Shell Dim oShellFolder As Object ' Shell32.Folder Dim oShellFolderItem As Object ' Shell32.FolderItem Dim sFullPathName As String Dim sPath As String, sFile As String Dim bFileFound As Boolean ' On suppose que reporting_pdf_name contient le chemin relatif et le nom du fichier. ' Le chemin relatif commence à partir du chemin de la base de données. ' Chemin complet + nom du fichier sFullPathName = CurrentProject.Path & "\" & Me.reporting_pdf_name ' On extrait le chemin sPath = Left(sFullPathName, InStrRev(sFullPathName, "\") - 1) If Len(sPath) < 3 Then sPath = sPath & "\" ' On extrait le nom du fichier sFile = Mid(sFullPathName, InStrRev(sFullPathName, "\") + 1) ' Création objet Shell32.Shell Set oShell = CreateObject("Shell.Application") If oShell Is Nothing Then MsgBox "L'objet oShell n'a pas pû être créé." GoTo EndSub End If ' Obtention objet Shell32.Folder sur le dossier contenant le fichier Set oShellFolder = oShell.NameSpace(CVar(sPath)) If oShellFolder Is Nothing Then MsgBox "Le dossier '" & sPath & "' n'existe pas." Else ' Obtention objet Shell32.FolderItem sur le fichier For Each oShellFolderItem In oShellFolder.Items If oShellFolderItem.IsFolder = False Then If StrComp(oShellFolderItem.Name, sFile, vbTextCompare) = 0 Then bFileFound = True Exit For End If End If Next If Not bFileFound Then MsgBox "Le fichier '" & sFile & "' n'a pas été trouvé" & vbCrLf & _ "dans '" & sPath & "'" Else ' Appel du verbe "print" (imprimer) oShellFolderItem.InvokeVerb "print" End If End If EndSub: ' Libération des variables objets Set oShellFolderItem = Nothing Set oShellFolder = Nothing Set oShell = Nothing End Sub
Tu noteras la déclaration de ShellExecute, dans la section Déclarations du module de code du formulaire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 Option Compare Database Option Explicit Private 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 Private Sub CmdPrint_Click() Dim sFullPathName As String ' On suppose que reporting_pdf_name contient le chemin relatif et le nom du fichier. ' Le chemin relatif commence à partir du chemin de la base de données. ' Chemin complet + nom du fichier sFullPathName = CurrentProject.Path & "\" & Me.reporting_pdf_name ShellExecute Me.hwnd, "print", sFullPathName, "", "", 0 End Sub
A+
bonjour LedZepp,
merci beaucoup... je n'ai pas eu le temps d'essayer la nouvelle version...
bonne soirée
bonjour LedZepp,
super, ça fonctionne (la première version). J'ai fait avec un Etat.
Le seul petit hic, c'est que j'ai le bouton de commande à côté de chaque document. Je vais chercher le moyen d'imprimer tous les documents d'un seul clic. En tout cas, un tout grandpour ton aide...
Bon WE,
a+
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager