Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

marleauc

XLDnaute Occasionnel
Bonjour tout le monde,

Voici , grace a plusieurs d'entre vous , j'ai pu confectionner un petit application. je relance la question!

Bon, j'ai une listview3 qui s'affiche tres bien dans lequel j'ia inclus un code vba du clic qui:

Private Sub ListView3_Click()
SpinBBase = Me.ListView3.SelectedItem.Index
IndexBase = SpinBBase.Value
AlimenteTb
End Sub

La j'ai ajouté une textebox1 (recherche) qui fonctionne également. , donc qui affiche bien le résultat dan la listview3.
Private Sub CommandButton1_Click()
Dim rngR As Range, c As Range, Adresse As String
Dim txtTotal As Integer
If TextBox1 = "" Then Exit Sub
ListView3.ListItems.Clear

Set rngR = Sheets("Base").Range("A2:L" & Range("A65000").End(xlUp).Row)
Set c = rngR.Find(TextBox1, lookat:=xlPart)
If Not c Is Nothing Then
Adresse = c.Address
Do
With ListView3
.ListItems.Add , , Sheets("Base").Cells(c.Row, 1).Value
.ListItems(.ListItems.Count).ListSubItems.Add , , Sheets("Base").Cells(c.Row, 2)
.ListItems(.ListItems.Count).ListSubItems.Add , , Sheets("Base").Cells(c.Row, 3)
.ListItems(.ListItems.Count).ListSubItems.Add , , Sheets("Base").Cells(c.Row, 7)
.ListItems(.ListItems.Count).ListSubItems.Add , , Sheets("Base").Cells(c.Row, 8)
End With
Set c = rngR.FindNext(c)
Loop While Not c Is Nothing And c.Address <> Adresse
End If
txtTotal = ListView3.ListItems.Count
If txtTotal = 0 Then MsgBox "Rien trouvé !"

End Sub

mon problème est que lorsque je clic de nouveau sur le résultat obtenu via la recherche , il m'affiche par défaut la première ligne de ma base. et non la ligne sélectionné

merci de votre aide.
 
Re : listview et clic

Bonsoir,

1) Utilises la balise code ("#" au dessus de la fenêtre de saisie) quand tu postes des paves de code comme ça. Sinon ton post et ton code deviennent carrément illisibles.

2) Dans un cas comme celui ci, il serait préférable de joindre un petit fichier exemple histoire que les gens susceptibles de te répondre n'ait pas à tout recréer pour tester tout ça.
 
Re : listview et clic

Bonjour, a toi et le forum,
voir ce code:
Code:
Private Sub CommandButton1_Click()
Dim rngR As Range, c As Range, Adresse As String
Dim txtTotal As Integer
If TextBox1 = "" Then Exit Sub
ListView3.ListItems.Clear

Set rngR = Sheets("Base").Range("A2:L" & Range("A65000").End(xlUp).Row)
Set c = rngR.Find(TextBox1, lookat:=xlPart)
If Not c Is Nothing Then
    Adresse = c.Address
    Do
        With ListView3
            .ListItems.Add , , Sheets("Base").Cells(c.Row, 1).Value
            .ListItems(.ListItems.Count).ListSubItems.Add , , Sheets("Base").Cells(c.Row, 2)
            .ListItems(.ListItems.Count).ListSubItems.Add , , Sheets("Base").Cells(c.Row, 3)
            .ListItems(.ListItems.Count).ListSubItems.Add , , Sheets("Base").Cells(c.Row, 7)
            .ListItems(.ListItems.Count).ListSubItems.Add , , Sheets("Base").Cells(c.Row, 8)
        End With
        Set c = rngR.FindNext(c)
   [COLOR="Red"]'creation public lignerecherche as long dans module1
   lignerecherche = c.Row - 1
  MsgBox lignerecherche[/COLOR]
    Loop While Not c Is Nothing And c.Address <> Adresse
End If
txtTotal = ListView3.ListItems.Count
If txtTotal = 0 Then MsgBox "Rien trouvé !"

End Sub
et ensuite une condition supplémentaire dans
Code:
Private Sub AlimenteTb()
Dim Lgn As Range, Bcle&, c As Range, Adresse$
  [COLOR="Red"]If TextBox1 <> "" Then
  Set Lgn = PlageBase(lignerecherche, 1)
  Else:
  Set Lgn = PlageBase(IndexBase, 1)
  End If[/COLOR]
  For Bcle = 1 To ColTb.Count
    ColTb(Bcle).Text = Lgn(1, Bcle).Value
  Next Bcle
  LabIndex = "Fiche " & IndexBase & " sur " & PlageBase.Rows.Count
  ListView1.ListItems.Clear
  With Sheets("evenement")
    Set c = .Columns(1).Find(ColTb(3), lookat:=xlWhole)
        If Not c Is Nothing Then
            Adresse = c.Address
            Do
                With ListView1
                    .ListItems.Add , , c
                    .ListItems(.ListItems.Count).ListSubItems.Add , , c.Offset(, 1)
                    .ListItems(.ListItems.Count).ListSubItems.Add , , c.Offset(, 2)
                End With
                Set c = .Columns(1).FindNext(c)
            Loop While Not c Is Nothing And c.Address <> Adresse
        End If
    End With
ListView2.ListItems.Clear
  With Sheets("feuil2")
    Set c = .Columns(1).Find(ColTb(3), lookat:=xlWhole)
        If Not c Is Nothing Then
            Adresse = c.Address
            Do
                With ListView2
                    .ListItems.Add , , c
                    .ListItems(.ListItems.Count).ListSubItems.Add , , c.Offset(, 1)
                    .ListItems(.ListItems.Count).ListSubItems.Add , , Format(c.Offset(, 2), "hh:mm")
                    .ListItems(.ListItems.Count).ListSubItems.Add , , Format(c.Offset(, 3), "hh:mm")
                    .ListItems(.ListItems.Count).ListSubItems.Add , , Format(c.Offset(, 4), "hh:mm")
                End With
                Set c = .Columns(1).FindNext(c)
            Loop While Not c Is Nothing And c.Address <> Adresse
        End If
    End With
  
End Sub
il y a certainement mieux mais cela peut te dépaner
Au fait passe le bonjour a Yann56 ("merci a tout ceux qui passeront par ici.")lol
A bientôt.
 
Re : listview et clic

Bonjour merci Fhoest et Yann56,

Cela focntionne en y mettant "indexbase" a la place de lignerecherhce, mais par contre je ne peux toujours pas alimeter mes texbox avec le click ( dans ) la listview3.

je continue mes recherche

PS: ton application indique un MsgBox avec le # de la ligne.
 
Re : listview et clic

Cela focntionne en y mettant "indexbase" a la place de lignerecherhce, mais par contre je ne peux toujours pas alimeter mes texbox avec le click ( dans ) la listview3.

je continue mes recherche

PS: ton application indique un MsgBox avec le # de la ligne.
je ne comprend vraiment pas ce que tu veux,tu indique avec indexbase cela fonctionne mais ton code de départ est indexbase,j'ai juste integrer cette variable qui apres une recherche te donne sur tes textboxs la ligne sur laquelle tu click dans la listvieuw3 après une recherche,je pensais que c'était ceci que tu recherchais et pour le messagebox qui renvoi la ligne c'est uniquement pour te faire voir ou se situe le problème que tu ne trouve pas
A+😉
 
Re : listview et clic

ok merci encore Fhoest,

Ce que j'aimerais c'est que lorsque j'inscrit un mot dans la case recherche, quand je clic sur recherche(bouton) que celui- affiche dans le listview3 le résultat ( ce qu'il fait très bien) mais lorsque je click sur le résultat( dans le listview3), j'aimerais qu'il agisse de la même facon que lorsqu'il ( le listview3) s'affiche au lancement de USF et que les info reliés puisse apparaître dans les texbox. j'espère que je n'ai pas trop compliqué

Ou je suis ouvert a un autre procédé, qui pourrait nous permmettre de'effectuer une recherche dans la base tout en y indiquant dans le listview3 le résultat.

merci encore
 
Re : listview et clic

Et bien oui met le code comme je te l'ai donner en n'oubliant pas de mettre le public lignerecherche as long dans le module1.
ensuite tu copie et tu colle les codes que j'ai modifier et test je pense vraiment avoir compris ce que tu voulais dès le départ.
essaie et tiens nous au courant

voila le fichier:

exemple tu lance tu tape dans le textbox1 de recherche "yve" tu as le choix dans la listvieuw3 qui apparait tu click et les textbox du dessous se remplissent
A +
 
Dernière édition:
Re : listview et clic

WoW ok merci on avance bcp....ouf!! un autre petit soucis lorsqu'il ya plus d'un résultat , lorsqu'on clic sur la listview3 (ex il ya 3 nom qui débute par le nom MARTIN, ben quand on appui(clic) sur le 2 MARTIn c'est l'info du premier qui se retrouve dans les textbox...(!!)

encore merci, j'apprends plein chose mais mon dieu que c'est pas facile...
 
Re : listview et clic

et oui il faut bosser en remplissant non plus une variable mais un tableau ou tu iras chercher la bonne valeur par décalage de la listview
exemple sur un tableau rempli tu as par exemple valeur 1 du tableau
TB(1)=ligne 2
TB(2)=ligne 5
TB(3)=ligne 9
tableau TB qui seras préalablement remplis au même endroit que la variable ligne recherche avec une incrémentation en boucle sur un x par exemple
donc une fois rempli si l'item du click=2 par exemple est que la textbox1<>"" alors lignerecherche=TB(2) donc ligne 9-1
et voila plus facile a dire qu'a faire mais pour ce soir plus le temps
BARCA_REAL MADRID oblige
A demain...
 
Re : listview et clic

Bonjour Marleauc et la liste.

Je propose une autre approche à la place de celle de fhoest.


Code:
Private Sub ListView3_Click()
Dim SelItemTxt As String
Dim rngR As Range, c As Range

'SpinBBase = Me.ListView3.SelectedItem.Index
SelItemTxt = Me.ListView3.SelectedItem.SubItems(2)

Set rngR = Sheets("Base").Range("A2:L" & Range("A65000").End(xlUp).Row)
Set c = rngR.Find(SelItemTxt, lookat:=xlPart)
IndexBase = c.Row - 1
SpinBBase = IndexBase
AlimenteTb
End Sub

Lorsque tu "click" sur un Item de la ListView3, au lieu de rechercher l'index absolu (celui de ta base de donnée) en fonction de l'index relatif (celui de ta ListView3),
TB(1)=ligne 2
TB(2)=ligne 5
TB(3)=ligne 9

nous allons rechercher dans ta base, l'index correspondant à l'Item sélectionné en prenant le N° de permis comme critère pour éviter les cas d'homonyne.

Reste à régler l'utilisation du SpinButton afin de le limiter aux éléments de ta ListView3.

A bientôt...
 
Re : listview et clic

Bonjour,

et voici pour le limiter le SpinButton aux éléments de ta ListView3.

Private Sub CommandButton1_Click()
---
---
---
SpinBBase=1
End Sub

puis

Code:
Private Sub SpinBBase_SpinDown()
  
  Dim rngR As Range, c As Range
  Dim SpinIndex As Byte
  Dim SelItemTxt As String
  If Me.ListView3.ListItems.Count = 0 Then Exit Sub

  SpinBBase.Min = 1
  SpinIndex = SpinBBase
  SelItemTxt = Me.ListView3.ListItems(SpinIndex).SubItems(2)
Set rngR = Sheets("Base").Range("A2:L" & Range("A65000").End(xlUp).Row)
Set c = rngR.Find(SelItemTxt, lookat:=xlPart)

IndexBase = c.Row - 1
   
  AlimenteTb
End Sub

Private Sub SpinBBase_SpinUp()
   
 Dim rngR As Range, c As Range
 Dim SpinIndex As Byte
 Dim SelItemTxt As String
 
 If Me.ListView3.ListItems.Count = 0 Then Exit Sub
  
  SpinBBase.Max = Me.ListView3.ListItems.Count
  SpinIndex = SpinBBase
  SelItemTxt = Me.ListView3.ListItems(SpinIndex).SubItems(2)

Set rngR = Sheets("Base").Range("A2:L" & Range("A65000").End(xlUp).Row)
Set c = rngR.Find(SelItemTxt, lookat:=xlPart)

IndexBase = c.Row - 1
  
  AlimenteTb
End Sub

A+
 
Re : listview et clic

salut praetor,

bon matin.. j'ai fais le test tout fonctionne bien pour ce qui soit des choix unique, mais lorsque nous avons plusieurs résultats, le problème persiste, c'est a dire que peut importe la sélection choisie, c'est toujours le premier résultat apparant qui s'affiche dans les textbox.

En passant, je n'aurai jamais, mais jamais pu trouver cette alternative, c,est incroyable. pour l'instant j,indiquerai a mes collègue d'effectuer une recherche par # de permis. ce qui occasionnera qu'une sélection.

merci encore de ton temps et au plaisir!
Remerciement également a Yann-56 et feoest
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
536
Réponses
4
Affichages
480
Réponses
4
Affichages
552
Retour