1. Ce site utilise des "témoins de connexion" (cookies) conformes aux textes de l'Union Européenne. Continuer à naviguer sur nos pages vaut acceptation de notre règlement en la matière. En savoir plus.

XL 2013 Fermer un fichier pdf avec VBA

Discussion dans 'Forum Excel' démarrée par Sebast, 9 Octobre 2018.

  1. Sebast

    Sebast XLDnaute Impliqué

    Inscrit depuis le :
    9 Décembre 2010
    Messages :
    518
    "J'aime" reçus :
    1
    Habite à:
    Toulouse
    Utilise:
    Excel 2013 (PC)
    Bonjour à toutes et à tous,

    je cherche comment fermer un fichier .pdf depuis VBA

    Mon code échoue avec le message :



    Erreur d'exécution 9 - L'indice n'appartient pas à la sélection



    Sub Fermer_fichier()

    Chemin = ThisWorkbook.Path

    Chemin_et_nom = ThisWorkbook.Path & "\Toto.pdf"

    Windows("Chemin_et_nom").Close

    End Sub



    Au début, je pensais que c'était parce que je ne l'avais pas ouvert, mais

    ça plante même quand le fichier pdf est ouvert …



    Je sais comment tester si le fichier est bien présent mais pas

    1) s'il est ouvert

    2) comment le fermer



    Quelqu'un a une idée ?



    Merci d'avance

    PS : désolé, tout à coup, je ne vois plus comment mettre en forme le texte (code, citations etc.) ...
     

    Pièces jointes:

  2. Chargement...

    Discussions similaires - Fermer fichier pdf Forum Date
    VBA - Fermer un fichier PDF Forum Excel 22 Mars 2013
    Macro pour fermer un fichier PDF Forum Excel 30 Mars 2011
    VBA Ouvrir fichier .pdf, convertir en .txt, fermer Adobe Reader Forum Excel 17 Septembre 2010
    Fermer fichier PDF Forum Excel 22 Juin 2005
    Refermer fichiers apres boucle copier coller Forum Excel 20 Septembre 2018

  3. herve62

    herve62 XLDnaute Barbatruc

    Inscrit depuis le :
    14 Octobre 2005
    Messages :
    2129
    "J'aime" reçus :
    59
    Sexe :
    Masculin
    Habite à:
    Arques ( ville du Cristal) 62
    Utilise:
    Excel 2010 (PC)
    Bonsoir
    Avec ton fichier qui ne fait .... rien , normal que cela ne va pas
    Excel ne reconnait que des appli (logiciels) comme Word, Access , Acrobat etc
    et pas des types de fichiers Excel peut fermer des Xls , WOrd des .doc etc . Là faut préciser quelle appli tu veux fermer , celle-ci étant un "Objet" donc un EXE qui forcément fermera ton fichier
    Si tu avais un peu fouiné sur le Web en 5min tu aurais trouvé un départ de solution comme ceci :
    https://forum.excel-pratique.com/viewtopic.php?t=63248
    J'ai pas testé mais la 2eme propo me semble plus nette et rapide Vbs & Vba se rapprochent
    Bonne continuation
     
  4. job75

    job75 XLDnaute Barbatruc

    Inscrit depuis le :
    15 Mai 2008
    Messages :
    25775
    "J'aime" reçus :
    2194
    Sexe :
    Masculin
    Habite à:
    Paris
    Utilise:
    Excel 2013 (PC)
    Bonjour Sebast, herve62, le forum,

    Téléchargez les fichiers joints dans le même répertoire (le bureau) et exécutez ces macros très simples :
    Code (Text):
    Sub OuvrirPDF()
    CreateObject("WScript.Shell").Run ThisWorkbook.Path & "\Toto.pdf"
    End Sub

    Sub FermerPDF()
    CreateObject("WScript.Shell").Run "taskkill.exe /IM AcroRd32.exe /T /F", 0
    End Sub
    Elles fonctionnent très bien chez moi sur Win 10 - Excel 2013, je ne sais pas si c'est le cas pour toutes les versions.

    Bonne journée.
     

    Pièces jointes:

  5. Sebast

    Sebast XLDnaute Impliqué

    Inscrit depuis le :
    9 Décembre 2010
    Messages :
    518
    "J'aime" reçus :
    1
    Habite à:
    Toulouse
    Utilise:
    Excel 2013 (PC)
    Bonjour Hervé62,

    Merci pour ta réponse, je me suis effectivement rendu compte en validant mon post hier que les mots-clés de ma demande faisaient s’afficher sur ce même forum des discussions un peu similaires …



    Bonjour job75,

    Merci pour ces bouts de code, qui m’ont permis d’avancer.

    Concernant l’ouverture du fichier pdf, votre code plante chez moi (je suis en excel 2013 windows 7)

    avec le message « La méthode run de l’objet WScript.Shell a échoué »



    J’ai regardé un peu partout et ai adapté comme suit, qui fonctionne nickel

    Code (Text):
    Sub OuvrePDF()

      Dim Datei As String

      Datei = ThisWorkbook.Path & "\Toto.pdf"

      CreateObject("Shell.Application").Open (Datei)

    End Sub


    Concernant votre code pour fermer le pdf, il fonctionne mais en fait, je constate qu’il supprime le pdf (et du même coup le ferme)

    Je cherchais un moyen de simplement le fermer et pas de le supprimer

    J’ai essayé d’adapter le code mais ça plante … j’ai probablement naïvement remplacer Open par Close …

    Code (Text):
    Sub FermePDF()

      Dim Datei As String

      Datei = ThisWorkbook.Path & "\Toto.pdf"

      CreateObject("Shell.Application").Close (Datei)

    End Sub

    Y a-t-il un moyen de juste fermer et non flinguer le pdf ?


    Bonne journée
     
  6. job75

    job75 XLDnaute Barbatruc

    Inscrit depuis le :
    15 Mai 2008
    Messages :
    25775
    "J'aime" reçus :
    2194
    Sexe :
    Masculin
    Habite à:
    Paris
    Utilise:
    Excel 2013 (PC)
    Chez moi le fichier pdf (en fait l'application Acrobat) est supprimé de la barre des tâches mais pas du disque dur !!
     
  7. Sebast

    Sebast XLDnaute Impliqué

    Inscrit depuis le :
    9 Décembre 2010
    Messages :
    518
    "J'aime" reçus :
    1
    Habite à:
    Toulouse
    Utilise:
    Excel 2013 (PC)
    Je suis confus,



    Ce n’est pas votre code mais un des miens, testé par moi (non affiché – j’ai confondu), qui ferme et supprime Toto.pdf !



    Code (Text):
    Sub FichierExterneSuppr()

      Dim FichierASupprimer As String

      FichierASupprimer = ThisWorkbook.Path & "\Toto.pdf"


      Kill FichierASupprimer




    End Sub


    … désolé !



    Cependant, de manière à mieux comprendre



    CreateObject("WScript.Shell").Run "taskkill.exe /IM AcroRd32.exe /T /F", 0



    J’ai essayé de chercher à quoi correspondaient /T /F", 0



    mais sans succès …



    où puis-je trouver des infos à ce sujet ? en avez-vous ?





    encore merci
     
  8. Sebast

    Sebast XLDnaute Impliqué

    Inscrit depuis le :
    9 Décembre 2010
    Messages :
    518
    "J'aime" reçus :
    1
    Habite à:
    Toulouse
    Utilise:
    Excel 2013 (PC)
    re,
    en fait c'est surtout pour pouvoir maintenir le code quand je change de version.
    En utilisant

    CreateObject("WScript.Shell").Run "taskkill.exe /IM AcroRd32.exe /T /F", 0

    ça fonctionne parfaitement maintenant, mais quid d'Excel 2016 ou autre, à l'avenir.
    Du coup, je cherche à savoir à quoi correspondent ces paramètres

    merci
     
  9. MJ13

    MJ13 XLDnaute Barbatruc

    Inscrit depuis le :
    23 Mars 2005
    Messages :
    8621
    "J'aime" reçus :
    517
    Utilise:
    Excel 2016 (PC)
    Bonjour à tous

    Pour fermer un logiciel proprement, j'utilise souvent un code avec Sendkeys. Normalment on doit pouvoir aussi utiliser Alt+F4 avec SendKeys ("%{F4}"). Le problème, c'est que souvent cela ne fonctionne pas bien.

    Exemple à adapter:

    Code (Visual Basic):
    Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

    Sub Ferme_FF()
    Sleep 1000
    Application.SendKeys ("%f"), True
    Sleep 2000
    Application.SendKeys ("q"), True
    Sleep 1000
    Application.SendKeys ("~"), True
    Sleep 1000
    End Sub
     
    Code (Visual Basic):
    Sub Ferme_DOc_Alt_F4()
    ActiveWorkbook.FollowHyperlink ("C:\Chemin\NomFichier.docx")
    Sleep 3000
    Application.SendKeys ("%{F4}"), True
    End Sub
     
    Dernière édition: 10 Octobre 2018
  10. job75

    job75 XLDnaute Barbatruc

    Inscrit depuis le :
    15 Mai 2008
    Messages :
    25775
    "J'aime" reçus :
    2194
    Sexe :
    Masculin
    Habite à:
    Paris
    Utilise:
    Excel 2013 (PC)
    Bonjour Michel,
    Proprement ??? Sendkeys est vraiment une horreur, en plus sur les versions 2007 et suivantes cela désactive le pavé numérique :rolleyes:

    A+
     
  11. job75

    job75 XLDnaute Barbatruc

    Inscrit depuis le :
    15 Mai 2008
    Messages :
    25775
    "J'aime" reçus :
    2194
    Sexe :
    Masculin
    Habite à:
    Paris
    Utilise:
    Excel 2013 (PC)
  12. Sebast

    Sebast XLDnaute Impliqué

    Inscrit depuis le :
    9 Décembre 2010
    Messages :
    518
    "J'aime" reçus :
    1
    Habite à:
    Toulouse
    Utilise:
    Excel 2013 (PC)
    Re,


    Merci pour le lien vers taskkill, je vais m’y plonger.


    J’avoue n’avoir jamais utilisé les sendkeys …

    Si c’est capricieux d’une version à l’autre, je préfère ne pas me pencher sur ce cas


    En revanche, je me demande pourquoi si OpenPDF fonctionne


    Code (Text):
    Sub OpenPDF()

      Dim Datei As String

      Datei = ThisWorkbook.Path & "\Toto.pdf"

      CreateObject("Shell.Application").Open (Datei)

    End Sub




    alors pourquoi ClosePDF plante, bien que construit sur le même modèle



    Code (Text):
    Sub ClosePDF()

      Dim Datei As String

      Datei = ThisWorkbook.Path & "\Toto.pdf"

      CreateObject("Shell.Application").Close (Datei)

    End Sub


    Pourquoi dans un cas la méthode Open fonctionne mais pas la méthode Close ?



    Avez-vous une idée ?
     
  13. MJ13

    MJ13 XLDnaute Barbatruc

    Inscrit depuis le :
    23 Mars 2005
    Messages :
    8621
    "J'aime" reçus :
    517
    Utilise:
    Excel 2016 (PC)
    Re

    Pour moi, Sendkeys, quand cela fonctionne, c'est très robuste. On peut aussi simuler le déplacement de la souris et le click.

    Sinon, ont peut aussi utiliser une alternative comme Super Macro et là plus de problèmes, mais il faudra faire du Shell. :)
     
  14. Sebast

    Sebast XLDnaute Impliqué

    Inscrit depuis le :
    9 Décembre 2010
    Messages :
    518
    "J'aime" reçus :
    1
    Habite à:
    Toulouse
    Utilise:
    Excel 2013 (PC)
    Bonjour Michel,
    merci pour ces précisions; je n'ai malheureusement jamais utilisé les sendkeys et ne saurai donc pas donner mon avis ...

    Tu évoques l'alternative consistant à devoir utiliser SHELL : à ce propos, as-tu une idée pourquoi la méthode Open fonctionne alors que Close conduit à un plantage (voir mon dernier post #12) ?
     
  15. Sebast

    Sebast XLDnaute Impliqué

    Inscrit depuis le :
    9 Décembre 2010
    Messages :
    518
    "J'aime" reçus :
    1
    Habite à:
    Toulouse
    Utilise:
    Excel 2013 (PC)
    sorry, post # 11
     
  16. job75

    job75 XLDnaute Barbatruc

    Inscrit depuis le :
    15 Mai 2008
    Messages :
    25775
    "J'aime" reçus :
    2194
    Sexe :
    Masculin
    Habite à:
    Paris
    Utilise:
    Excel 2013 (PC)
    Bonjour Sebast,
    Chaque méthode a ses caractéristiques, ce n'est pas parce que la 1ère fonctionne que la seconde fonctionnera obligatoirement.

    A+
     
  17. MJ13

    MJ13 XLDnaute Barbatruc

    Inscrit depuis le :
    23 Mars 2005
    Messages :
    8621
    "J'aime" reçus :
    517
    Utilise:
    Excel 2016 (PC)
    Re

    Le problème, c'est qu'on ne sait pas comment tu ouvres ton PDF.

    Par exemple chez moi ton PDF, je l'ouvre avec Edge.

    Pour le fermer je peux utiliser ce code. Sinon, il suffit de remplacer MicrosoftEdge par le nom de l'application que tu trouveras en allant dans le gestionnaire de tâche (Ctrl+Alt+Suppr.).

    Code (Visual Basic):
    Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
    Sub Kill_process()
    'Sleep 1000
    killString = "taskkill /F /IM MicrosoftEdge.exe"
    'killString = "taskkill /F /IM firefox.exe"
    'Sleep 1000
    Call Shell(killString, vbHide)
    'Sleep 1000
    End Sub
     

Partager cette page