IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 :

Ouvrir un XLTX en XLSX depuis un hyperlien. [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    août 2012
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : août 2012
    Messages : 151
    Points : 72
    Points
    72
    Par défaut Ouvrir un XLTX en XLSX depuis un hyperlien.
    Bonjour,

    Dans une check-list en Excel, je souhaite cliquer sur un lien afin qu'il m'ouvre le fichier dont j'ai besoin.
    Le lien dirige vers un fichier XLTX que j'aimerais ouvrir en XLSX.
    Malheureusement, je ne peux que constater qu'au lieu de me l'ouvrir en XLSX comme il se doit, il me l'ouvre en XLTX.
    Y a-t-il un paramètre qui permet de préciser qu'il doit basculer vers l'XLSX ?

    Merci d'avance pour vos bons conseils.

    Henri

  2. #2
    Membre expérimenté
    Homme Profil pro
    Retraité
    Inscrit en
    juin 2019
    Messages
    986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : juin 2019
    Messages : 986
    Points : 1 504
    Points
    1 504
    Par défaut
    bonjour,
    je n'es pas trouvé mieux!
    Code ThisWorkbook : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink)
    For Each w In Workbooks
       If w.FullName = Target.Address Then
        w.Close False
        Workbooks.Add (Target.Address)
       End If
    Next
    End Sub

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    août 2012
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : août 2012
    Messages : 151
    Points : 72
    Points
    72
    Par défaut Je n'ai rien compris mais ça fonctionne !
    Mille mercis, ça fonctionne très bien.
    Sans vouloir abuser, vous pouvez m'expliquer ?

    Bien à vous

    Henri

  4. #4
    Membre expérimenté
    Homme Profil pro
    Retraité
    Inscrit en
    juin 2019
    Messages
    986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : juin 2019
    Messages : 986
    Points : 1 504
    Points
    1 504
    Par défaut
    quand on click sur le lien dans la cellule ça ouvre inévitablement le fichier.xltx mais ça déclenche également l'évènement Workbook_SheetFollowHyperlink.
    le paramètre Target As Hyperlink contient l'adresse du lien sur lequel tu as cliqué!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink) 
    For Each w In Workbooks 'on parcoure tous les fichier ouverts
       If w.FullName = Target.Address Then 'Si le fichier ouvert porte la même adresse que le lien ?
        w.Close False 'on ferme le fichier XLTX sans le sauvegarder
        Workbooks.Add (Target.Address) 'on ajoute un nouveau fichier en prenant le lien comme modèle!
       End If
    Next
    End Sub

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    août 2012
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : août 2012
    Messages : 151
    Points : 72
    Points
    72
    Par défaut
    Je ne savais même pas que c'était possible.
    J'ai beaucoup appris.
    Mille mercis encore une fois.

    Bonne nuit !

    Henri

  6. #6
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    juin 2012
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : juin 2012
    Messages : 2 914
    Points : 5 021
    Points
    5 021
    Par défaut
    Bonjour,

    Une autre façon de faire, sans lien hypertexte mais sur double-clic:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
        Workbooks.Add Template:=Target
    End Sub
    Cordialement.

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    août 2012
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : août 2012
    Messages : 151
    Points : 72
    Points
    72
    Par défaut
    Je suis gâté ! :-)
    Merci également, je vais l'essayer, je vous reviens.

  8. #8
    Membre régulier
    Homme Profil pro
    Inscrit en
    août 2012
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : août 2012
    Messages : 151
    Points : 72
    Points
    72
    Par défaut
    Je ne dois pas avoir bien compris.
    Fallait-il aussi le placer dans "ThisWorkbook" ?
    Si je clique sur le lien, c'est le XLTX qui s'ouvre et si je place le fichier avec son chemin dans une cellule (sans lien) il n'y a rien qui se passe.
    Que faudrait-il changer ?

  9. #9
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    juin 2012
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : juin 2012
    Messages : 2 914
    Points : 5 021
    Points
    5 021
    Par défaut
    Bonjour,

    En attaché un exemple. La routine doit se trouver dans la feuille concernée.

    Cordialement.
    Fichiers attachés Fichiers attachés

  10. #10
    Membre régulier
    Homme Profil pro
    Inscrit en
    août 2012
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : août 2012
    Messages : 151
    Points : 72
    Points
    72
    Par défaut
    Mille mercis pour l'alternative.
    J'en apprends tous les jours. :-)
    Belle journée !
    Henri

  11. #11
    Membre régulier
    Homme Profil pro
    Inscrit en
    août 2012
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : août 2012
    Messages : 151
    Points : 72
    Points
    72
    Par défaut Une petite sous-question...
    J'ai le même problème avec un DOTX et un DOCX.
    Malheureusement, la solution qui fonctionne très bien avec une feuille ne fonctionne pas avec un document.

    Une idée ?

    Bien à vous

    Henri

  12. #12
    Membre expérimenté
    Homme Profil pro
    Retraité
    Inscrit en
    juin 2019
    Messages
    986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : juin 2019
    Messages : 986
    Points : 1 504
    Points
    1 504
    Par défaut
    Bonjour,
    normal il faut gérer le type de fichier Excel, Word, autre
    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
    Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink)
    Select Case Fichier_extension(Target.Address)
        Case "XLS", "XLSX", "XLSM", "XLT", "XLTM"
                    For Each w In Workbooks 'on parcoure tous les fichier ouverts
                    If w.FullName = Target.Address Then 'Si le fichier ouvert porte la même adresse que le lien ?
                        w.Close False 'on ferme le fichier XLTX sans le sauvegarder
                        Workbooks.Add (Target.Address) 'on ajoute un nouveau fichier en prenant le lien comme modèle!
                    End If
                Next
        Case "DOTX", "DOCX"
            With GetObject(, "WORD.Application")
                .Visible = True
                For Each w In .Documents
                    If w.FullName = Target.Address Then
                         w.Close False
                        .Documents.Add Target.Address
                    End If
                 Next
            End With
     
     
    End Select
    End Sub
    Public Function Fichier_extension(Fichier)
    With CreateObject("Scripting.FileSystemObject")
        If .FileExists(Fichier) Then Fichier_extension = UCase(.GetExtensionName(Fichier))
    End With
    End Function

  13. #13
    Membre régulier
    Homme Profil pro
    Inscrit en
    août 2012
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : août 2012
    Messages : 151
    Points : 72
    Points
    72
    Par défaut
    Merci pour le code, malheureusement, il ne fonctionne pas. Il s'ouvre en XLTX et les fichiers Word en DOTX.
    J'ai décortiqué un peu en plaçant un point d'arrêt à hauteur de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Case "XLS", "XLSX", "XLSM", "XLT", "XLTM"
    donc, avant l'exécution du code proprement dit et à ma grande surprise, le fichier appelé par le lien était déjà ouvert alors que le code était censé patienter. Bizarre, non ?!

    Une idée ?

  14. #14
    Membre expérimenté
    Homme Profil pro
    Retraité
    Inscrit en
    juin 2019
    Messages
    986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : juin 2019
    Messages : 986
    Points : 1 504
    Points
    1 504
    Par défaut
    dans le poste #2 je t'explique que je n'es pas trouvé mieux que la solution proposé!

    dans le poste #4 je t'explique que le fait de cliquer sur le lien ouvre inévitablement le fichier ! ça rejoint le poste #2 car c'est la raison pour laquelle je n'es pas réussi à faire mieux car Workbook_SheetFollowHyperlink ce d'éclanche après l'ouverture du fichier! le code que j'ai implémenté ferme le fichier avant de l'ouvre en tan que modèle!

    ta remarque du poste #11 implique de savoir quelle application gère le lien HyperText!

    au poste #13 on vois bien que j'ai oublié
    XLTX !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Case "XLS", "XLSX", "XLSM", "XLT", "XLTM","XLTX"

    pour ce qui concerne
    DOTX la je ne comprends pas c'est ce type de fichier que j'ai utilisé dans mon test!



  15. #15
    Membre régulier
    Homme Profil pro
    Inscrit en
    août 2012
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : août 2012
    Messages : 151
    Points : 72
    Points
    72
    Par défaut
    Bonjour Thumb down,

    Merci pour tes explications et le temps que tu me consacres.

    Tout fonctionne bien pour le XLSX et j'ai compris pourquoi le document Word ne fonctionne pas.
    Il compare w.FullName et Target.Address. Or, dans Fullname j'ai "S:\......" et dans Target.Address j'ai "\\MB10RDS06\C1660$\.....". Donc, il ne passe pas dans le IF.
    Je me suis dit, c'est pas grave, je vais modifier mon lien en "S:\" et le tour est joué ! Et bien non ! Il le retransforme automatiquement en "\\MB10RDS06\C1660$"
    Y a-t-il moyen de contourner cette originalité ? En ignorant les disques ?

    Je te remercie d'avance et te souhaite une belle journée !

    Henri

  16. #16
    Membre expérimenté
    Homme Profil pro
    Retraité
    Inscrit en
    juin 2019
    Messages
    986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : juin 2019
    Messages : 986
    Points : 1 504
    Points
    1 504
    Par défaut
    Bonjour,
    essais comme ça!
    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
    Private Sub Workbook_SheetFollowHyperlink(ByVal Sh As Object, ByVal Target As Hyperlink)
    Dim NameFichier As String: NameFichier = Fichier_Name(Target.Address)
    Select Case Fichier_extension(Target.Address)
        Case "XLS", "XLSX", "XLSM", "XLT", "XLTX", "XLTM"
                    For Each w In Workbooks 'on parcoure tous les fichier ouverts
                    If UCase(w.Name) = NameFichier Then 'Si le fichier ouvert porte la même adresse que le lien ?
                        w.Close False 'on ferme le fichier XLTX sans le sauvegarder
                        Workbooks.Add (Target.Address) 'on ajoute un nouveau fichier en prenant le lien comme modèle!
                    End If
                Next
        Case "DOTX", "DOCX"
            With GetObject(, "WORD.Application")
                .Visible = True
                For Each w In .Documents
                    If UCase(w.Name) = NameFichier Then
                         w.Close False
                        .Documents.Add Target.Address
                    End If
                 Next
            End With
     
     
    End Select
    End Sub
    Public Function Fichier_extension(Fichier)
    With CreateObject("Scripting.FileSystemObject")
        If .FileExists(Fichier) Then Fichier_extension = UCase(.GetExtensionName(Fichier))
    End With
    End Function
    Public Function Fichier_Name(Fichier)
    With CreateObject("Scripting.FileSystemObject")
        If .FileExists(Fichier) Then Fichier_Name = UCase(.GetFileName(Fichier))
    End With
    End Function

  17. #17
    Membre régulier
    Homme Profil pro
    Inscrit en
    août 2012
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : août 2012
    Messages : 151
    Points : 72
    Points
    72
    Par défaut Alléluia !
    Merci ! Tout fonctionne, même les liens vers un modèle de mail !

    Une question : Ce que tu as codé convient bien pour le fichier Excel depuis lequel je dois ouvrir les fichiers dont nous avons parlé mais en fait, cela pourrait servir partout où j'utilise des liens vers d'autres fichiers.
    J'ai essayé de placer la routine dans un fichier .XLAM mais ça fonctionne pas.
    J'ai l'intuition qu'il ne faut pas la placer dans "Thisworkbook" mais ailleurs. Ai-je raison ? Et si oui, dans quel partie ?

    Si ça c'est possible, avec ça la boucle sera bouclée.

    J'ai beaucoup appris, ce que tu as codé conviendra très bien pour l'avenir.
    Je te suis très reconnaissant.

    Henri

  18. #18
    Membre expérimenté
    Homme Profil pro
    Retraité
    Inscrit en
    juin 2019
    Messages
    986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : juin 2019
    Messages : 986
    Points : 1 504
    Points
    1 504
    Par défaut
    en fichier joint un XLAM!
    MyMacroPerso.zip

  19. #19
    Membre régulier
    Homme Profil pro
    Inscrit en
    août 2012
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : août 2012
    Messages : 151
    Points : 72
    Points
    72
    Par défaut
    Cher Thumb down,

    Quel beau travail !
    Si j'avais quelque chose à ajouter ce serait thumb up !
    Encore une fois merci pour le temps consacré et les connaissances partagées.

    Si je peux vous aider, n'hésitez pas à faire appel même si en matière de VBA, je ne pense pas pouvoir vous être d'un grand secours.

    Belle soirée.

    Henri

  20. #20
    Membre expérimenté
    Homme Profil pro
    Retraité
    Inscrit en
    juin 2019
    Messages
    986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : juin 2019
    Messages : 986
    Points : 1 504
    Points
    1 504
    Par défaut
    Ça a été un réel plaisir.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Ouvrir un etat Access 2003 depuis vb6
    Par TheBlackReverand dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 20/12/2006, 12h29
  2. Ouvrir un état crystal report depuis VB6
    Par judefei dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 21/07/2006, 16h52
  3. Réponses: 1
    Dernier message: 02/02/2006, 14h26
  4. Ouvrir une image avec paint depuis un formulaire
    Par gui38 dans le forum Access
    Réponses: 3
    Dernier message: 14/11/2005, 16h40
  5. Ouvrir un fichier MS Project depuis Access
    Par yoyo30 dans le forum Access
    Réponses: 4
    Dernier message: 14/09/2005, 14h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo