Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Ouverture classeur (par macro VBA)


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Ouverture classeur (par macro VBA)
    Papi 83 ans, passionné de VBA (à niveau limité !) je n’arrive pas à m’y reconnaître dans les réponses trouvées sur le Web ☹ à la question ci-dessous.
    Je donne donc mes données en clair (même si moins simple, excuses)

    Dans le classeur
    « C:\Users\Proprietaire\Documents\Finances\Livre.xlsm », feuille « Prest.Santé »
    des cellules contiennent des dates « DateX » au format date.
    Je voudrais y attacher une macro par laquelle un double clic (Worksheet_BeforeDoubleClick) sur une cellule qui contient « DateX » ouvrira le classeur déjà existant :
    C:\Users\Proprietaire\Documents\Santé\Documents SS\DateX.xlsm »
    sans fermer le classeur Livre.xlsm (qui contient la macro).
    Rédaction de la macro ?
    Grand merci au répondeur.

  2. #2
    Expert confirmé
    Bonjour,

    DateX c'est pas très explicite !!!! Ce qui est certain, c'est que ton fichier ne peut pas d'appeler 22/08/2020.xlsm.
    Je suppose donc que tu utilises un autre format de date pour le nom du fichier (par exemple 22-08-2020.xlsm).

    Pourquoi VBA quand on peut s'en passer ??? Un simple lien hypertexte suffit :

    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  3. #3
    Expert éminent sénior
    Citation Envoyé par PICHOUX Voir le message

    Bonjour,

    Une solution possible. Regardez aussi l'événement ClicDroit pour le déclenchement de la macro.

    Dans un module standard :
    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
     
    Option Explicit
     
     
    Public Const NomWbDateX As String = "C:\Users\Proprietaire\Documents\Santé\Documents SS\DateX.xlsm"
    Public WbDateX As Workbook
     
     
    Sub OuvrirLeFichierDateX()
     
       If WbDateX Is Nothing Then
          Workbooks.Open Filename:=NomWbDateX
       End If
     
    End Sub


    Dans le module feuille :

    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
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
     
            If Target = "DateX" Then
               OuvrirLeFichierDateX
               Set WbDateX = Workbooks("DateX.xlsm")
               With WbDateX
                    ' .Activate
                    ' Suite du programme
                    ' ....
     
               End With
     
               Set WbDateX = Nothing
     
               Cancel = False
            End If
     
    End Sub
    Eric KERGRESSE
    https://sites.google.com/site/erickergresseeirl/
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter

  4. #4
    Membre du Club
    Ouverture classeur (par macro VBA)
    Citation Envoyé par Patrice740 Voir le message
    [...]

    J'utilise effectivement le lien hypertexte, et c'est justement pour éviter de créer le lien à chaque nouvelle cellule que je cherche la solution Macro double clic.
    Effectivement le format des fichiers est : aaaa mm jj.xlsm (pour permettre un tri par date avec la forme texte).
    Merci pour votre attention.

  5. #5
    Expert confirmé
    Citation Envoyé par PICHOUX Voir le message
    J'utilise effectivement le lien hypertexte, et c'est justement pour éviter de créer le lien à chaque nouvelle cellule ....
    Utilises un tableau structuré, le lien se créera tout seul à chaque ajout de ligne : https://fauconnier.developpez.com/tu...ux-structures/
    Cordialement,
    Patrice
    Personne ne peut détenir tout le savoir, c'est pour ça qu'on le partage.

    Pour dire merci, cliquer sur et quand la discussion est finie, penser à cliquer sur

  6. #6
    Membre du Club
    Citation Envoyé par Patrice740 Voir le message
    Utilises un tableau structuré, le lien se créera tout seul à chaque ajout de ligne : https://fauconnier.developpez.com/tu...ux-structures/
    Merci, mais pas assez jeune pour ingurgiter cette proposition que j'aurais tellement aimé découvrir il y a 10 ou 20 ans !

  7. #7
    Responsable
    Office & Excel

    Salut

    Citation Envoyé par PICHOUX Voir le message
    Merci, mais pas assez jeune pour ingurgiter cette proposition que j'aurais tellement aimé découvrir il y a 10 ou 20 ans !
    C'est l'affaire de 2 clics, puisqu'il suffit de transformer ta plage de données en tableau structuré... La formule peut alors se saisir dans une cellule et se propager sur toute la colonne...

    Merci Patrice (Hello )


    [EDIT]: Sans tableau structuré, ta formule se recopiera automatiquement à partir de la cinquième saisie, si je ne dis pas de bêtises
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Membre du Club
    Citation Envoyé par Eric KERGRESSE Voir le message
    [...]
    Comme répondu à Patrice, le format des fichiers est : aaaa mm jj.xlsm (pour permettre un tri par date avec la forme texte).
    Mais nouveau pb : les fichiers doivent être en .pdf (aaaa mm jj.pdf), et l’indication du format .pdf ne conditionne pas l'ouverture du fichier avec FaceStone Image. La commande actuelle ouvre le fichier .pdf dans Excel et tu devines la beauté du résultat ! !
    Alors merci pour une réponse ... j'espère assez facile

  9. #9
    Responsable
    Office & Excel

    Je ne comprends pas bien le problème sur lequel tu butes.

    • Patrice t'a donné la solution par formule
    • Tu a souhaité que la formule se reporte automatiquement sur les lignes suivantes
    • Patrice t'a donné la solution via les tableaux structurés (que tu sembles avoir rejetée, alors qu'il faut au maximum 4 clics pour la mettre en place)
    • Je t'ai informé que même sans tableau structuré, ta formule allait se propager sur les nouvelles cellules à partir de la cinquième saisie
    • Le lien hypertexte ouvre bien le fichier selon son extension. Si c'est un pdf, c'est l'appli de lecture des pdf qui s'ouvrira



    A ce stade, qu'est-ce qui t'empêche de tester et de valider la solution de la formule de Patrice? Tu veux absolument le faire en VBA? Si oui, pourquoi?


    Voila la formule qui te permet de créer le lien vers le nom du fichier pdf, et la fonction TEXTE te permet de formater la date comme il te convient.




    Pour ce qui est du tableau structuré, toujours sur base de mon exemple, 4 clics suffisent
    • Se mettre dans la plage
    • Cliquer sur l'onglet Insertion du ruban
    • Cliquer sur l'outil Tableau
    • Valider la boite de dialogue, en veillant à ce que la case "mon tableau contient des entêtes" soit cochée. Normalement, la présence de dates dans ta plage fait que cette case est cochée.



    C'est tout. Tu as alors ton tableau, et lorsque tu y ajouteras une ligne, la formule suivra automatiquement. Si tu modifies la formule, elle sera adaptée sur tout le tableau.



    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  10. #10
    Membre du Club
    Citation Envoyé par Pierre Fauconnier Voir le message
    Je ne comprends pas bien le problème sur lequel tu butes.[...]
    Je répète même si passionné, je suis de petit niveau ... et lent !
    Pour le lien, j'explique :
    Pour créer le lien je faisais clic droit sur la cellule à lier, elle-même, puis clic sur "Lien" en bas de la liste, puis je renseignais la page "Insérer un lien hypertexte".
    En faisant ainsi il suffisait de cliquer sur la cellule elle-même pour ouvrir le lien ...
    Cette méthode exigeait une création de lien sur chaque ligne.
    Je n'avais pas pensé à créer le lien sur autre cellule.
    Et en plus cela permet la "structuration" du tableau. Outil que je ne connaissais pas, même si je le pratique à peu près depuis longtemps, en créant des lignes avec cellules destinées aux saisies manuelles vides ou à effacer par la saisie, et des cellules contenant instructions.
    Ce que j'ajoute n'est pas une critique. Le maniaque que je suis voudrait effacer la vue des formules-liens, éventuellement en affichant une petite image "bouton" ou petite zone texte explicative pour autre utilisateur (mon épouse).
    La solution macro par double-clic n'exige pas la colonne "lien", et il suffit d'afficher en titre : "Double clic sur date ouvre le document correspondant.
    De plus je reste intéressé par le pb d'ouverture d'un fichier .pdf depuis une macro vba que je ne sais pas comment résoudre.
    Merci encore et veuillez excuser mes exigences !

  11. #11
    Responsable
    Office & Excel

    C'est pas une question de lenteur... J'aurais dû expliquer plus en détails dès ma première réponse

    L'important, c'est que la solution te convienne
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  12. #12
    Membre du Club
    Citation Envoyé par Eric KERGRESSE Voir le message
    Bonjour,

    Une solution possible. Regardez aussi l'événement ClicDroit pour le déclenchement de la macro.

    Dans un module standard :
    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
     
    Option Explicit
     
     
    Public Const NomWbDateX As String = "C:\Users\Proprietaire\Documents\Santé\Documents SS\DateX.xlsm"
    Public WbDateX As Workbook
     
     
    Sub OuvrirLeFichierDateX()
     
       If WbDateX Is Nothing Then
          Workbooks.Open Filename:=NomWbDateX
       End If
     
    End Sub


    Dans le module feuille :

    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
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
     
            If Target = "DateX" Then
               OuvrirLeFichierDateX
               Set WbDateX = Workbooks("DateX.xlsm")
               With WbDateX
                    ' .Activate
                    ' Suite du programme
                    ' ....
     
               End With
     
               Set WbDateX = Nothing
     
               Cancel = False
            End If
     
    End Sub
    Bonjour Eric, je tarde à répondre après avoir passé du temps avec Patrice dont j'ai beaucoup apprécié l'aide qui m'a fait découvrir la fonction "tableau structuré" que je ne connaissais pas. Mais finalement je préfère, pour raisons diverses garder la solution "Macro".
    J'ai testé l'option Explicit, que j'avais essayée mais qui coinçait (Guillemets oubliées dans NomWbDateX ... réparé).
    Nouveau pb : les fichiers à ouvrir ne sont plus en .xlsm mais doivent être en .pdf (exigé par le destinataire).
    Et le test que j'ai fait ouvre le fichier DateX.pdf dans Excel.
    Vous devinez le résultat ! ! !
    Et donc, ma question complémentaire est : Que faire pour qu'il s'ouvre en pdf.
    Merci pour votre réponse que je suppose être simple pour qui est compétent. (Je suis perdu dans les réponses trouvées sur le Web).

  13. #13
    Responsable
    Office & Excel

    On ne peut pas ouvrir un fichier Excel "en pdf"... Pour l'ouvrir en pdf, il faut que ce soit un fichier PDF.

    Il faut donc d'abord enregistrer (ou exporter) le fichcier Excel en PDF (ce qui le transformera et le rendra inexploitable en Excel) et on pourra alors l'ouvrir "en pdf"...

    Un peu plus de détails sur les tenants et aboutissants de ton projet nous permettra de t'aider, car pour l'instant, c'est un peu le brouillard, ce que tu souhaites obtenir.

    De quels fichiers disposes-tu au départ? de PDF? de fichiers EXCEL? S'ils sont en Excel, veux-tu les enregistrer en PDF? Si oui, sous quel nom? etc? etc?

    L'informatique, ce n'est pas "je frotte ma lampe d'aladin et hop, j'ai mon résultat"...


    Voilà un code qui crée le lien pdf dans la cellule dans laquelle tu saisis ta date (au sein d'un tableau structuré nommé tableau1 et dans une colonne nommée Date)
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Worksheet_Change(ByVal Target As Range)
      If Target.Cells.Count = 1 Then
        If Not Intersect(Target, Range("tableau1[Date]")) Is Nothing Then
          Target.Hyperlinks.Delete
          Target.Hyperlinks.Add Target, "file:///C:\data\Temp\" & Format(Target.Value, "yyyymmdd") & ".pdf", , , Format(Target.Value, "dd/mm/yyyy")
        End If
      End If
    End Sub


    Ca, c'est dans le cas où tu disposes déjà du fichier pdf. Si tu n'en disposes pas, c'est un autre sujet
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  14. #14
    Membre du Club
    Encore Merci. Mais le "Très-moyen-moins" que je suis passe beaucoup de temps pour assimiler ce que tu me propose (fais gaffe tu vas avoir des pb avec ma femme !) . Je suis content, j'apprends des méthodes/applications que j'ignorais et qui me passionnent.
    En plus je réalise qu'en alignant à droite la cellule, la date est visible, ce que je désirai.
    Je retiens donc cette solution, mais je vais qd mm me formater à la solution VBA que je sens pouvoir m'être utile dans d'autres cas.
    J'apprécie tout autant ton commentaire final ... lumineux !

  15. #15
    Membre du Club
    Citation Envoyé par Pierre Fauconnier Voir le message
    On ne peut pas ouvrir un fichier Excel "en pdf"... Pour l'ouvrir en pdf, il faut que ce soit un fichier PDF.

    Il faut donc d'abord enregistrer (ou exporter) le fichcier Excel en PDF (ce qui le transformera et le rendra inexploitable en Excel) et on pourra alors l'ouvrir "en pdf"...

    Un peu plus de détails sur les tenants et aboutissants de ton projet nous permettra de t'aider, car pour l'instant, c'est un peu le brouillard, ce que tu souhaites obtenir.

    De quels fichiers disposes-tu au départ? de PDF? de fichiers EXCEL? S'ils sont en Excel, veux-tu les enregistrer en PDF? Si oui, sous quel nom? etc? etc?

    L'informatique, ce n'est pas "je frotte ma lampe d'aladin et hop, j'ai mon résultat"...


    Voilà un code qui crée le lien pdf dans la cellule dans laquelle tu saisis ta date (au sein d'un tableau structuré nommé tableau1 et dans une colonne nommée Date)
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Worksheet_Change(ByVal Target As Range)
      If Target.Cells.Count = 1 Then
        If Not Intersect(Target, Range("tableau1[Date]")) Is Nothing Then
          Target.Hyperlinks.Delete
          Target.Hyperlinks.Add Target, "file:///C:\data\Temp\" & Format(Target.Value, "yyyymmdd") & ".pdf", , , Format(Target.Value, "dd/mm/yyyy")
        End If
      End If
    End Sub


    Ca, c'est dans le cas où tu disposes déjà du fichier pdf. Si tu n'en disposes pas, c'est un autre sujet
    Bonjour, encore moi (!), et merci pour ton aide que j'ai appliquée.
    Mais il demeure que je voudrais recomposer autrement la gestion de ces fichiers (et aussi d'autres). Pour cela je voudrais bien pouvoir ouvrir un dossier pdf , via VBA, par un bouton ou double-clic sur cellule Excel.
    Je ne comprends pas pourquoi après avoir passé des heures à chercher une réponse sur Google (developper.net inclus bien sûr) je n'ai pas réussi à appliquer les infos que j'y ai trouvées. Il doit y avoir "en moi" qq chose qui va pas !... Ou alors ?...
    Me serait-il possible d'avoir un exemple simple (à recopier) d'une "Sub" Vba (dans fichier Excel) qui ouvrira le fichier : "C:\Users\Proprietaire\Documents\monfichier.pdf"
    Bien chaleureusement pour ton aide (je devine combien je peux être "pesant" !)

  16. #16
    Responsable
    Office & Excel

    Voici une fonction générique qui ouvre à peu près n'importe quel fichier, du moment que son extension soit associée à un programme par défaut.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function OpenAnyfile(ByVal filename As String) As Long
      If Dir(filename) <> vbNullString Then
        Shell "explorer.exe """ & filename & """", 1
      Else
        OpenAnyfile = 1 ' Le fichier n'existe pas"
      End If
    End Function



    Elle peut s'utiliser par exemple comme ceci:
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Test()
      Dim Result As Long
     
      Result = OpenAnyfile("c:\data\temp\test.adf")
      If Result = 1 Then MsgBox "Le fichier n'existe pas", vbExclamation
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Une fois pour toutes, je donne mon avis. Je ne vais pas le répéter à chaque message...
    Si je propose une solution générique sur votre solution spécifique, c'est parce que, fainéant de nature, je privilégie le réutilisable...
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

###raw>template_hook.ano_emploi###