Impression qui ne fonctionne pas avec la fonction LIEN_HYPERTEXTE
Bonjour à toutes et à tous,
Voici mon problème :
J'ai un fichier Excel dans lequel j'ai une liste de fichiers que je souhaite imprimer.
En faisant une petite recherche, je me suis inspiré d'un bout de code pour imprimer des liens hypertextes (créés à partir d'un emplacement réseau unique et du nom des fichiers) et tout allait bien jusque là (je créais le lien hypertexte en utilisant le menu Excel "lien hypertexte" de l'onglet "insertion").
Seulement voilà, j'ai voulu automatiser la création de ces liens hypertextes en utilisant une formule du type LIEN_HYPERTEXTE(CONCATENER("chemin_de_stockage";cellule où est stockée le nom du fichier;".pdf");"blabla").
Et là, c'est le drame, le lien hypertexte est bien créé (et il fonctionne si je clique dessus par exemple) mais ma fonction d'impression ne fonctionne plus, elle.
La fonction en question est ShellExecute 0, print, fileName, vbNullString, "", SW_SHOWNORMAL (que je ne maîtrise pas réellement...).
D'ailleurs, vous l'aurez peut être compris, je suis plutôt débutant en VBA.
Si quelqu'un a une idée, je suis preneur, vous l'aurez compris... :)
En vous remerciant par avance.
Bonjour, Tu ne donnes pas assez d'informations ni de fichier pour que l'on puisse t'aider.
Tu parles de liens hypertextes ---> un lien ne sert qu'à ouvrir un fichier il ne pourra pas exécuter une commande en plus.
De quelle manière penses tu lancer ta macro ShellExecute 0, print, fileName, vbNullString, "", SW_SHOWNORMAL ?
Un bouton ? un lancement manuel de la macro ? ...…
Brefs on a plus de questions de réponses à apporter pour le moment.
Bonjour,
Tout d'abord, merci pour ta réponse et désolé, je pensais avoir été clair.
Quand tu écris que "un lien ne sert qu'à ouvrir un fichier il ne pourra pas exécuter une commande en plus", je ne suis pas tout à fait d'accord, car ça fonctionne avec la première méthode (création manuelle du lien avec les menus Excel). Mais peut être voulais tu dire que ce n'est pas l'usage (ou dans les bonnes pratiques) de faire de la sorte...?
En ce qui concerne le lancement de la macro, j'utilise un bouton (nommer "imprimer tout" dans le fichier fourni avec ma réponse).
J'explique un peu le contenu de ce que je joins à cette réponse et la manière de tester cette fameuse macro :
Il y a 3 fichiers (xx.xslx : le fichier qui contient la macro / Fichier1.pdf et Fichier2.pdf : 2 fichiers de test pour les impressions)
Si on place ces 3 fichiers sur le bureau, il n'y a qu'à modifier légèrement les cellules D11 et D12 pour que la macro fonctionne : il faut remplacer "xxx" par votre nom d'utilisateur Windows pour que les liens pointent bien vers VOTRE bureau (Dans D11, il faut modifier la formule et dans D12, il faut modifier le lien hypertexte en faisant un clic droit + "modifier le lien hypertexte...").
Ensuite, on peut cliquer sur le bouton "Imprimer tout" (en haut à droite de la feuille 1), la macro s'exécute.
A la ligne 98, on appelle une fonction "ExecuteFile Lien.Address, printfile" qui nous renvoie à la ligne 15 pour finalement exécuter la ligne 25 "ShellExecute 0, sAction, fileName, vbNullString, "", SW_SHOWNORMAL".
Une fenêtre vous demande de choisir votre imprimante et ensuite on peut constater que Fichier1.pdf n'est pas imprimé alors que Fichier2.pdf l'est. Et comme je l'expliquais dans mon message précédent, la différence entre ces 2 fichiers est la méthode utilisée pour générer les liens hypertextes en D11 et D12.
J'espère avoir été plus clair que dans mon premier message (avec toutes mes excuses).
Merci encore pour votre aide.
Ce n'est sans doute pas le problème mais cette délcaration est en rouge à l'ouverture de ton fichier :
Public 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
Il me semble que l'on doit mettre les deux versions possibles :
#If VBA7 Then
Private 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
#Else
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
#End IfJe regarde pour le reste.
Effectivement ouvrir un lien hypertexte par vba créé par excel et ouvrir un lien hypertexte créé par formule ce n'est pas la même méthode en vba.
Ci-joint : un petit fichier qui permet d'ouvrir plusieurs pdf en même temps en indiquant à partir de quelles lignes on souhaite ouvrir.
Tu pourras voir que le code des boutons : "Ouvrir liens hypertexte de la cellule" et "Ouvrir liens hypertexte Formule" n'est pas le même.
Tu peux sans doute utiliser les deux méthodes dans deux macros différentes est faire un test sur la cellule
dans le style :
Dim c As Range, f$, n%
For Each c In Selection
f = c.Formula
If f Like "=HYPERLINK(*" Then
macro1
Else
macro2Bonjour,
Effectivement, ça fonctionne, j'ai pu faire un "printout" pour imprimer mes différents fichiers pointés par mes liens hypertextes (créés par des formules).
Merci, une fois de plus, pour ton aide.
En espérant que ça aidera d'autres personnes :)
A+