Partage
  • Partager sur Facebook
  • Partager sur Twitter

Excel-Lien hypertexte ne redirige pas correctement

[Excel] Lien avec authentification

    19 janvier 2021 à 10:30:27

    Bonjour à tous, 

    J'ai un problème de lien hypertexte sur Excel. En effet, quand je clique sur mon lien que je dépose sur une cellule, mon navigateur par défaut s'ouvre avec le 1er lien d'authentification, je rentre mes identifiants, puis il m'affiche la page d'accueil et non la page que j'ai demandé. 

    Si je refais la même manip, la même chose se produit et il me redirige vers le la page d'authentification (cette fois la page ne s'affiche pas, vu que je me suis déjà authentifié) 

    Pour tester, j'ai collé le lien directement sur mon navigateur (par défaut) et ça marche ! j'ai bien la bonne page, sur Outlook aussi, la page est bien redirigée. 

    Par contre, j'ai fait le même test sur Word, et j'ai le même problème qu'Excel, la page est mal redirigée. 

     Quel est le problème sur Excel ? Y'a t-il une formule ou un code VBA à rajouter au lien hypertexte d'Excel pour que ça marche ?


    Je vous remercie

    • Partager sur Facebook
    • Partager sur Twitter
      19 janvier 2021 à 17:39:02

      Oui je comprend, je te remercie @umfred pour ta réponse ! 

      Donc si je fais ça, tout ceux à qui j'envoi mon fichier Excel devront faire cette manip pour pouvoir ouvrir mes liens ! c'est vraiment dommage. 

      • Partager sur Facebook
      • Partager sur Twitter
        19 janvier 2021 à 19:11:00

        Déjà vérifier que ça fonctionne en ajoutant la clé.

        Ensuite, une possibilité (je viens d'y penser) serait de lancer via macro une commande shellExecute ou équivalente avec l'url en question.

        ça a l'air simple avec WScript.Shell (exemple trouvé sur https://stackoverflow.com/questions/1374433/shellexecuteex-in-vba )

        Sub ShellAndWait(pathFile As String)
            With CreateObject("WScript.Shell")
                .Run pathFile, 1, True
            End With
        End Sub
        
        Sub test()
            ShellAndWait "https://www.google.fr"
        End Sub
        



        -
        Edité par umfred 19 janvier 2021 à 19:11:09

        • Partager sur Facebook
        • Partager sur Twitter
          20 janvier 2021 à 14:36:19

          Bonjour, 

          Je te remercie pour ta solution VBA @umfred ! 

          La première ne marcherait pas, vu que je n'ai pas les autorisations admin sur mon PC. 

          La solution VBA marche très bien en écrivant mon lien en dur comme tu l'a fait sur ton exemple, reste plus qu'a l'appliquer sur toutes les cellules contenant mes liens (plusieurs lignes sur une même colonne "A"), ce contenu est le résultat d'une concaténation.

          Je n'ai jamais fait de VBA, mais je pense que je vais m'en sortir ! je partagerais ma solution si j'y arrive ! 

          Encore merci 

          -
          Edité par Elinux 20 janvier 2021 à 14:37:28

          • Partager sur Facebook
          • Partager sur Twitter
            20 janvier 2021 à 15:46:38

            dans l'évènement worksheet_selectionchange(), tester si la target est dans la plage de tes cellules, et dans ce cas-là, appeler ShellAndWait avec la valeur de la cellule. Le code suivant peut être un point de départ (si il ne fait le boulot), juste changer le range("A1:A50") avec la bonne plage je pense

            sub worksheet_selectionchange(Target as range)
                if not(intersect(target,range("A1:A50") is nothing then
                    ShellAndWait cells(target.row,1).value 'si la cellule Ax contient l'url à charger
                end if
            end sub

            -
            Edité par umfred 20 janvier 2021 à 15:46:53

            • Partager sur Facebook
            • Partager sur Twitter
              21 janvier 2021 à 15:22:36

              Bonjour @umfred 

              Maintenant je suis complètement bloqué ! je n'ai pas trop compris comment partir du 2ème code, alors je suis reparti au 1er et la surprise ! ça ne marche plus ??, voici une capture de l'erreur affichée :

               Une idée sur l'erreur ? problème de compilation ? 

              Merci

              -
              Edité par Elinux 21 janvier 2021 à 15:24:08

              • Partager sur Facebook
              • Partager sur Twitter
                21 janvier 2021 à 16:35:13

                étrange en effet. 

                ferme et rouvre le fichier pour retester; sinon supprime le code, enregistre le fichier, ferme, ouvre et remet le code.

                à tout hasard, est-ce que tous les "l" sont des "l" et pas des "1" ? (le seul "1" c'est celui juste avant True)

                Pour revenir sur mon dernier code (worksheet_selectionchange qui se produit au niveau de la feuille), l'idée était que quand l'utilisateur sélectionne une cellule de la zone qui possède l'adresse web, on lance le lien avec la fonction ShellAndWait que l'on a écrit (mais a priori, si le contenu est un lien hypertexte, la page s'ouvrira en parallèle de la fonction.

                • Partager sur Facebook
                • Partager sur Twitter
                  22 janvier 2021 à 15:43:35

                  Bonjour @umfred 

                  Je commence à faire du VBA, donc ce n'est pas évident, mais j'ai réussi à faire quelque chose en repartant du 1er code : 

                  Sub ShellAndWait(pathFile As String)
                      With CreateObject("WScript.Shell")
                          .Run pathFile, 1, True
                      End With
                  End Sub
                   
                  Sub test()
                      Result = Range("E5").Value
                      ShellAndWait (Result)
                  End Sub

                  ça me permet déjà d'ouvrir le lien présent dans E5 et ça marche ! 

                  Moi je veux appliquer cette macro sur n'importe quelle cellule d'une même colonne sur la quelle je clique sur celle-ci, et mettre le contenu de la cellule cliquée dans "Result = Range(Contenu de cellule de la colonne E sur laquelle j'ai cliqué).Value" 

                  Mais je n'arrive pas trouver comment faire ! 

                  • Partager sur Facebook
                  • Partager sur Twitter
                    22 janvier 2021 à 17:26:39

                    c'est ce que mon code au dessus est censé faire (en fait, c'est au changement de sélection, c'est-à-dire quand on passe d'une cellule à une autre ou que l'on sélectionne plusieurs cellules à la fois)

                    j'avais oublié une parenthèse et ce code se met dans page macro de la feuille concernée (avec le code de ShellAndWait).le code teste si on est dans la plage A1 à A50, sinon on ne fait rien

                    Sub worksheet_selectionchange(Target as range)
                        if not(intersect(target,range("A1:A50") is nothing) then
                            ShellAndWait cells(target.row,1).value 'si la cellule Ax contient l'url à charger
                        end if
                    end sub


                    ou alors, dans ton code, remplace Range("E5") par Selection, mais il faut lancer la macro test manuellement depuis le menu macro 

                    ou si tu préfères, encore, ça peut-être quand l'utilisateur fait un double clic (j' ai mis en commentaire mon test de plage, et ajouter une gestion d'erreur basique (si erreur, on sort) dans ShellAndWait). Donc quand l'utilisateur double clic sur une cellule, on exécute ShellAndWait avec le contenu de la cellule, et le Cancel=True permet de ne pas valider le double clic (qui met en mode édition la cellule)

                    Sub ShellAndWait(pathFile As String)
                        On Error GoTo GestError
                        With CreateObject("WScript.Shell")
                            .Run pathFile, 1, True
                        End With
                    GestError:
                    End Sub
                    
                    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
                        'If Not (Intersect(Target, Range("A1:A50")) Is Nothing) Then
                            ShellAndWait Cells(Target.Row, Target.Column).Value 'si la cellule Ax contient l'url à charger
                        'End If
                        Cancel = True
                    End Sub
                    



                    • Partager sur Facebook
                    • Partager sur Twitter
                      25 janvier 2021 à 15:04:38

                      Bonjour umfred, un grand merci pour toutes vos réponses ! 

                      Mais avant d'essayer votre solution, je tombe sur un autre problème ! 

                      Mon test qui marchait s'est effectué sur une cellule contenant un lien complet (exemple : https://openclassrooms.com/forum/sujet/excel-lien-hypertexte-ne-redirige-pas-correctement#message-93984635

                      Par contre, ma cellule (toute la colonne) est un résultat d'une concaténation pour avoir un lien hypertexte (exemple : formule de ma cellule =LIEN_HYPERTEXTE("https://openclassrooms.com/forum/sujet"&C2;"lien") avec le contenu de C2 = /excel-lien-hypertexte-ne-redirige-pas-correctement#message-93984635

                      Ce qui fait que quand j'exécute mon code VBA, il essaye de se connecter à (=LIEN_HYPERTEXTE("https://openclassrooms.com/forum/sujet"&C2;"lien") au lieu de https://openclassrooms.com/forum/sujet/excel-lien-hypertexte-ne-redirige-pas-correctement#message-93984635 qui est le résultat de la concaténation ! 

                      Je pense à une solution, mais je n'arrive pas à la réaliser. Ma solution est de mettre la formule de concaténation du lien hypertexte dans le code VBA et puis utiliser le résultat comme variable qu'utilisera ma fonction ShellAndWait 

                      • Partager sur Facebook
                      • Partager sur Twitter
                        25 janvier 2021 à 15:36:12

                        en fait, il va chercher à lancer "lien" (le texte affiché dans la cellule)(range("C1").value.

                        Il va falloir traiter la chaine qui donne l'url dans la formule la cellule et l'évaluer.

                            Dim laFormule As String
                            Dim url As String
                            'on récupère la formule
                            laFormule = Range("c1").Formula
                            ' on extrait le 1er champ de la fonction
                            ' c'est-à-dire le texte compris en la 1ère "(" et la 1ère ","
                            url = VBA.Mid(laFormule, InStr(1, laFormule, "(") + 1, InStr(1, laFormule, ",") - InStr(1, laFormule, "(") - 1)
                            'on affiche pour vérifier
                            Debug.Print url
                            'on évalue le résultat
                            url = Evaluate(url)
                            'on affiche le résultat
                            Debug.Print (url)
                            'on peut alors passer url à notre fonction



                        • Partager sur Facebook
                        • Partager sur Twitter
                          25 janvier 2021 à 16:25:09

                          L'exécution de ce code m'affiche cette erreur : 

                          Avec : 

                          • Partager sur Facebook
                          • Partager sur Twitter
                            26 janvier 2021 à 13:55:25

                            ah oui, il mettre se code dans un sub (je ne l'avais pas mis, ni explicité, vu que ça me paraissait évident)

                            il faut mettre ce code dans sub test()  par exemple ou une autre procédure (sub), ci-dessous le code de la procédure avec mon code précédent et l'appel à ShellAndWait que l'on avait écrit

                            Sub test()
                                Dim laFormule As String
                                Dim url As String
                                'on récupère la formule
                                laFormule = Range("c1").Formula
                                ' on extrait le 1er champ de la fonction
                                ' c'est-à-dire le texte compris en la 1ère "(" et la 1ère ","
                                url = VBA.Mid(laFormule, InStr(1, laFormule, "(") + 1, InStr(1, laFormule, ",") - InStr(1, laFormule, "(") - 1)
                                'on affiche pour vérifier
                                Debug.Print url
                                'on évalue le résultat
                                url = Evaluate(url)
                                'on affiche le résultat
                                Debug.Print (url)
                                'on peut alors passer url à notre fonction
                                ShellAndWait url
                            End Sub



                            • Partager sur Facebook
                            • Partager sur Twitter

                            Excel-Lien hypertexte ne redirige pas correctement

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                            • Editeur
                            • Markdown