Besoin d'aide pour un programme vba [But ouvrir des fichiers pdf variable]

JCM49 Messages postés 8 Date d'inscription vendredi 10 décembre 2010 Statut Membre Dernière intervention 12 décembre 2010 - 10 déc. 2010 à 13:33
JCM49 Messages postés 8 Date d'inscription vendredi 10 décembre 2010 Statut Membre Dernière intervention 12 décembre 2010 - 12 déc. 2010 à 12:05
Bonjour à tous.

Voici, mon pb !

Je voudrais savoir comment ouvrir un fichier pdf suivant un code vba sur Excel. Sachant que mon nom de fichier est variable suivant le contenu de ma cellule.
Je m'explique, sur Excel j'ai une colonne avec une quantité de référence:

Ex : Refxxxx1AA
Refxxxx2AA
Refxxxx3AA
Refxxxx4AA (...)

Une mise en plan en format pdf stocké dans un lecteur C:/ dans des dossiers différents, associé à la ref et porte du coup le même nom:

Ex: pr Refxxxx1AA = C:/xxxx1AA/Refxxxx1AA.pdf
la Refxxxx2AA = C:/xxxx2AA/Refxxxx2AA.pdf (...)

Le but est obetnir au final une fois qu'on est sur la cellule ex : Refxxxx1AA, qui s'affiche une boîte de dialogue qui demande à l'utilisateur s'il veut ouvrir la mise en plan pdf associé. Oui ou non, si oui ouvre le pdf non ne l'ouvre pas.

J'ai regarder sur le net, et je Galr grave, si quelqu'un me trouve un programme c un Dieu !

Merci !

14 réponses

cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 137
10 déc. 2010 à 16:20
Bonjour, Je te propose ceci, à mettre dans Feuil1

'Ouvrir fichiers dans leur programme par défaut
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
Dim fichier As String
'ouvrir tous les fichier sauf xls
Sub ouvriravec()
On Error Resume Next
fichier = Application.GetOpenFilename("All Files (*.*), *.*")
If fichier = "" Then
Exit Sub
Else
fichier = "C:\monfichier.pdf"'chemin du pdf
Dim Ret As Variant
Ret = ShellExecute(hwnd, "open", fichier, "", vbNullString, 1) 
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("A1").Value = "monfichier.pdf" Then
ouvriravec
End If
End Sub


je pars du principe que le nom de ton fichier pdf est en A1, à toi d'adapter suivant tes besoins
@+ Le Pivert
0
JCM49 Messages postés 8 Date d'inscription vendredi 10 décembre 2010 Statut Membre Dernière intervention 12 décembre 2010
10 déc. 2010 à 17:24
Merci, jvé tester ça, si sa marche respect !
Bne soirée en tout ka et bn week!
0
JCM49 Messages postés 8 Date d'inscription vendredi 10 décembre 2010 Statut Membre Dernière intervention 12 décembre 2010
10 déc. 2010 à 18:13
Alors pour le moment il m'ouvre le lecteur C mais c'est à moi manuellment d'ouvrir le pdf sa se fait pas automatiquement quand jsui sur la cellule comme je le voudrais koi! J'ai l'impression qui ne prend pas la valeur en A1. Et comme jsui un novice en VBA, c GalR lol! Merci kan même bne soirée.
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 137
10 déc. 2010 à 18:52
Quand tu cliques dans la feuille1, si le chemin du fichier est correct, la boite de dialogue s'ouvre, il suffit alors de la fermer et ton fichier s'ouvre automatiquement.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_subaqua Messages postés 69 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 20 juin 2011
10 déc. 2010 à 19:16
Bonjour,

J'ai fait dans le passé le même type de logiciel Excel / VBA.
Je voulais ouvrir des plans 2D en PDF de pièces techniques. Dans une cellule Excel, j'avais la ref. produit.
Tout simplement, pour ouvrir un fichier pdf, il faut utiliser le code ci-dessous.

Sub affiche_pdf()

chemin = "C:\Program Files\Adobe\Reader 9.0\Reader\AcroRd32.exe "
nom_fichier = "C:\monrepertoire\monfichier.pdf"
Shell (chemin & nom)

End Sub

Attention, mettre dans "chemin" le chemin d'accès d'acrobat reader.
0
JCM49 Messages postés 8 Date d'inscription vendredi 10 décembre 2010 Statut Membre Dernière intervention 12 décembre 2010
10 déc. 2010 à 20:11
Bonjour,

- subaqua : j'ai testé ta solution il m'ouvre adobe et c tout pas mon fichier et le problème c que j'ai une multitude de ref et jveu qu'un programme dc fo je fasse une variable c obligé qui fasse automatiquement le rapprochement entre la valeur dans ma cellule et le nom du plan en pdf que je veux ouvrir.

- le Pivert: j'ai retester j'arrive à l'ouvrir nikl mais toujour en manuel et le souci c comme jle disais g une multitude de fichier.

Un peu plus d'explication: Pour le moment dans mon fichier excel j'ai trouvé un code qui me permet quand on va cliquer sur un bouton dans ton excel une boite de dialogue s'affiche et demande à l'utilisateur d'entrer la ref désirée. Une fois valider le excel va rechercher directement la ligne ou se trouve cette ref (tout sa dans le même fichier) et c a partir de ce moment que je voudrais qu'une boite de dialogue s'affiche en disant voulez vous ouvrir la mise en plan en pdf oui? non? D'ou le programme sur lequel je rame complètement pour être honnête j'ai aucune idée de la structure etc...

Dur ! Dur ! Merci de votre aide sérieux .
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 137
11 déc. 2010 à 08:46
Maintenant je comprends mieux le problème. J'ai fait un code que j'ai placé dans la feuille1, mais toi tu devras l'insérer à la suite de ton code existant.
Place les chemins de tes fichiers pdf dans la feuille2 si cela est possible ou une autre,dans ce cas, il faudra rectifier le code. Voici le code dans la feuille1 pour l'exemple:

'Ouvrir fichiers dans leur programme par défaut
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
Sub ouvriravec()
Dim Var As Object
On Error Resume Next
Set Var = Application.InputBox(Prompt:="Sélectionner le fichier que vous voulez ouvrir avec la souris: (Ex. A1) ", _
Title:="Sélection de fichier ", Default:="$A$1", Type:=8)
If Var = "" Then
MsgBox (" Vous devez sélectionner une ligne.") 'Si on sélectionne plusieurs lignes ou aucune ligne
Exit Sub
Else
Dim Ret As Variant
Ret = ShellExecute(hwnd, "open", Var, "", vbNullString, 1) 'Var= chemin du fichier
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 Sheets("Feuil2").Select
 ouvriravec
End Sub


on peut l'améliorer en sélectionnant la cellule dans la feuille2.Essaie comme ceci, ensuite on verra. Ce n'est pas la peine de partir dans une mauvaise direction.
Le Pivert
0
cs_subaqua Messages postés 69 Date d'inscription jeudi 22 décembre 2005 Statut Membre Dernière intervention 20 juin 2011
11 déc. 2010 à 09:16
Je suis étonné qu'il n'ouvre pas le fichier car j'ai testé le code juste avant de te l'avoir envoyé et ça marchait.
Juste un petit truc erroné, j'avais changé la var. nom en nom_fichier pour être plus explicite et j'avais oublié de changer la var. dans shell

Sub affiche_pdf()

chemin = "C:\Program Files\Adobe\Reader 9.0\Reader\AcroRd32.exe "
nom_fichier = "C:\monrepertoire\monfichier.pdf"
Shell (chemin & nom_fichier)

End Sub

Si tu avais simplement copié mon code, c'est normal qu'il ne t'ouvrait pas le fichier.
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 137
11 déc. 2010 à 10:10
J'ai peaufiné le code avec sélection auto de la cellule. Il suffit de cliquez sur la cellule en Feuille1 ce qui t'ouvre une boite de dialogue où tu n'as plus qu'a cliquer sur OK pour ouvrir le pdf, la cellule est sélectionnée automatiquement.
mettre ce code dans la feuill1

'Ouvrir fichiers dans leur programme par défaut
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
Dim nom As String
Dim nom_pdf As String
Dim Var As Object
Sub ouvriravec()
On Error Resume Next
Set Var = Application.InputBox(Prompt:="Cliquez sur OK, si vous voulez ouvrir le pdf", _
Title:="Ouverture du pdf", Default:=nom_pdf, Type:=8)
If Var = "" Then
 MsgBox (" Vous devez sélectionner une ligne.") 'Si on sélectionne plusieurs lignes ou aucune ligne
Exit Sub
Else
Dim Ret As Variant
Ret = ShellExecute(hwnd, "open", Var, "", vbNullString, 1) 'Var= chemin du fichier
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  nom = Target.Address
    If Target.Address = nom Then
        nom = Target.Value
       Sheets("Feuil2").Select
        Feuil2.Range(Target.Address).Select
         nom_pdf = Target.Address
        End If
 ouvriravec
  Sheets("Feuil1").Select
End Sub


Mettre le chemin des fichiers pdf dans la feuille2. Si les fichiers sont dans le même dossier on peut alléger les saisies
Le Pivert
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 137
11 déc. 2010 à 10:13
Il faut mettre dans la feuille2 les chemins des pdf dans les cellules équivalentes à la feuille1
0
JCM49 Messages postés 8 Date d'inscription vendredi 10 décembre 2010 Statut Membre Dernière intervention 12 décembre 2010
11 déc. 2010 à 12:06
Tout d'abord je tenais vraiment à vous remercier les gars pour votre aide, j'explique mon problème j'ai une réponse quelques heures après c'est génial. Le pivert j'ai testé ton code sa marche du feu de Dieu c'est nikel. Merci et subaqua ce petit code va me servir pour plus tard si j'ai un pdf à ouvrir donc c'est trop bon, merci vraiment à vous deux. Bon fin de week les gars, encore merci.
0
JCM49 Messages postés 8 Date d'inscription vendredi 10 décembre 2010 Statut Membre Dernière intervention 12 décembre 2010
11 déc. 2010 à 19:54
Le pivert, excusez moi, mais si je veux que votre pragramme s'applique que pour la colonne des A et pas dans les autres quand je vais dedans, comment je dois faire? J'arrête de vous embêter après promi . Merci bonne soirée.
0
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 137
12 déc. 2010 à 08:31
J'avais déjà fait un projet comme cela, j'avais mis un checkBox sur la feuil1 pour désactiver la macro.Quand tu veux entrer des données sur ta feuille tu actives ton checkBox et tu le désactives pour ouvrir tes pdf.Je t'ai mis aussi un message d'annulation d'ouverture de pdf.

'Ouvrir fichiers dans leur programme par défaut
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
Dim nom As String
Dim nom_pdf As String
Dim Var As Object
Sub ouvriravec()
On Error Resume Next
If MsgBox("Ce PDF n'est pas ouvert. Voulez-vous l'ouvrir?", vbYesNo, "OUVERTURE PDF") = vbYes Then
Set Var = Application.InputBox(Prompt:="Cliquez sur OK, si vous voulez ouvrir le pdf", _
Title:="Ouverture du pdf", Default:=nom_pdf, Type:=8)
If Var = "" Then
 MsgBox (" Vous devez sélectionner une ligne.") 'Si on sélectionne plusieurs lignes ou aucune ligne
Exit Sub
Else
Dim Ret As Variant
Ret = ShellExecute(hwnd, "open", Var, "", vbNullString, 1) 'Var= chemin du fichier
End If
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   If CheckBox1.Value = True Then Exit Sub
 On Error Resume Next
  nom = Target.Address
    If Target.Address = nom Then
        nom = Target.Value
       Sheets("Feuil2").Select
        Feuil2.Range(Target.Address).Select
         nom_pdf = Target.Address
        End If
 ouvriravec
  Sheets("Feuil1").Select
 End Sub
 


Bon dimanche et bonne programmation

@+ Le Pivert
0
JCM49 Messages postés 8 Date d'inscription vendredi 10 décembre 2010 Statut Membre Dernière intervention 12 décembre 2010
12 déc. 2010 à 12:05
C'est parfait merci bien, et bon dimanche à vous aussi.
0
Rejoignez-nous