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 :

lien hypertexte dans listbox


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
    comptable
    Inscrit en
    Mars 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : comptable
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 22
    Par défaut lien hypertexte dans listbox
    bonjour,

    J'ai lu cette discussion.
    j'ai vu votre réponse concernant un lien hypertexte dans une listbox.

    je n'arrive pas a adapté votre code au mien, pouvez-vous m'aider?
    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
    Private Sub ListBox1_Click()
     Dim Link As String, CurrentRecord As Long
     CurrentRecord = Me.ListBox1.ListIndex + 1
     Link = rngData.Cells(CurrentRecord, 4).Hyperlinks(1).Address ' Adresse du lien
     ThisWorkbook.FollowHyperlink Link ' Charge le lien
    End Sub
     
    Private Sub TextBox1_Change()
     
        Application.ScreenUpdating = False
     
          ListBox1.Clear
     
        If TextBox1 <> "" Then
            For ligne = 2 To 65000
                If Sheets(2).Cells(ligne, 2) Like "*" & TextBox1 & "*" Then
     
                End If
            Next
            For ligne = 2 To 65000
                If Sheets(2).Cells(ligne, 2) Like "*" & TextBox1 & "*" Then
                ListBox1.AddItem Sheets(2).Cells(ligne, 4)
                End If
            Next
     
     
        End If
     
     
    End Sub
    Quand je clique j'ai une erreur d’exécution '424'

    sur la ligne: Link = rngData.Cells(CurrentRecord, 4).Hyperlinks(1).Address ' Adresse du lien

    merci pour votre aide.

  2. #2
    Membre averti
    Homme Profil pro
    comptable
    Inscrit en
    Mars 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : comptable
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 22
    Par défaut lien hypertexte dans listbox
    pour l'adapter à mon pourriez vous m'indiquer ce qu'il faut modifier pour que:

    1 - mon Userform soit sur le premier onglet et que mes données soient sur un autre onglet pour pouvoir le masquer

    2 - ma clé de recherche est en colonne B et les liens sont en colonnes D du second onglet

    3 - je n'affiche que le non du lien dans la listbox

    4 - et est-il possible que ce soit une textbox plutôt qu'une liste déroulante?

    pouvez-vous m'aider?

    Merci

    si besoin ci-joint mon fichier
    Fichiers attachés Fichiers attachés

  3. #3
    Membre averti
    Homme Profil pro
    comptable
    Inscrit en
    Mars 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : comptable
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 22
    Par défaut lien hypertexte dans listbox
    bonjour,

    j'ai essayé d'adapter à mon fichier,

    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
    Private Sub ListBox1_Click()
     Dim Link As String, CurrentRecord As Long
     CurrentRecord = CurrentRecord = Me.ListBox1.List(.ListIndex)
     Link = rngData.Cells(CurrentRecord, 4).Hyperlinks(1).Address ' Adresse du lien
     ThisWorkbook.FollowHyperlink Link ' Charge le lien
    End Sub
     
     
    Private Sub TextBox1_Change()
        Application.ScreenUpdating = False
        ListBox1.Clear
         With rng_Data
      For r = 1 To .Rows.Count
       ' Splite les données vers lstFemale ou lstMale
       If .Cells(r, ColumnNumber) = ConditionValue Then
          Me.ListBox1.AddItem r  ' N° d'enregistrement
          For c = 1 To .Columns.Count: listeschema.List(listeschema.ListCount - 1, c) = .Cells(r, c): Next
        End If
       Next r
      End With
        If TextBox1 <> "" Then
            For ligne = 2 To 65000
                If Sheets(2).Cells(ligne, 1) Like "*" & TextBox1 & "*" Then
                ListBox1.AddItem Sheets(2).Cells(ligne, 3)
                End If
            Next
        End If
    End Sub
    mais j'ai un message d'erreur d’exécution '424' objet requis.

    il bloque sur la ligne: For r = 1 To .Rows.Count

    et quand je passe sur la ligne, il me dit: r = vide

    Quel est le problème?

    Merci

  4. #4
    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,
    mais j'ai un message d'erreur d’exécution '424' objet requis.
    il bloque sur la ligne: For r = 1 To .Rows.Count
    Vraisemblablement parce-que la variable objet RngData n'est pas déclarée et de surcroît il faut lui assigner la référence à la plage de cellules adéquate.
    Relire mon intervention du 10 avril à 15:18 Post #13 et tout particulièrement ce qu'il faut mettre en tête de module et la procédure UserForm_Initialize
    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

  5. #5
    Membre averti
    Homme Profil pro
    comptable
    Inscrit en
    Mars 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : comptable
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 22
    Par défaut lien hypertexte dans listbox
    de surcroît il faut lui assigner la référence à la plage de cellules adéquate.
    la plage de cellules adéquate c'est ma plage nommée ou sont mes données? en l’occurrence "listeshema"

    et après avoir déclaré la variable rngdata je peux donc mettre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    rng = listeshema
    rngData = listeshema
    et pour la procédure USERFORM_Initialize, n'ayant pas de USERFORM et juste une textbox et listbox je peux donc mettre:

    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
    Private Sub textbox1_Initialize()
     ' Initialisation des variables objets
     Set rng = shtDb.Range("A1").CurrentRegion
     With rng
      Set rngData = .Offset(1).Resize(.Rows.Count - 1)
     End With
     ' Initialisation des propriétés CombOBox
     With Me.textBox1
     .RowSource = rngData.Address(external:=True)
     .ColumnHeads = True
     .ColumnCount = rngData.Columns.Count
     End With
     ' Initialisation des propriétés ListBox
     With Me.ListBox1
     .RowSource = rngData.Address(external:=True)
     .ColumnHeads = True
     .ColumnCount = rngData.Columns.Count
     End With
    End Sub
    est-ce la bonne solution ou je me perd un peux?

  6. #6
    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,
    est-ce la bonne solution ou je me perd un peux?
    La meilleure façon de le savoir c'est d'effectuer des tests et voir si cela reflète ce que tu attends.

    Pour résumer
    Un UserForm contient des contrôles (textBox, ListBox, CommandButton, etc.)
    Les ListBox et TextBox doivent être alimentés par des données. En l'occurence dans ton cas le ListBox doit contenir des données partielles (contenu du TextBox) provenant d'une table (Liste) de données (Objet Range ou ListObject) présentes sur une feuille (objet WorkSheet).
    Dans mon exemple, la variable objet rng représente toute la liste des données (étiquettes de colonnes + données) et rngData la plage des données uniquement (sans les titres)

    Je te conseille la lecture


    Eventuellement une de mes contributions USERFORM - Créer, Consulter, Modifier et Supprimer des enregistrements à l'aide d'un formulaire

    pour la procédure USERFORM_Initialize, n'ayant pas de USERFORM et juste une textbox et listbox je peux donc mettre:
    Je viens de voir ce message mais il me semble qu'à aucun moment on a évoqué que les objet TextBox et ListBox étaient sur une feuille
    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

  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 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,
    Une erreur est constituée d'un numéro et d'un message descriptif. Ma mémoire me fait défaut et je ne vois pas à quoi correspond le n° 324 donc en indiquant le texte du message cela aiderait.
    Y a-t-il réellement un lien hypertexte valide dans la cellule référencée par cette ligne de code ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rngData.Cells(CurrentRecord, 4)
    Il faudrait s'en assurer en cliquant sur cette cellule.
    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
    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,
    Voici l'ensemble du code.
    Le UserForm contient deux contrôles, un ComboBox nommé ComboBox1 et un ListBox nommé ListBox1
    J'espère que le fait d'avoir deux contrôles sera plus clair

    Pour l'exemple, les données commencent en cellule A1 de la feuille nommée BD dont la propriété CodeName est shtDb et la première ligne contient les étiquettes de colonnes.
    Les liens sont dans la colonne D (4ème colonne) et ont été insérés par Clic droit sur la cellule et sélection de Lien hypertexte

    En tête de module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Option Explicit
    Dim rng As Range, rngData As Range
    Code de la procédure d'initialisation du UserForm
    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
    Private Sub UserForm_Initialize()
     ' Initialisation des variables objets
     Set rng = shtDb.Range("A1").CurrentRegion
     With rng
      Set rngData = .Offset(1).Resize(.Rows.Count - 1)
     End With
     ' Initialisation des propriétés CombOBox
     With Me.ComboBox1
     .RowSource = rngData.Address(external:=True)
     .ColumnHeads = True
     .ColumnCount = rngData.Columns.Count
     End With
     ' Initialisation des propriétés ListBox
     With Me.ListBox1
     .RowSource = rngData.Address(external:=True)
     .ColumnHeads = True
     .ColumnCount = rngData.Columns.Count
     End With
    End Sub
    La ligne 3 de cette procédure utilise le CodeName de la feuille.
    Elle peut être remplacée par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rng = ThisWorkbook.Worksheets("BD").Range("A1").CurrentRegion
    Code de la procédure du Click sur ListBox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub ListBox1_Click()
     Dim Link As String, CurrentRecord As Long
     CurrentRecord = Me.ListBox1.ListIndex + 1
     Link = rngData.Cells(CurrentRecord, 4).Hyperlinks(1).Address ' Adresse du lien
     ThisWorkbook.FollowHyperlink Link ' Charge le lien
    End Sub
    Code de la procédure du Click sur ComboBox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub ComboBox1_Click()
     Dim Link As String, CurrentRecord As Long
     CurrentRecord = Me.ComboBox1.ListIndex + 1
     Link = rngData.Cells(CurrentRecord, 4).Hyperlinks(1).Address ' Adresse du lien
     ThisWorkbook.FollowHyperlink Link ' Charge le lien
    End Sub
    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

  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,
    Le code que j'ai proposé se base sur une liste complète et utilise la propriété RowSource pour charger la table de données or vous comme la liste des données présentes dans le ListBox est partielle vous utiliser la méthode AddItem.
    Comme il faut une relation entre l'élément sélectionné dans le ListBox et l'enregistrement lui correspondant dans la table des données, il y a lieu d'ajouter dans la liste le n° d'enregietrement comme par exemple dans la procédure ci-dessous que j'ai repris d'un de mes classeurs de démonstration où j'ai deux listes lstFemale et lstMale et où ConditionValue est égal à la lettre F (donc il y a éclatement dans deux listes distinctes selon le sexe)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     With rng_Data
      For r = 1 To .Rows.Count
       ' Splite les données vers lstFemale ou lstMale
       If .Cells(r, ColumnNumber) = ConditionValue Then
          Me.lstFemale.AddItem r  ' N° d'enregistrement
          For c = 1 To .Columns.Count: lstFemale.List(lstFemale.ListCount - 1, c) = .Cells(r, c): Next
         Else
          Me.lstMale.AddItem r      ' N° d'enregistrement
          For c = 1 To .Columns.Count
           lstMale.List(lstMale.ListCount - 1, c) = .Cells(r, c)
          Next
        End If
       Next r
      End With
    Lors de la procédure événementielle, il y a donc lieu de récupérer le n° d'enregistrement de l'élément sélectionné dans la liste
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CurrentRecord = me.lstFemale.List(.ListIndex)
    et ensuite tu reprends le code que j'ai publié plus haut
    Soit en utilisant la liste nommée ListBox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub ListBox1_Click()
     Dim Link As String, CurrentRecord As Long
     CurrentRecord = CurrentRecord = me.ListBox1.List(.ListIndex)
     Link = rngData.Cells(CurrentRecord, 4).Hyperlinks(1).Address ' Adresse du lien
     ThisWorkbook.FollowHyperlink Link ' Charge le lien
    End Sub
    Ne pas oublier de modifier le nom de l'objet lstFemale par ListBox1 et ConditionValue doit correspondre à votre recherche (valeur du TextBox
    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. Liens hypertexte dans LISTBOX
    Par yoyo77yo dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 12/04/2017, 21h02
  2. Lien hypertexte dans listbox
    Par Gecoo dans le forum Macros et VBA Excel
    Réponses: 25
    Dernier message: 22/04/2010, 09h44
  3. [MFC] liens hypertexte dans un CRichEditCtrl
    Par hiko-seijuro dans le forum MFC
    Réponses: 1
    Dernier message: 15/06/2005, 12h14
  4. Réponses: 3
    Dernier message: 26/10/2004, 07h31
  5. lien hypertexte dans une anim flash
    Par vedder dans le forum Flash
    Réponses: 17
    Dernier message: 14/01/2004, 14h11

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