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 :

Tester les liens hypertextes


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 21
    Par défaut Tester les liens hypertextes
    Bonjour,

    je voudrais créer une macro qui vérifierai si les liens hypertexte contenus dans les cellules d'une colonne sont valides.

    Une première macro ajoute les liens hypertextes aux cellules qui contiennent déjà du texte:

    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For j = 1 To n
         ch1 = Sheets("Liste films").Cells(8 + j, 9).Value
         ch2 = Sheets("Liste films").Cells(8 + j, 1).Value
         chlien = ch1 & ch2
         Sheets("Liste films").Cells(8 + j, 1).Select
         Selection.Hyperlinks.Add Anchor:=Selection, Address:=chlien
    Next j

    Pour contrôler les lien hypertextes je me suis servi du code donné sur cette page dans une autre macro en lui disant de colorer en rouge les cellules dont les liens hypertextes ne sont pas valides:

    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub check_hypertexte()
     
    For k = 1 To n
        If VerifHyperlink(Cells(8 + k, 1)) = False Then
           Sheets("Liste films").Cells(8 + k, 1).Interior.Color = vbRed
        End If
    Next k
     
    End Sub

    Le souci est que lorsque j’exécute cette macro, elle me colore des cellules même si le lien hypertexte qu'elles contiennent fonctionne correctement.

    En fait certains liens renvoient à des fichiers présents sur le PC et d'autre vers des fichiers présents sur un disque dur externe et je remarque que le problème a lieu pour les fichiers du PC.

    D'ailleurs lorsque je fais clic droit sur une cellule rouge puis "modifier lien hypertexte", l'adresse du lien contient des "%20" à la place des espaces, ce qui n'est pas le cas des fichiers du disque dur.

    Donc je me dis que l'erreur vient de là mais je ne vois pas comment résoudre le problème.

    Pourriez-vous m'aider s'il vous plait?

    Merci.

  2. #2
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Le problème ne vient sûrement pas des %20 qui remplacent les espaces.
    Car c'est la façon normale de représenter les espaces dans les URL.

    Il faut chercher le problème ailleurs.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 21
    Par défaut
    Merci Docmarti.

    En fait j'ai fait le test avec des fichiers sans espaces, le problème reste le même.

    En fait les cellules sont colorées en rouge des que les liens hypertextes perdent leur couleur bleu, donc a chaque fois que la feuille est modifiée, par exemple après l’exécution d'une autre macro.

    J'ai donc créé une nouvelle fonction VerifHyperlink2 qui renvoi dans une cellule le résultat de "Dir(Cible)" utilisé dans la fonction VerifHyperlink qui teste la validité des liens hypertextes.

    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
    Function VerifHyperlink(Cellule As Range) As Boolean
        Dim Cible As String
     
        'Vérifie si la cellule contient un lien hypertexte
        If Cellule.Hyperlinks.Count = 0 Then
            VerifHyperlink = False
            Exit Function
        End If
     
        'Extrait l'adresse du lien
        Cible = Cellule.Hyperlinks(1).Address
     
        'Vérifie si le fichier existe.
        '(Ne fonctionne pas pour les liens web).
        If Dir(Cible) <> "" And Cible <> "" Then
            VerifHyperlink = True
        Else
            VerifHyperlink = False
        End If
     
     
    End Function
    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
    Function VerifHyperlink2(Cellule As Range) As String
        Dim Cible As String
     
        'Vérifie si la cellule contient un lien hypertexte
        If Cellule.Hyperlinks.Count = 0 Then
            VerifHyperlink2 = False
            Exit Function
        End If
     
        'Extrait l'adresse du lien
        Cible = Cellule.Hyperlinks(1).Address
     
        'Vérifie si le fichier existe.
        '(Ne fonctionne pas pour les liens web).
        If Dir(Cible) <> "" And Cible <> "" Then
            VerifHyperlink2 = Dir(Cible)
            Else
            VerifHyperlink2 = Dir(Cible)
        End If
     
     
    End Function
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For k = 1 To n
        If VerifHyperlink(Cells(1 + k, 1)) = False Then
           Sheets("Liste films").Cells(1 + k, 1).Interior.Color = vbRed
           Sheets("Liste films").Cells(1 + k, 4) = VerifHyperlink2(Cells(1 + k, 1))
        Else
           Sheets("Liste films").Cells(1 + k, 4) = VerifHyperlink2(Cells(1 + k, 1))
        End If
    Next k
    Lorsque les liens sont encore en bleu soulignés, le test VerifHyperlink est positif (cellule non colorée en rouge) et la cellule contient le nom du fichier cible. Par contre quand les liens ne sont plus en bleus , le test VerifHyperlink est négatif (cellule colorée en rouge) et la cellule est vide, ce qui explique le résultat négatif de VerifHyperlink.

    Donc le souci viendrait du fait que même si le lien hypertexte existe et est correcte, le résultat de "Dir(Cible)" est vide.

    Maintenant je ne vois toujours pas comment remédier à ce problème.

  4. #4
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Si les liens ne sont plus en bleu, c'est que les liens n'existent plus.

    La réponse qui me vient, c'est pourquoi tu permets à cette macro de remplacer le contenu des cellules qui contiennent des liens hypertextes que tu sembles vouloir conserver. C'est au niveau de cette macro qu'il faut agir. Ou bien, si ce n'est pas possible, créer une nouvelle macro qui recrée les liens hypertextes.

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si j'ai bien compris tes liens hypertextes font référence à des fichiers se trouvant sur un disque.
    Il est donc inutile d'utiliser l'adresse du lien comme tu le fais dans cette instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cible = Cellule.Hyperlinks(1).Address
    un simple Cible = Cellule.Value ou Cible = Cellule (la propriété Value étant la propriété par défaut) suffit.
    Ce test permet de visualiser que nous avons bien l'adresse complète.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim sht As Worksheet, rng As Range
    Set sht = ThisWorkbook.Worksheets("Feuil1")
    For Each rng In sht.Range("B3:B8")
     If Len(rng) Then Debug.Print Dir(rng.Hyperlinks(1).Address)
    Next
    Pour tester l'existence d'un fichier nous pouvons utiliser une fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function IsFileExist(FileName As String) As Boolean
     IsFileExist = (Dir(FileName) <> "")
    End Function
    Donc pour colorer en rouge les liens non valides
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Test()
     Dim sht As Worksheet, rng As Range
     Set sht = ThisWorkbook.Worksheets("Feuil1")
     For Each rng In sht.Range("B3:B8")
      With rng
       If Len(.Value) Then
        If IsFileExist(.Value) Then .Interior.Color = vbWhite Else .Interior.Color = vbRed
       End If
      End With
     Next
    End Sub
    Et si l'on veut s'affranchir de l'appel à la fonction IsFileExist, on remplace la ligne 7 par celle-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If (Dir(.Value) <> "") Then .Interior.Color = vbWhite Else .Interior.Color = vbRed
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 21
    Par défaut
    Citation Envoyé par Docmarti Voir le message
    Si les liens ne sont plus en bleu, c'est que les liens n'existent plus.

    La réponse qui me vient, c'est pourquoi tu permets à cette macro de remplacer le contenu des cellules qui contiennent des liens hypertextes que tu sembles vouloir conserver. C'est au niveau de cette macro qu'il faut agir. Ou bien, si ce n'est pas possible, créer une nouvelle macro qui recrée les liens hypertextes.
    Non c'est tout l'inverse, ce que je voudrais c'est ne plus toucher aux cellules qui contiennent un lien hypertexte et je voudrais éviter de devoir recréer a chaque fois les liens hypertexte pour un gain de temps. Effectivement si je test les liens, immédiatement après avoir créé les liens (donc sans exécuter d'autres macro entre temps) le test fonctionne correctement.


    Merci Philippe Tulliez, j'ai testé les codes que tu m'as donné en les adaptant à mon problème:

    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
    Sub control()
     
    Dim sht As Worksheet, rng As Range
    Set sht = ThisWorkbook.Worksheets("Liste films")
    For Each rng In sht.Range("A2:A4")
        With rng
             If Len(.Value) Then
                If (Dir(.Value) <> "") Then
                    .Interior.Color = vbWhite
                Else: .Interior.Color = vbRed
                End If
             End If
        End With
    Next
     
    End Sub

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub visualiser()
     
    Dim sht As Worksheet, rng As Range
    Set sht = ThisWorkbook.Worksheets("Liste films")
    For Each rng In sht.Range("A2:A4")
     If Len(rng) Then Debug.Print Dir(rng.Hyperlinks(1).Address)
    Next
     
    End Sub

    Mais le problème est le même, même les lien hypertextes valides sont colorés, et cette fois même si je recrée les liens juste avant. Et le test "visualiser" ne renvoi rien.

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    C'est très curieux car je teste toujours les codes avant de les publier et chez moi cela s'est très bien déroulé.
    Tes liens hypertextes sont bien des fichiers se trouvant sur ton disque dur ?
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  8. #8
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Citation Envoyé par youbewt Voir le message
    Non c'est tout l'inverse, ce que je voudrais c'est ne plus toucher aux cellules qui contiennent un lien hypertexte et je voudrais éviter de devoir recréer a chaque fois les liens hypertexte pour un gain de temps. Effectivement si je test les liens, immédiatement après avoir créé les liens (donc sans exécuter d'autres macro entre temps) le test fonctionne correctement.

    Donc il faut bien identifier la macro qui crée le problème et qui t'oblige à recréer les liens hypertextes. Et envoie-nous le code de cette macro qu'il faut modifier, améliorer, adapter à tes besoins.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. afficher les liens hypertextes
    Par blackcrow1981 dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 23/01/2007, 23h23
  2. [Excel] Tester un lien hypertexte
    Par wanou44 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 19/09/2006, 09h16
  3. Réponses: 2
    Dernier message: 04/04/2006, 16h14
  4. [RegEx] extraire les liens hypertexte d'une page web
    Par lalama dans le forum Langage
    Réponses: 1
    Dernier message: 22/03/2006, 10h43
  5. aide sur les lien Hypertext
    Par kantbill dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 26/05/2005, 12h12

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