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 :

Changement de tous les liens en un click [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2013
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Janvier 2013
    Messages : 149
    Points : 63
    Points
    63
    Par défaut
    Bonjour,

    Je dispose d'un fichier EXCEL contenant un grand nombre de classeurs.
    Chaque classeur contient un nom different.

    Au sein de chaque classeur, j'ai beaucoup de liens hypertextes qui renvoient vers telle et telle cellule de maniere identique.

    La structure de chaque classeur est strictement la meme. Seul le contenu change.

    De ce fait, a chaque fois que je duplique un classeur, je dois y mettre a jour tous les liens a la main, c'est extremement lent. Existe t il une solution pour associer une action de changement des liens en cliquant sur un boutton ?

    Toutefois, certains liens pointent vers des liens externes au classeur et par consequent je ne souhaiterai pas y toucher. Seuls les liens internes m'interessent.

    (Desole pour les accents je suis a l'etranger).

    Auriez vous une idee a ce sujet ?

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Tu peu faire une recherche/remplace ... ancien non fichier par nouveau nom..

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2013
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Janvier 2013
    Messages : 149
    Points : 63
    Points
    63
    Par défaut
    En fait, je voudrais bien, mais pour changer les liens existants dans ma page, je dois editer chaque lien l'un apres l'autre...

    Exemple :

    Feuille1 contient 3 liens vers :
    Feuille1A23
    Feuille1A24
    Feuille1A25

    Je duplique la Feuille1 et je dois l'appeler Feuille2, du coup, pour que mes liens internes dans Feuille2 marchent, je dois les renommer en :
    Feuille2A23
    Feuille2A24
    Feuille2A25

    Et tout ca je dois le faire a la main... Via la boite de dialogue de creation de lien hypertexte... Imaginez la galere car j'ai 30 liens...

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    Tu sauve la feuille1 sous le nom feuille2 puis menu rechercher feuille1 remplacer par feuille2

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2013
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Janvier 2013
    Messages : 149
    Points : 63
    Points
    63
    Par défaut
    Bonjour,

    Désolé mais je ne vois pas trop où vous voulez en venir...

    Mon fichier "Base de donnée.xls" contient environ 30 feuilles ! De 1 à 30.
    Dans chaque feuille j'ai environ 30 liens internes...

    Lorsque je duplique l'une de mes 30 feuilles, par exemple Feuille31, les liens internes restent et pointent vers la feuille que j'ai dupliqué. Ils ne se mettent pas à jour et ne pointent pas vers la feuille nouvellement créée.

    Du coup, je fais clique droit sur chacun des liens et je les modifie à la main, en changeant juste le nom avant le lien interne de la cellule : nomAchangerA23

    Pourriez-vous m'en dire davantage sur la fonction recherche dont vous parlez ? Parce que je ne vois pas comment elle peut m'aider à mettre à jour les liens...

    S'il vous plait quelqu'un aurait une idée à ce sujet ?

  6. #6
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    For Each h In ActiveSheet.Hyperlinks
     
     ancienTextToDisplay = h.TextToDisplay
     ancienSubAdress = h.SubAddress
     '.....  
     
     h.TextToDisplay = NouveauTextToDisplay
     h.SubAddress = NouveauSubAdress
     Next
    Cordialement

    Docmarti.

  7. #7
    Membre du Club
    Inscrit en
    Janvier 2013
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Janvier 2013
    Messages : 149
    Points : 63
    Points
    63
    Par défaut
    Bonjour,

    Merci pour le mocreau de code mais comment fonctionne-t-il ?
    Pourriez-vous m'expliquer si vous avez un instant ?

    Merci mile fois !

  8. #8
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Il faut l'adapter à tes besoins. L'idéal serait, si j'ai bien compris, une procédure (dans un Module) qui demande quel était l'ancien nom de la feuille, puis qui remplace dans tous les hyperliens sur cette feuille, l'ancien nom de la feuille par le nom actuel.

    Ou dois-tu changer en même temps les noms de toutes les feuilles ? Si oui, qu'est-ce qui change dans le nom des feuilles ?

    Réflexion faite, ce sont les hyperliens d'une seule feuille que tu veux modifier.

    Voici un code qui change les liens de la feuille active seulement, après avoir demandé le nom qu'il faut changer et par quoi il faut le remplacer.

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    Sub ChangerLesliensVersLaFeuilleActive()
     
     If ActiveSheet.Hyperlinks.Count < 1 Then Exit Sub
     
     For i = 1 To ActiveSheet.Hyperlinks.Count
     
      ancienSubAdress = ActiveSheet.Hyperlinks(i).SubAddress
      If ancienSubAdress <> "" Then
     
       b = InStr(ancienSubAdress, "!")
     
       If b > 0 Then
        ancienNomDeLaFeuille = Mid(ancienSubAdress, 1, b - 1)
        Exit For
       End If
     
      End If
     Next
     
     ancienNomDeLaFeuille = InputBox("Veuillez entrer l<ancien nom de la feuille :", "", ancienNomDeLaFeuille)
     
     NouveauNomDeLaFeuille = InputBox("Veuillez entrer le nouveau nom par lequel remplacer l'ancien nom de feuille dans les hyperliens  :", "", ActiveSheet.Name)
     
     If ancienNomDeLaFeuille = "" Or NouveauNomDeLaFeuille = "" Then Exit Sub
     If ancienNomDeLaFeuille = NouveauNomDeLaFeuille Then Exit Sub
     
     ancienNomDeLaFeuille = ancienNomDeLaFeuille & "!"
     NouveauNomDeLaFeuille = NouveauNomDeLaFeuille & "!"
     
     For Each h In ActiveSheet.Hyperlinks
     
      ''ancienTextToDisplay = h.TextToDisplay
      ancienSubAdress = h.SubAddress
      If ancienSubAdress <> "" Then
       b = InStr(UCase(h.SubAddress), UCase(ancienNomDeLaFeuille))
       If b > 0 Then
        If InStr(UCase(h.SubAddress), UCase(ancienNomDeLaFeuille)) = 1 Then
         NouveauSubAdress = NouveauNomDeLaFeuille & Mid(ancienSubAdress, b + Len(ancienNomDeLaFeuille))
         h.SubAddress = NouveauSubAdress
        End If
       End If
      End If
     Next
     
    End Sub
    Cordialement

    Docmarti.

  9. #9
    Membre du Club
    Inscrit en
    Janvier 2013
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Janvier 2013
    Messages : 149
    Points : 63
    Points
    63
    Par défaut
    Bonjour,

    Merci pour votre temps ! C'est exactement le fonctionnement qu'il me faudrait.

    J'ai testé le code, il fonctionne à merveille ! Mais, uniquement sur des noms de feuilles "entiers" dès qu'il y a un nom composé "Monsieur NOM", le fait d'utiliser l'espace me renvoie un "référence non valide" lorsque je clique sur le bouton qui appelle le code dans la feuille active.

    Il se trouve que toutes mes feuilles disposent d'un suffixe + NOM.
    Avez-vous une idée pour corriger ceci je vous prie ?

    Merci !

  10. #10
    Membre émérite
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Points : 2 684
    Points
    2 684
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NouveauNomDeLaFeuille = InputBox("Veuillez entrer le nouveau nom par lequel remplacer l'ancien nom de feuille dans les hyperliens  :", "", "'" & ActiveSheet.Name & "'")
    Cordialement

    Docmarti.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 13/11/2014, 12h08
  2. [RegEx] Récupérer tous les liens d'une page
    Par micatmidog dans le forum Langage
    Réponses: 13
    Dernier message: 03/11/2006, 01h37
  3. [Sybase 12.5]Trouver tous les liens d'une clé
    Par Neo41 dans le forum Sybase
    Réponses: 1
    Dernier message: 12/04/2006, 11h37
  4. [RegEx] récupérer tous les liens d'une page
    Par italiasky dans le forum Langage
    Réponses: 15
    Dernier message: 08/04/2006, 18h55
  5. [TWebBrowser] Comment trouver tous les liens dans une page ?
    Par xenos dans le forum Composants VCL
    Réponses: 1
    Dernier message: 15/01/2006, 23h36

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