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:
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.
1 pièce(s) jointe(s)
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
lien hypertexte dans listbox
bonjour,
j'ai essayé d'adapter à mon fichier,
Code:
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
lien hypertexte dans listbox
Citation:
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:
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:
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?
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:
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:
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:
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:
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:
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
lien hypertexte dans listbox
Alleuia ça marche!:yaisse1:
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:ave::ave::ave:
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:
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 |
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:
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
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:
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:
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:
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
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
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:
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