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

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

    Informations professionnelles :
    Activité : comptable
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 22
    Points : 7
    Points
    7
    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
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 729
    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 : 12 729
    Points : 28 555
    Points
    28 555
    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

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 729
    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 : 12 729
    Points : 28 555
    Points
    28 555
    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

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

    Informations professionnelles :
    Activité : comptable
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 22
    Points : 7
    Points
    7
    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

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 729
    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 : 12 729
    Points : 28 555
    Points
    28 555
    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

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

    Informations professionnelles :
    Activité : comptable
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 22
    Points : 7
    Points
    7
    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

  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
    12 729
    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 : 12 729
    Points : 28 555
    Points
    28 555
    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

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

    Informations professionnelles :
    Activité : comptable
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 22
    Points : 7
    Points
    7
    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?

  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
    12 729
    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 : 12 729
    Points : 28 555
    Points
    28 555
    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

  10. #10
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 729
    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 : 12 729
    Points : 28 555
    Points
    28 555
    Billets dans le blog
    53
    Par défaut ListBox alimenté suivant les caractères entrés dans un TextBox
    Bonjour,
    Puisque manifestement les contrôles TextBox1 et ListBox1 sont des contrôles ActiveX voici les codes un peu modifié

    Scénario
    Pour l'exemple nous avons un classeur contenant deux feuilles dont la propriété CodeName sont pour l'une shtDb qui contient les données et pour l'autre shtConsult qui contient les deux contrôles ActiveX nommés respectivement TextBox1 et ListBox1.
    Les données commencent en cellules A1 et la première ligne contient les étiquettes de colonnes
    La colonne B contient des noms et la colonne C des prénoms
    La liste affichée dans le contrôle ListBox représente donc les noms commençant par le nombre de caractères entré dans le TextBox. Si le TextBox est vide, la liste complète est affichée.
    Code
    A placer dans le module de la feuille dont le CodeName est shtConsult

    En tête de module
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Option Explicit
    Dim rng As Range, rng_Data As Range
    Dim flagInit As Boolean
    La procédure d'initialisation des variables objets (Données)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Initialize()
     ' Données
     Set rng = shtDb.Range("A1").CurrentRegion
     With rng
      Set rng_Data = .Resize(.Rows.Count - 1).Offset(1)
     End With
     ' ListBox1
     With Me.ListBox1
     .ColumnCount = 4           ' Nombre de colonnes à afficher
     .ColumnWidths = "0;50;50"   ' Largeur des colonnes
     End With
    End Sub
    La procédure de chargement de la liste du contrôle ListBox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub LoadListBox(LookUpValue As String)
     Dim r As Long
     Me.ListBox1.Clear ' Efface la liste
     With rng_Data
      For r = 1 To .Rows.Count ' Nbre de lignes de la liste de données
       If LCase(Left(.Cells(r, 2).Value, Len(LookUpValue))) = LCase(LookUpValue) Then
        Me.ListBox1.AddItem r  ' N° de l'enregistrement
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = .Cells(r, 2).Value ' Colonne B
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = .Cells(r, 3).Value ' Colonne C
        Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = .Cells(r, 9).Value ' Colonne I
       End If
      Next r
     End With
    End Sub
    Ces deux procédures sont appelées par
    la procédure événementielle Change du contrôle TextBox1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub TextBox1_Change()
     If Not flagInit Then Initialize ' Initialisation variables objets
     LoadListBox TextBox1.Value      ' Charge la liste
    End Sub
    la procédure événementielle Click du contrôle ListBox1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub ListBox1_Click()
     Dim CurrentRecord As Long
     ' ReadRecord Me.ListBox1.ListIndex
     With Me
      With .ListBox1
       CurrentRecord = .List(.ListIndex, 1)
      End With
      ' Affiche les données sélectionnées
      .Range("B6").Value = rng_Data.Cells(CurrentRecord, 2)
      .Range("B7").Value = rng_Data.Cells(CurrentRecord, 3)
     End With
    End Sub
    Lien
    Pour savoir ce qu'est la propriété CodeName d'une feuille Excel (Objet Sheet/WorkSheet)
    A lire Description de l'objet Feuille de calcul dans Excel


    [EDIT]
    Apporté une modification à la procédure événementielle LoadListBox
    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

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

    Informations professionnelles :
    Activité : comptable
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 22
    Points : 7
    Points
    7
    Par défaut lien hypertexte dans listbox
    Alleuia ça marche!

    J'ai adapté la fin de listbox_click pour qu'il charge mon lien hypertexte et c'est bon.

    Bon je suppose qu'il y à des lignes qui ne sont pas utiles mais je ne vais pas les supprimer sinon je risque de tt planter!

    Merci beaucoup pour la patience!

    Il ne me reste plus qu'a faire un code pour que si le lien n'est pas valide il n'ouvre pas la fenêtre de débogage et qu'un message "contacter ... pour mettre à jour le lien hypertexte" apparaisse.

    Tu sais peu-être vers quel post je peux me tourner?

    Ou tu as peu-être une piste à me donner?

    En tt cas un grand MERCI

  12. #12
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 729
    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 : 12 729
    Points : 28 555
    Points
    28 555
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Alleuia ça marche!
    Si tu avais indiqué immédiatement que les contrôles étaient des contrôles ActiveX et pas des contrôles dans un UserForm on aurait gagné du temps

    Il ne me reste plus qu'a faire un code pour que si le lien n'est pas valide il n'ouvre pas la fenêtre de débogage et qu'un message "contacter ... pour mettre à jour le lien hypertexte" apparaisse.
    Il faut utiliser l'interception d'erreur. A lire La gestion des erreurs dans Excel

    En tt cas un grand MERCI
    Et bien si c'est le cas vote pour les discussions, c'est notre seule rétribution et cela fait toujours plaisir.
    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

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

    Informations professionnelles :
    Activité : comptable
    Secteur : Finance

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

    je reviens à la charge car je dois faire la même chose mais cette fois-ci c'est dans un USERFORM avec 3combobox qui font office de filtre et le résultat dans une listbox où je peux cliquer pour suivre le lien.

    Pour commencer définir mon fichier source me pose problème j'ai repris la même méthode que pour alimenter mon textbox mais rien ne se passe, pouvez-vous m'expliquer pourquoi?

    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 LoadComboBox(LookUpValue As String)
     Dim r As Long
     Me.ComboBox1.Clear ' Efface la liste
     With rng_Data
      For r = 1 To .Rows.Count ' Nbre de lignes de la liste de données
       If LCase(Left(.Cells(r, 1).Value, Len(LookUpValue))) = LCase(LookUpValue) Then
        Me.ComboBox1.AddItem r
        Me.ComboBox1.List(Me.ComboBox1.ListCount - 1, 1) = r ' N° de l'enregistrement
        Me.ComboBox1.List(Me.ComboBox1.ListCount - 1, 2) = .Cells(r, 2).Value
       End If
      Next r
     End With
    End Sub
     
    Private Sub UserForm1_Initialize()
     Set rng = shtDb.Range("A1").CurrentRegion
     With rng
      Set rng_Data = .Resize(.Rows.Count - 1).Offset(1)
     
    ComboBox1.Clear
    ComboBox1.List = Application.Transpose(rng_Data("tableau1"))
    ComboBox2.Clear
    ComboBox3.Clear
    End With
    End Sub
     
    Private Sub ComboBox1_Change()
     If Not flagInit Then Initialize ' Initialisation variables objets
     LoadComboBox ComboBox1.Value
    End Sub

  14. #14
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 729
    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 : 12 729
    Points : 28 555
    Points
    28 555
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour commencer définir mon fichier source me pose problème
    Encore une fois, est-ce si compliqué d'être plus explicite.
    Qu'est-qui pose problème ?
    Y a-t-il un déclenchement d'erreur ?
    Si oui à quelle ligne, quel numéro d'erreur et quel libellé d'erreur est affiché ?

    Cependant, il faut relire mes premières réponses où je donne tout le code pour un contrôle ListBox d'un UserForm
    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

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

    Informations professionnelles :
    Activité : comptable
    Secteur : Finance

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

    oui c'est vrai ce n'est pas très clair mais quand tu as le nez dans le guidon tu ne t'en rend pas forcément compte! dsl

    Donc j'ai changé complètement mon code par rapport à hier, il s'agit d'un UserForm avec 3 combobox et 1 ListBox (origine du code: boisgontier jacques)

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    Dim f
    Private Sub UserForm_Initialize()
      Set f = Worksheets("matrice")
      Set mondico = CreateObject("Scripting.Dictionary")
      For Each c In Range("D2:D" & [O65000].End(xlUp).Row)
        mondico(c.Value) = ""
      Next c
      temp = mondico.keys
      Call Tri(temp, LBound(temp), UBound(temp))
      Me.ComboBox1.List = temp
    End Sub
    Private Sub ComboBox1_click()
      Me.ComboBox2.Clear
      Me.ComboBox3.Clear
      Me.ListBox2.Clear
      Set mondico = CreateObject("Scripting.Dictionary")
      For Each c In Range("D2:D" & [D65000].End(xlUp).Row)
        If c = Me.ComboBox1 Then mondico(c.Offset(0, 1).Value) = ""
      Next c
      temp = mondico.keys
      Call Tri(temp, LBound(temp), UBound(temp))
      Me.ComboBox2.List = temp
    End Sub
    Private Sub ComboBox2_click()
      Me.ComboBox3.Clear
      Me.ListBox2.Clear
      Set mondico = CreateObject("Scripting.Dictionary")
      For Each c In Range("F2:F" & [F65000].End(xlUp).Row)
        If c.Offset(, 11) = Me.ComboBox1 And c.Offset(, 12) = Me.ComboBox2 Then mondico(c.Value) = ""
      Next c
      temp = mondico.keys
      Call Tri(temp, LBound(temp), UBound(temp))
      Me.ComboBox3.List = temp
    End Sub
    Private Sub ComboBox3_click()
      Me.ListBox2.Clear
      i = 0
      For Each c In Range("C2:C" & [C65000].End(xlUp).Row)
        If c.Offset(, 5) = Me.ComboBox1 And c.Offset(, 6) = Me.ComboBox2 And c.Offset(, -6).Value = CDate(Me.ComboBox3) Then
          Me.ListBox1.AddItem c
          Me.ListBox1.List(i, 1) = c.Offset(, 1)
          i = i + 1
        End If
      Next c
    End Sub
    Sub Tri(a, gauc, droi) ' Quick sort
      ref = a((gauc + droi) \ 2)
      g = gauc: d = droi
      Do
        Do While a(g) < ref: g = g + 1: Loop
        Do While ref < a(d): d = d - 1: Loop
          If g <= d Then
            temp = a(g): a(g) = a(d): a(d) = temp
            g = g + 1: d = d - 1
          End If
        Loop While g <= d
        If g < droi Then Call Tri(a, g, droi)
        If gauc < d Then Call Tri(a, gauc, d)
    End Sub
    Je l'ai bien adapter à mon fichier :

    onglet source: shtDb (matrice)
    onglet pour le bouton d'accès au UserForm: shtConsult (RECHERCHE)
    données du combobox1: concerne la colonne D
    données du combobox2: concerne la colonne E
    données du combobox3: concerne la colonne F
    données à afficher dans la Listbox2: concerne la colonne C

    Mon problème est toujours le même je n'ai aucune données dans mon UserForm (Combobox1, 2, 3 et Listbox2)

    Et je n'ai aucun message d'erreur, les liste de déroulantes sont justes vides.

    J'espère que je suis un peu plus clair qu'hier.

    merci

  16. #16
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 729
    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 : 12 729
    Points : 28 555
    Points
    28 555
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Désolé mais on sort de la discussion dont le sujet "Liens hypertexte dans LISTBOX" à laquelle je pense avoir répondu à la fois pour un LisBox contrôle ActiveX et un ListBox dépendant d'un UserForm
    Le problème que tu décris provient soit d'un mauvais référencement, soit d'une condition mal testée, soit .....
    Tu devrais ouvrir une nouvelle discussion.
    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

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

    Informations professionnelles :
    Activité : comptable
    Secteur : Finance

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

    Je reviens à la charge car j'ai repris le début du post, mais comme mon UserForm n'est pas sur le même code je n'arrive pas à l'adapter.

    mon code d'initialisation et de tri:
    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
    Dim f
     
    Private Sub UserForm_Initialize()
      Set f = Sheets("matrice")
      Set mondico = CreateObject("Scripting.Dictionary")
      For Each c In f.Range("D2:D" & f.[D65000].End(xlUp).Row)
        mondico(c.Value) = ""
      Next c
      temp = mondico.keys
      Call Tri(temp, LBound(temp), UBound(temp))
      Me.ComboBox1.List = temp
    End Sub
    Sub Tri(a, gauc, droi) ' Quick sort
      ref = a((gauc + droi) \ 2)
      g = gauc: d = droi
      Do
        Do While a(g) < ref: g = g + 1: Loop
        Do While ref < a(d): d = d - 1: Loop
          If g <= d Then
            temp = a(g): a(g) = a(d): a(d) = temp
            g = g + 1: d = d - 1
          End If
        Loop While g <= d
        If g < droi Then Call Tri(a, g, droi)
        If gauc < d Then Call Tri(a, gauc, d)
    End Sub
    les combobox:
    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
    Private Sub ComboBox1_Click()
      Me.ComboBox2.Clear
      Me.ComboBox3.Clear
      Me.ListBox1.Clear
      Set mondico = CreateObject("Scripting.Dictionary")
      For Each c In f.Range("D2:D" & f.[D65000].End(xlUp).Row)
        If c = Me.ComboBox1 Then mondico(c.Offset(0, 1).Value) = ""
      Next c
      temp = mondico.keys
      Call Tri(temp, LBound(temp), UBound(temp))
      Me.ComboBox2.List = temp
    End Sub
    Private Sub ComboBox2_click()
      Me.ComboBox3.Clear
      Me.ListBox1.Clear
      Set mondico = CreateObject("Scripting.Dictionary")
      For Each c In f.Range("F2:F" & f.[F65000].End(xlUp).Row)
        If c.Offset(, -2) = Me.ComboBox1 And c.Offset(, -1) = Me.ComboBox2 Then mondico(c.Value) = ""
      Next c
      temp = mondico.keys
      Call Tri(temp, LBound(temp), UBound(temp))
      Me.ComboBox3.List = temp
    End Sub
    Private Sub ComboBox3_click()
      Me.ListBox1.Clear
      i = 0
      For Each c In f.Range("C2:C" & f.[C65000].End(xlUp).Row)
        If c.Offset(, 1) = Me.ComboBox1 And c.Offset(, 2) = Me.ComboBox2 And c.Offset(, 3).Value = Me.ComboBox3 Then
          Me.ListBox1.AddItem c
          Me.ListBox1.List(i, 1) = c.Offset(, 1)
          i = i + 1
        End If
      Next c
    End Sub
    le code de listbox que j'ai adapté pour suivre le lien:
    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 = f.Range("C2:C" & f.[C65000].End(xlUp).Row).Hyperlinks(1).Address ' Adresse du lien
     f.FollowHyperlink Link ' Charge le lien
    End Sub
    j'obtiens une erreur d'execution '438': propriété ou méthode non géré par cet objet.

    f.FollowHyperlink Link ' Charge le lien : est surligné

    et quand je passe ma souris sur link j'ai bien une adresse de lien mais je ne suis pas sur que ce soit le bon chemin de l'argument que j'ai cliqué dans la listbox.

    Pouvez-vous m'aider?

    merci

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

    Informations professionnelles :
    Activité : comptable
    Secteur : Finance

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

    j'espère que le week-end fut bon!

    je suis désolé de revenir à la charge mais je n'arrive vraiment pas à adapter le code.

    j'ai essayer de prendre votre code et de l'adapter à mon fichier mais je n'arrive pas à alimenter mes 3 comboboxs.

    pouvez-vous m'aidez soit avec le code ci-dessus soit en me donnant des pistes à partir de votre code et pour que je puisse alimenter 3 combo et 1 listbox?

    Merci

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

    Informations professionnelles :
    Activité : comptable
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2017
    Messages : 22
    Points : 7
    Points
    7
    Par défaut lien hypertexte dans listbox résultat de 3 combobox en cascade
    bonjour,

    j'ai bien compris que pour que l'on puisse identifier la ligne source du résultat apparaissant dans la listbox il fallait rajouter un numéro de compteur.

    premier problème je n'arrive pas à rajouter ce numéro de compteur.

    mon code alimentant la listbox:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub ComboBox3_click()
        Me.ListBox1.Clear
      i = 0
      For Each c In f.Range("C2:C" & f.[C65000].End(xlUp).Row)
       If c.Offset(, 1) = Me.ComboBox1 And c.Offset(, 2) = Me.ComboBox2 And c.Offset(, 3).Value = Me.ComboBox3 Then
          Me.ListBox1.AddItem c
          Me.ListBox1.List(i, 1) = c.Offset(, 1)
          i = i + 1
        End If
      Next c
     
    End Sub
    Avez-vous une solution?

    Merci d'avance

  20. #20
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 729
    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 : 12 729
    Points : 28 555
    Points
    28 555
    Billets dans le blog
    53
    Par défaut La méthode AddItem
    Bonjour,
    Je vais une dernière fois expliquer ce que j'ai déjà décrit plus haut.

    j'ai bien compris que pour que l'on puisse identifier la ligne source du résultat apparaissant dans la listbox il fallait rajouter un numéro de compteur.
    premier problème je n'arrive pas à rajouter ce numéro de compteur.
    Il ne s'agit pas d'un compteur mais du numéro d'enregistrement de la donnée (le numéro de la ligne) donc si la liste commence en A1 avec les titres en première ligne les données de la ligne 2 se trouve le premier enregistrement de même si une liste de données commence en ligne 15 (exemple C15:H100 avec les titres en première ligne (la 15) la ligne 16 sera la première ligne de l'enregistrement.

    Pour charger un contrôle ListBox ou ComboBox, il y a plusieurs possibilités dont la propriété RowSource et la méthode AddItem

    La propriété RowSource
    Lorsque l'on charge un contrôle ListBox ou ComboBox de tout les enregistrements d'une liste de données, il est préférable d'utiliser la propriété RowSource car on peut profiter de la propriété ColumnHeads qui affiche les étiquettes de colonnes.
    Imaginons une plage de données $A1:$D6 se trouvant dans la feuille nommée Feuil1 du classeur où se trouve le code VBA
    Exemple de l'utilisation de la propriété RowSource
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.RowSource = "Feuil1!A2:D6"
    Comme le nombre de lignes et de colonnes est variable dans une liste de données, il est préférable en VBA d'utiliser la propriété CurrentRegion de l'objet Range qui est l'équivalent du raccourci clavier Ctrl + *
    Soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim rng as range
    Set rng = ThisWorkbook.Worksheets("Feuil1").Range("A1").CurrentRegion
    La plage renvoyée sera A1:C6 soit la première ligne contenant les étiquettes de colonnes et les lignes contenant les données or la propriété RowSource ne doit contenir que l'adresse de la plage contenant les données soit A26. On utilisera par exemple la variable objet rngData pour référencer la plage des données
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     ' Initialisation des variables objets
     Set rng = ThisWorkbook.Worksheets("Feuil1").Range("A1").CurrentRegion
     With rng
      Set rngData = .Offset(1).Resize(.Rows.Count)
     End With
    Ce qui permettra de renvoyer à la propriété RowSource l'adresse de cette plage en utilisant la propriété Address de l'objet Range en utilisant l'argument nommé External avec comme valeur True qui permet d'obtenir l'adresse complète de la plage (cellules, feuille, classeur)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.ListBox1.RowSource = rngData.Address(External:=True)
    La méthode AddItem
    Lorsque l'on charge un contrôle ListBox ou ComboBox de certains éléments d'une plage de données on utilisera la méthode AddItem.
    Dans le cas qui nous occupe, il est important de connaître le numéro d'enregistrement (numéro de la ligne) de la données que l'on va sélectionner afin de pouvoir lire la ou les données du n° d'enregistrement pour l'afficher, la modifier, etc.
    Le code ci-dessous montre comment charger le contrôle nommé ListBox1 à l'aide de la méthode AddItem
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     ' Charge le contrôle ListBox
     With Me.ListBox1
     .ColumnCount = rng.Columns.Count + 1
     .ColumnWidths = "15;30;45;45;20"
      For r = 1 To rngData.Rows.Count
       ' Charge la liste si la valeur de la colonne D contient "F"
       If rngData.Cells(r, 4) = "F" Then
        .AddItem r     ' N° de l'enregistrement
        For c = 1 To 4 ' parcoure les quatre colonnes (A, B, C, D)
        .List(.ListCount - 1, c) = rngData.Cells(r, c).Value
        Next c
       End If
      Next r
     End With
    Voici donc le code complet ainsi qu'une illustration d'un exemple avec la méthode AddItem

    Scénario
    Nous avons dans la feuille nommée Feuil1 une plage de données commençant en cellule A1 avec en ligne 1 les étiquettes de colonnes.
    Pour l'exemple, le UserForm contient un contrôle ListBox nommé ListBox1 et deux contrôles TextBox nommés respectivement TextBox1 & TextBox2. Il y a également deux contrôles Label mais qui n'ont aucun intérêt pour l'explication.
    Le ListBox ne contiendra que les personnes de sexe féminins (Colonne D)

    Le code
    A placer dans le module du UserForm

    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
    La procédure d'initialisationdes variables objets (Données)
    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
    Private Sub UserForm_Initialize()
     Dim r As Long, c As Integer
     '
     Set rng = ThisWorkbook.Worksheets("Feuil1").Range("A1").CurrentRegion
     With rng
      Set rngData = .Offset(1).Resize(.Rows.Count)
     End With
     ' Charge le contrôle ListBox
     With Me.ListBox1
     .ColumnCount = rng.Columns.Count + 1 ' Nombre de colonnes affichées
     .ColumnWidths = "15;30;45;45;20"     ' Largeur des colonnes
      ' Boucle sur les enregistrements
      For r = 1 To rngData.Rows.Count
       ' Charge la liste si la valeur de la colonne D contient "F"
       If rngData.Cells(r, 4) = "F" Then
        .AddItem r     ' N° de l'enregistrement
        For c = 1 To 4 ' parcoure les quatre colonnes (A, B, C, D)
        .List(.ListCount - 1, c) = rngData.Cells(r, c).Value
        Next c
       End If
      Next r
     End With
    End Sub
    la procédure événementielle Click du contrôle ListBox1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub ListBox1_Click()
     With Me.ListBox1
      ReadRecord .List(.ListIndex, 0) ' Lecture de l'enregistrement
     End With
    End Sub
    la procédure de lecture de l'enregistrement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub ReadRecord(RecordNumber As Long)
      With rngData
      Me.TextBox1 = .Cells(RecordNumber, 2) ' Nom
      Me.TextBox2 = .Cells(RecordNumber, 3) ' Prénom
     End With
    End Sub

    Illustration
    Nom : ListBox avec RowSource AddItem.png
Affichages : 1484
Taille : 24,1 Ko
    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.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Liens hypertexte dans LISTBOX
    Par yoyo77yo dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 12/04/2017, 22h02
  2. Lien hypertexte dans listbox
    Par Gecoo dans le forum Macros et VBA Excel
    Réponses: 25
    Dernier message: 22/04/2010, 10h44
  3. [MFC] liens hypertexte dans un CRichEditCtrl
    Par hiko-seijuro dans le forum MFC
    Réponses: 1
    Dernier message: 15/06/2005, 13h14
  4. Réponses: 3
    Dernier message: 26/10/2004, 08h31
  5. lien hypertexte dans une anim flash
    Par vedder dans le forum Flash
    Réponses: 17
    Dernier message: 14/01/2004, 15h11

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