Listview La 1ere ligne se répête dans certains cas

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 !

Byfranck

XLDnaute Occasionnel
Bonjour à tous
Ci-joint un fichier avec un Usf pour de recherche de mot clef qui me donne quelques problèmes.
La solution doit crever les yeux mais je n'arrive pas à voir ce qui cloche:

Si sur la 1ere ligne de ma feuille le mot clef se répête dans plusieurs cellule de cette ligne, la ligne est affichée 2 fois: 1 fois au début une fois à la fin.
ça ne se produit pas si le mot recherché est dans les lignes suivantes. 😕

Si quelqu'un avec un oeil neuf peut m'aider et me montrer ce qui cloche il est vraiment le bienvenue!


Cordialement
ByFranck
 

Pièces jointes

Re : Listview La 1ere ligne se répête dans certains cas

Bonsoir,
Une variante qui ne stocke qu'une seule fois le numéro de ligne trouvé
Code:
Private Sub CommandButton1_Click()
Dim Plage As Range, C As Range, NLign
Dim T As String, Firstaddress As String, Temp()
Dim x As Integer, i As Integer, j As Integer
Dim DerLgn As Long

T = TextBox1
If T = "" Then Exit Sub
    
With Sheets("Feuil1")
    DerLgn = .UsedRange.Rows.Count + 5 'le tableau commence ligne 6
    Set Plage = .Range(.Cells(8, 1), .Cells(DerLgn, 4))
End With
Set NLign = CreateObject("Scripting.Dictionary")

Set C = Plage.Find(T, , , xlPart)
If Not C Is Nothing Then
    Firstaddress = C.Address
    Do
        If Not NLign.Exists(C.Row) Then NLign.Add C.Row, C.Row
    Set C = Plage.FindNext(C)
    Loop Until C.Address = Firstaddress
End If

Temp = NLign.items

With ListView1
    .ListItems.Clear
    For i = 0 To NLign.Count - 1
        .ListItems.Add , , Sheets("feuil1").Cells(Temp(i), 1)
        x = .ListItems.Count
        For j = 2 To 4
        .ListItems(x).ListSubItems.Add , , Sheets("feuil1").Cells(Temp(i), j)
        Next
    Next
End With

End Sub
A+
kjin
 

Pièces jointes

Re : Listview La 1ere ligne se répête dans certains cas

Bonjour Kjin... il y avait longtemps,

Merci de t'être penché sur mon problème 🙂

en fait ton code fonctionne très bien mais me pose un problème: pour utiliser ta solution j'ai essayé de l'incorporer dans mon code existant et cela me pose 2 problèmes car mon tableau à 247 colonnes:
Dans le listview je n'affiche qu'une partie d'entre elle et avec ta solution je n'ai pas réussi à définir les colonnes à afficher.
l'autre problème est que je dois imbriquer cette recherche au milieu d'autres codes car mon "moteur" de recherche doit faire une recherche sur plusieurs mots clef qui existeraient dans une ligne ... mais en plus chacun de ces mots clef est recherché dans une série de colonnes spécifiques ...
ce ne doit pas être clair ... le mieux est de jetter un oeil sur une version simplifiée ici:
https://www.excel-downloads.com/threads/nb-si-countif-et-valeurs-numeriques-vba.126258/



Si tu as encore un peu de temps pour moi je te remercie d'avance

cordialement
Franck
 

Pièces jointes

Dernière édition:
Re : Listview La 1ere ligne se répête dans certains cas

Bonjour Kjin, ByFranck,

En reprenant le code de ton message d'origine, je te propose cette solution:

Code:
    Set Plage = Application.Intersect(.UsedRange.Cells, .Range(.Cells(8, 1), .Cells(DerLgn, 5)))  'Recherche limitée à cette Plage
    Set B = Plage.Find(T, LookIn:=xlValues, LookAt:=xlPart, [B][COLOR=red]SearchOrder:=xlByRows[/COLOR][/B])
    If Not B Is Nothing Then
      Firstaddress = B.Address
      Do
[B][COLOR=blue]      'on vérifie que l'occurence suivante n'est pas sur la même ligne
        If LastLig <> B.Row Then
[/COLOR][/B]          'blabblablba
          'blalbabla
          'blablablabla
[COLOR=blue][B]        End If
[/B][/COLOR]        'continuer la recherche
[B][COLOR=blue]        LastLig = B.Row[/COLOR][/B]
        Set B = Plage.FindNext(B)
      Loop While Not B Is Nothing And B.Address <> Firstaddress
    End If

Vérifie bien que SearchOrder:=xlByRows
 
Re : Listview La 1ere ligne se répête dans certains cas

Bonjour Skoobi,
Désolé j'ai tardé à me reconnecter .. mais j'ai pas mal de déplacements en ce moment.

J'ai donc repris mon 1 fichier du 04/09. et je l'ai comparé à ta proposition:

chez moi B c'est C et derlig je l'ai appelé lastrow.
J'ai donc eu seulement à ajouter: SearchOrder:=xlByRows.

😱 la recherche sur "toto" donne toujours 2 fois la "ligne ToTo" 😱

C'est pas encore gagné ...

Cordialement Franck
 
- 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

D
Réponses
0
Affichages
722
Dédé82
D
B
Réponses
4
Affichages
2 K
benoitoleron
B
Retour