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 :

Concaténer deux cellules en vue de créer une cellule hyperlink


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Hobby
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hobby

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Par défaut Concaténer deux cellules en vue de créer une cellule hyperlink
    Bonjour à tous,

    si je sais extraire les valeurs d'une cellule hyperlink, je suis, après des heures de recherches et autant d'essais infructueux, incapable réaliser l'opération inverse.

    Dans la pratique, mon tableau Excel comporte 3 colonnes :

    A - Marque
    B - Modele
    C - Lien_Site

    Il s'agit d'un exemple. Pour des raisons de confidentialité, je ne peux communiquer le contenu réel.

    Résultat souhaité :

    B --> cellule hyperlink avec texte de B et lien de C.

    A tout hasard, j'ai bidouillé ma macro d'extraction en la modifiant comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub concatenation
    Dim Cell As range
    On Error Resume Next
     
    'Cellule Modele
    For Each Cell In range("B1:B" & range("B65536").End(xlUp).Row)
     
    Cell.Hyperlinks(1).Address = Cell.Offset(0, 0)
    Cell.Hyperlinks(2).Address = Cell.Offset(0, 1)
     
    Next Cell
     
    End Sub
    Bien entendu, cela ne fonctionne pas.

    J'ai besoin d'un coup de main, car je ne me vois pas concaténer 4000 entrées manuellement.

    Merci d'avance de toute aide.


    Cordialement
    Pascal

  2. #2
    Membre éprouvé
    Homme Profil pro
    Comptable
    Inscrit en
    Novembre 2018
    Messages
    100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Comptable

    Informations forums :
    Inscription : Novembre 2018
    Messages : 100
    Par défaut
    Bonjour,

    Je comprend pas vraiment ce que vous voulez faire. Vous souhaitez crée les liens hypertextes dans B à partir de l'info dans C ?

    Avec ce code vous devriez pouvoir faire cela

    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
    Sub concatenation()
        Dim Cell As Range
        On Error Resume Next
     
        With Sheet2
     
            For Each Cell In .Range("B1:B" & Range("B65536").End(xlUp).Row)
     
                .Hyperlinks.Add Cell, Cell.Offset(0, 1), , , Cell.Value
     
            Next Cell
     
        End With
     
    End Sub
    A+

    John

  3. #3
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,

    Si j'ai bien compris, le but est de garder le texte qu'il y a dans la colonne B et ajouter un lien hypertexte, dont l'adresse se situe en colonne C.
    J'ai fait un rapide essai avec l'enregistreur de macro. Ceci permet de mettre un lien hypertexte sur la cellule B4 sans modifier la valeur de cette cellule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Hyperlinks.Add Anchor:=Range("B4"), Address:="C:\le chemin vers mon fichier"
    A adapter à ton code

    Pour info, j'ai fait le test pour savoir comment modifier le texte à afficher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="C:\le chemin vers mon fichier", TextToDisplay:="un texte"
    C'est la propriété TextToDisplay qui permet de faire cela. Si tu n'y mets pas de texte, cela garde le texte initial de la cellule.

  4. #4
    Membre confirmé
    Homme Profil pro
    Hobby
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hobby

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Par défaut
    Bonjour à tous,

    pris par d'autres occupations, je n'ai pas eu le temps de consulter les réponses à mon appel d'aide avant aujourd'hui. Merci déjà de vos réponses.

    Citation Envoyé par riaolle
    Si j'ai bien compris, le but est de garder le texte qu'il y a dans la colonne B et ajouter un lien hypertexte, dont l'adresse se situe en colonne C.
    C'est exactement ça.

    Dans cet exemple de travail, j'aurais en cellule A1 la marque du constructeur.
    En B1, le modèle.
    En C1, un lien vers le site du constructeur qui pointe sur ce modèle.

    @John
    Merci pour le code. Malheureusement, il ne fonctionne pas. Il va falloir que je fasse différents essais, mais pourquoi "With Sheet2" ?

    @riaolle
    Avant de me lancer dans du code VBA, j'utilise systématiquement l'enregistreur de macro. Cela peut donner une bonne base à développer éventuellement.

    Là où je bloque, c'est justement qu'en utilisant cet éditeur, je suis obligé de mettre du texte, alors que le lien change à chaque ligne. Avec près de 4000 enregistrements, c'est un travail de titan.

    Je vais tester votre solution et vous tiendrai au courant.

    En tout merci encore et désolé de ne pas avoir pu répondre plus tôt.

    Cordialement
    Pascal

  5. #5
    Membre confirmé
    Homme Profil pro
    Hobby
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hobby

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Par défaut
    Re-bonjour,

    les solutions butent sur le fait que si je garde bien le texte de la cellule B1, l'adresse hyperlink qui se trouve en C1 n'est pas reprise. Au lieu de cela, l'adresse dans le lien hypertext en B1 pointe vers le classeur .xlxs et non vers la page web désirée (celle en C1).

    Je continue à chercher.

    Cordialement

  6. #6
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour,

    mais pourquoi "With Sheet2" ?
    C'est que John a probablement travaillé sur la feuille "Sheet2" pour écrire la procédure. C'est évidemment à adapter à la structure de ton classeur
    Pour comprendre la syntaxe With ... End with : https://docs.microsoft.com/en-us/dot...with-statement
    Dans mon exemple, j'avais laissé ActiveSheet, car c'est ce que donne l'enregistreur de macro. Il faut l'adapter si tu travailles sur plusieurs feuilles. Mais si tu travailles sur une seule feuille, il n'y a pas trop de risques.

    Par rapport au code que tu nous présentes au début, tu pourras intégrer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Hyperlinks.Add Anchor:=Range("B4"), Address:="C:\le chemin vers mon fichier"
    En adaptant avec ta boucle => remplacer le B4 par la cellule de la boucle et "C:\le chemin vers mon fichier" par la valeur dans la colonne C. Tu pourras utiliser Offset comme tu le fais déjà.

  7. #7
    Membre confirmé
    Homme Profil pro
    Hobby
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hobby

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Par défaut
    Re,

    merci du conseil.

    J'avais bien modifié Sheet2 en Sheet1. Malheureusement, du moins pour l'instant, la solution de John ne fait rien. Je continue à tester.

    Cordialement
    Pascal

  8. #8
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Peux-tu nous écrire le code que tu as actuellement et qui ne fais pas ce que tu veux, stp ?
    Vers quel classeur est-ce que cela renvoie ?
    Peux-tu aussi nous montrer une capture d'écran de ton classeur avec les colonnes, s'il n'y a rien de confidentiel ?
    Merci

  9. #9
    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 173
    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 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je choisirais la fonction LIEN_HYPERTEXTE qui offre un avantage énorme de pouvoir se passer du VBA
    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

  10. #10
    Membre confirmé
    Homme Profil pro
    Hobby
    Inscrit en
    Octobre 2013
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Hobby

    Informations forums :
    Inscription : Octobre 2013
    Messages : 62
    Par défaut
    Re,

    en fait, le code de John fonctionnait, mais pas si le champ, bien que de format "texte" comprenait des chiffres. Et comme il s'agit des premiers enregistrements dans la liste, je ne suis pas allé voir plus bas;

    Voici le code fonctionnel après avoir mis des " ' " devant les chiffres. C'est celui de John.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub concatenation()
        Dim Cell As Range
        On Error Resume Next
     
        With Sheet1
     
            For Each Cell In Range("B2:B" & Range("B65536").End(xlUp).Row)
                ActiveSheet.Hyperlinks.Add Cell, Cell.Offset(0, 2), , , Cell.Value
     
             Next Cell
     
        End With
     
    End Sub
    Merci à vous tous de l'aide apportée.

    Cordialement
    Pascal

  11. #11
    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 173
    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 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Résultat souhaité :
    Cellule hyperlink avec texte de B et lien de C.
    Manuellement mais bien entendu tout à fait possible de le faire avec VBA et de plus si la liste de données est un tableau structuré en une seule instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =LIEN_HYPERTEXTE(C2;B2)
    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

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

Discussions similaires

  1. Problème de modélisation UML en vue de créer une base de donnée.
    Par passant13 dans le forum Diagrammes de Classes
    Réponses: 9
    Dernier message: 09/02/2020, 15h30
  2. créer une macro pour comparer deux cellules d'une même colonne
    Par barbie-9 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 09/05/2012, 19h28
  3. Réponses: 7
    Dernier message: 23/05/2005, 10h12
  4. Créer une vue avec des requêtes UNION ?
    Par webtheque dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/04/2005, 12h37
  5. Créer une vue pour trier une requete UNION ?
    Par Etienne Bar dans le forum SQL
    Réponses: 3
    Dernier message: 03/01/2003, 20h22

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