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 :

Récupération et correction de liens hypertexte


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Septembre 2014
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2014
    Messages : 32
    Points : 18
    Points
    18
    Par défaut Récupération et correction de liens hypertexte
    Bonjour,

    Pour ma prestation, j'utilise un fichier "Chrono" qui contient l'ensemble des documents émis ainsi qu'un lien hypertexte vers le répertoire les contenant sur le serveur de mon client (adresse du type \\serveur\sous-serveur\arbo...).

    Après avoir perdu plusieurs fois les liens hypertexte (remplacement du début de l'adresse réseau par une adresse du type C:\users\...), j'ai décidé de mettre en place une macro qui viendra vérifier et corriger les liens défectueux.

    Pour ce faire, j'ai listé l'ensemble des répertoires peuplés par mes documents (dans le tableau de l'onglet "Liste chrono") et créé, dans l'onglet "Liens" une liste du type :
    Libellé du dossier /// Adresse du dossier.

    En effet, par souci de lisibilité, le dossier \\serveur\sous-serveur\VV - dossier 1\WW - dossier 2\XX - dossier 3\YY - dossier 4\ZZ - dossier contenant le document (adresse contenue dans la colonne "Adresse du dossier" est abrégé comme suit VV \ WW \ XX \ YY \ ZZ - dossier contenant le document (information dans "Libellé du dossier").

    J'ai mis une validation des données pour être certain que tous les libellés qui seront renseignés par mes collègues et moi soient déjà dans la liste que j'ai établie quitte à ce que, le cas échéant, j'ajoute de nouvelles lignes à cette liste.

    J'ai ensuite créé la macro qui compare la valeur de l'attribut Hyperlink(1).Adress à la colonne "Adresse du dossier" de ma liste et, lorsqu'elles différent, vient remplacer la première.

    Or, lorsque je déroule la macro, une erreur apparaît : "Erreur d'exécution '9': L'indice n'appartient pas à la sélection." et je ne comprends pas pourquoi.

    Ci-dessous la macro utilisée.

    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
    35
    36
    Sub MAJ_HyperText()
    '
    ' MAJ_HyperText Macro
    '
     
    Dim NbDocs, NbRef As Integer
    Dim Libellé, Chemin As String
     
    NbDocs = Sheets("Liste chrono").Range("D1048576").End(xlUp).Row
    NbRef = Sheets("Liens").Range("A1048576").End(xlUp).Row
     
    For i = 3 To NbDocs
     
    If Sheets("Liste chrono").Cells(i, 12).Value = "*" Or Sheets("Liste chrono").Cells(i, 12).Value = "?" Or IsEmpty(Sheets("Liste chrono").Cells(i, 12)) = True Then
     
    Else
     
        Libellé = Sheets("Liste chrono").Cells(i, 12).Text
        Chemin = Application.VLookup(Sheets("Liste chrono").Cells(i, 12), Sheets("Liens").Range("A1:B" & NbRef), 2, False)
     
        If Cells(i, 12).Hyperlinks(1).Address <> Application.VLookup(Sheets("Liste chrono").Cells(i, 12), Sheets("Liens").Range("A1:B" & NbRef), 2, False) Then
     
            Sheets("Liste chrono").Hyperlinks.Add Anchor:=Cells(i, 12), Address:=Chemin, TextToDisplay:=Libellé
     
        Else
     
        End If
     
    End If
     
    Next
     
    MsgBox ("Fin de la mise à jour des liens hypertexte")
     
    '
    End Sub
    Cela plante au niveau de la ligne 21 (formule : "If Cells(i, 12).Hyperlinks(1).Address <> Application.VLookup(Sheets("Liste chrono").Cells(i, 12), Sheets("Liens").Range("A1:B" & NbRef), 2, False) Then"). La ligne du talbeau qui correspond (i = 24) contient le même type de données que les 21 précédentes (les 2 premières lignes du tableau correspondent à l'en-tête du tableau). Du coup, je sèche ! Y aurait-il une bonne âme pour m'indiquer mon erreur ?

    D'avance, merci. Yann.

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonsoir,

    Quelle feuille?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Quelle Feuille? Cells(i, 12).Hyperlinks(1).Address <> Application.VLookup(Sheets("Liste chrono").Cells(i, 12), Sheets("Liens").Range("A1:B" & NbRef), 2, False) Then
    Cdlt

  3. #3
    Membre à l'essai
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Septembre 2014
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2014
    Messages : 32
    Points : 18
    Points
    18
    Par défaut
    Merci pour cette première réponse, j'ai modifié le code par :

    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
    35
    36
    Sub MAJ_HyperText()
    '
    ' MAJ_HyperText Macro
    '
    
    Dim NbDocs, NbRef As Integer
    Dim Libellé, Chemin As String
    
    NbDocs = Sheets("Liste chrono").Range("D1048576").End(xlUp).Row
    NbRef = Sheets("Liens").Range("A1048576").End(xlUp).Row
    
    For i = 3 To NbDocs
    
    If Sheets("Liste chrono").Cells(i, 12).Value = "*" Or Sheets("Liste chrono").Cells(i, 12).Value = "?" Or IsEmpty(Sheets("Liste chrono").Cells(i, 12)) = True Then
    
    Else
    
        Libellé = Sheets("Liste chrono").Cells(i, 12).Text
        Chemin = Application.VLookup(Sheets("Liste chrono").Cells(i, 12), Sheets("Liens").Range("A1:B" & NbRef), 2, False)
    
        If Sheets("Liste chrono").Cells(i, 12).Hyperlinks(1).Address <> Application.VLookup(Sheets("Liste chrono").Cells(i, 12), Sheets("Liens").Range("A1:B" & NbRef), 2, False) Then
    
            Sheets("Liste chrono").Hyperlinks.Add Anchor:=Cells(i, 12), Address:=Chemin, TextToDisplay:=Libellé
    
        Else
    
        End If
    
    End If
    
    Next
    
    MsgBox ("Fin de la mise à jour des liens hypertexte")
    
    '
    End Sub
    Mais cela plante toujours au niveau de la ligne 21 (formule : If Sheets("Liste chrono").Cells(i, 12).Hyperlinks(1).Address <> Application.VLookup(Sheets("Liste chrono").Cells(i, 12), Sheets("Liens").Range("A1:B" & NbRef), 2, False) Then).
    La ligne du tableau qui correspond (i = 24) contient le même type de données que les 21 précédentes (les 2 premières lignes du tableau correspondent à l'en-tête du tableau).

    Merci encore. Yann.

  4. #4
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Que voulez-vous tester: l'adresse de la cellule , son contenu?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Sheets("Liste chrono").Cells(i, 12).Hyperlinks(1).Address 
    ceci n'est-il pas suffisant?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Sheets("Liste chrono").Cells(i, 12) <> Application.VLookup(Sheets("Liste chrono").Cells(i, 12), Sheets("Liens").Range("A1:B" & NbRef), 2, False) Then

  5. #5
    Membre à l'essai
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Septembre 2014
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2014
    Messages : 32
    Points : 18
    Points
    18
    Par défaut
    Je veux que la macro compare l'adresse pointée par le lien HT (attribut Address) avec l'adresse qui correspond au texte inscrit (attribut TextToDisplay) dans la cellule et le remplace si c'est différent.

    En effet, fréquemment, Excel remplace nos adresses (du type \\serveur\....) par des adresses vers nos répertoires personnels (du type C:\users\...\temp\...).

    Le contenu de la cellule est bloqué par une validation des données; inutile de s'y intéresser de près !

Discussions similaires

  1. [FLASH 5] Comment créer un lien hypertexte
    Par ajit dans le forum Flash
    Réponses: 4
    Dernier message: 30/03/2006, 12h26
  2. [FLASH MX] Liens hypertext pour naviguer dans ma page
    Par marie64dk dans le forum Flash
    Réponses: 13
    Dernier message: 10/08/2004, 16h17
  3. [Lien hypertexte]Mettre un lien dans un JTextPane
    Par Pill_S dans le forum Composants
    Réponses: 8
    Dernier message: 23/05/2004, 19h20
  4. lien hypertexte dans une anim flash
    Par vedder dans le forum Flash
    Réponses: 17
    Dernier message: 14/01/2004, 14h11
  5. Liens Hypertexte simple comme en HTML ?!
    Par oazar dans le forum Flash
    Réponses: 3
    Dernier message: 17/10/2003, 00h25

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