XL 2013 Modification en nombre des intitulés des liens hypertexte

Victor21

XLDnaute Barbatruc
Bonjour à tous.

Ceux d'entre vous qui me connaissent savent que je suis une brêle en VBA, et ma demande ne peut à ma connaissance être résolue que par code.
Dans le fichier joint, deux cas, soit colonne B, soit les colonnes D à x.
Je souhaite, tout en conservant les liens hypertexte existants (tous différents) :
- Colonne B, ne conserver que les noms des pays
- Colonnes D à x ( ici, c'est G) ne conserver que les nombres (sous forme de nombres).
Un p'tit coup de mains d'un codeur de passage me serait très utile : 2 800 liens à modifier manuellement, c'est Loooong ;)
D'avance, merci.
 

Pièces jointes

  • Hypertexte.xlsx
    11.5 KB · Affichages: 6
Solution
Bonjour @Victor21,

Heureux de pouvoir te venir (éventuellement) en aide. La macro ci-dessous fait le job sur 'Feuil1' mais tu peux facilement changer pour que cela le fasse sur ActiveSheet (si c'est du latin pour toi, dis le :) )
VB:
Sub ModifierTexteLiens()

    Dim h As Hyperlink  ' le lien hypertexte en cours d'examen
    Dim pos As Integer  ' la position de la parenthèse dans le texte affiché
    Dim txt As String   ' le texte affiché du lien
    With ThisWorkbook.Sheets("Feuil1")
        For Each h In .Hyperlinks
            txt = h.TextToDisplay
            pos = InStr(1, h.TextToDisplay, "(")
            ' parenthèse ouvrante trouvée
            If pos > 0 Then
                ' si le lien est en colonne B (2)...

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour @Victor21,

Heureux de pouvoir te venir (éventuellement) en aide. La macro ci-dessous fait le job sur 'Feuil1' mais tu peux facilement changer pour que cela le fasse sur ActiveSheet (si c'est du latin pour toi, dis le :) )
VB:
Sub ModifierTexteLiens()

    Dim h As Hyperlink  ' le lien hypertexte en cours d'examen
    Dim pos As Integer  ' la position de la parenthèse dans le texte affiché
    Dim txt As String   ' le texte affiché du lien
    With ThisWorkbook.Sheets("Feuil1")
        For Each h In .Hyperlinks
            txt = h.TextToDisplay
            pos = InStr(1, h.TextToDisplay, "(")
            ' parenthèse ouvrante trouvée
            If pos > 0 Then
                ' si le lien est en colonne B (2)
                If h.Range.Column = 2 Then
                    ' préparation du nouveau texte
                    txt = Left(txt, pos - 2)
                Else ' si autre colonne
                    txt = Replace(Replace(Right(txt, Len(txt) - pos), "(", ""), ")", "")
                End If
                ' réinitialisation du texte d'affichage du lien
                h.TextToDisplay = txt
            End If
        Next h
    End With
End Sub

Cordialement
 

Pièces jointes

  • Hypertexte.xlsx
    11.5 KB · Affichages: 8

job75

XLDnaute Barbatruc
Bonjour Patrick,

Plusieurs codes sont possibles, voici une solution :
VB:
Sub TexteLien()
Dim h As Hyperlink, x$, i%
For Each h In [A4].CurrentRegion.Hyperlinks
    x = h.TextToDisplay
    If h.Parent.Column = 2 Then
        For i = 0 To 9
            x = Replace(x, i, "")
        Next i
        x = RTrim(Replace(Replace(x, "()", ""), "-", ""))
    Else
        For i = Len(x) To 1 Step -1
            If Not IsNumeric(Mid(x, i, 1)) Then x = Left(x, i - 1) & Mid(x, i + 1)
        Next i
    End If
    h.TextToDisplay = x
Next h
End Sub
A+
 

Pièces jointes

  • Hypertexte(1).xlsm
    20.1 KB · Affichages: 5

Eric C

XLDnaute Barbatruc
Bonsoir le forum
Bonsoir Victor21, Hasco & job75

Je ne devrais pas le dire mais j'ai une petite préférence pour le code de job75 qui n'efface pas les données d'attachement aux pays (Andorre(Espagnol ou Français)).
@job75 - D'ailleurs à ce propos, et vu mon niveau de Vba, je ne comprends pas comment le distinguo est fait pour les données qui se trouvent entre parenthèses ? J'arrive parfois à me "dépatouiller" mais là je ne comprends rien de rien que ce soit pour la 1ère donnée qui est conservée, la seconde (numérique) qui est supprimée et la 3 ème suppression qui n'est pas entre parenthèses ???? Pourriez-vous, s'il vous plaît, m détailler tout cela ?
D'avance merci et bonne fin de dimanche.
@+ Eric c
 

Hasco

XLDnaute Barbatruc
Repose en paix
Je ne devrais pas le dire mais j'ai une petite préférence pour le code de job75 qui n'efface pas les données d'attachement aux pays (Andorre(Espagnol ou Français)).
Ce n'était pas la demande. De toute façon ces données sont conservées dans l'infobulle du lien
Votre demande est une autre demande.

Je ne devrais pas le dire
Alors ne le dites pas. Surtout pas de cette façon qui pue le non dit.

bonne soirée
 

job75

XLDnaute Barbatruc
Bonjour Eric C,
je ne comprends pas comment le distinguo est fait pour les données qui se trouvent entre parenthèses ?
Contrairement à Hasco je n'utilise pas les parenthèses pour repérer les positions.

Pour la colonne B je supprime tous les chiffres de 0 à 9 ainsi que la paire de parenthèses ().

Pour les autres colonnes je concatène les chiffres.

A+
 

Eric C

XLDnaute Barbatruc
Re le fil

@job : merci pour l'explication, je comprends mieux la façon de faire.
@ Hasco - Désolé de vous avoir froissé, ce n'était pas dans mes intentions et je ne pensais pas que cela eut pu être interprété tel quel.
@+ Eric c
 

Discussions similaires

Statistiques des forums

Discussions
312 211
Messages
2 086 299
Membres
103 173
dernier inscrit
Cerba95