Modifier un code existant pour recherche sous condition

SSIAP2

XLDnaute Occasionnel
Bonjour et bon week end à tous.

je viens soliciter un petit coup de main j'utilise une recherche par USF qui me permet de rechecher sur plusieur feuilles et plusieur plages de cellule un mot clef.

mes feuilles sert à géré des formations en collone E (les dates des formation initial).

je voudais que mon code me permette afficher uniquement les lignes ou la celulle correspondante de la colonne E soit renseigné.

Exemple:

si je recherche le mot lulu sur mes 3 formations dans ma listview celui ci devras me faire apparaitre uniquement les lignes dont la cellule E est renseignée d'une date.

merci d'avance de votre aide

Code:
Sub recherche()
ListView3.ListItems.Clear

Dim Ind As Long, DLig As Long, sht As Worksheet
With ListView3
With .ColumnHeaders
.Clear
 .Add , , "      Source", 0, lvwColumnLeft '/// on met la largeur de colonne à 0
.Add , , "N°", 10
.Add , , "Nom", 80
.Add , , "Pénom", 80
.Add , , "Service", 90, 2
.Add , , " date Derniere Formation", 90, 2
.Add , , "Date limite recyclage", 90, 2
.Add , , "Prévision Formation", 90, 2
.Add , , "Information complémentaire", 100, 2
.Add , , "Commentaire", 100, 2
.Add , , "NDLR", 60, 2
.Add , , "Formation", 120, 2
'.Add , , "Alerte Péremption", 80, 2

End With
.View = lvwReport
.FullRowSelect = False
End With



 Dim S As Worksheet
Dim var
Dim i&
Dim j&
Dim K&
Dim cpt&
Dim Tbl()
Dim bool As Boolean
If TextBox1 = "" Then
  ListView3.ListItems.Clear
  Exit Sub
End If
For Each S In ThisWorkbook.Worksheets
  If Left(S.Name, 9) = "FORMATION" Then   '/// on ne fait la recherche que sur les feuilles dont le nom commence poar FORMATION
    var = S.Range("A5:L" & S.[a65536].End(xlUp).Row)
    For i& = 1 To UBound(var, 1)
      For j& = 1 To UBound(var, 2)
        bool = False
        If CheckBox1 Then
          If CheckBox2 Then
            If var(i&, j&) = TextBox1 Then bool = True
          Else
            If var(i&, j&) Like "*" & TextBox1 & "*" Then bool = True
          End If
        Else
          If CheckBox2 Then
            If UCase(var(i&, j&)) = UCase(TextBox1) Then bool = True
          Else
            If UCase(var(i&, j&)) Like UCase("*") & UCase(TextBox1) & UCase("*") Then bool = True
          End If
        End If
        If bool Then
          cpt& = cpt& + 1
          ReDim Preserve Tbl(1 To 13, 1 To cpt&)
          Tbl(1, cpt&) = S.Name & " L" & i& + 1 & " C" & j& 'nom de la feuille, n° ligne, n° colonne
          For K& = 1 To UBound(var, 2)
            Tbl(K& + 1, cpt&) = var(i&, K&)
          Next K&
          Exit For
        End If
      Next j&
    Next i&
  End If    '///
Next S
If cpt& = 0 Then
  ListView3.ListItems.Clear
  Exit Sub
End If
With ListView3
  .ListItems.Clear
  .View = lvwReport
  .FullRowSelect = True
  .Gridlines = False
  For i& = 1 To UBound(Tbl, 2)
    .ListItems.Add , , Tbl(1, i&)
      For j& = 2 To UBound(Tbl, 1)
        .ListItems(.ListItems.Count).ListSubItems.Add , , Tbl(j&, i&)
        
      
        
      Next j&
  Next i&
End With


End Sub
 

Pièces jointes

  • Classeur2.zip
    19.4 KB · Affichages: 30
  • Classeur2.zip
    19.4 KB · Affichages: 24
  • Classeur2.zip
    19.4 KB · Affichages: 23

James007

XLDnaute Barbatruc
Re : Modifier un code existant pour recherche sous condition

Bonjour,

Je ne sais pas si tu es l'auteur de ce code ... mais j'y vois au moins deux bizarretés ...

1. Pourquoi les variables définies As Long ... continuent-elles à être définies tout le long du code ... ? :confused:

2. A quoi servent les possibles choix Boolean des deux check boxes ...? :confused:

A +
:)
 

James007

XLDnaute Barbatruc
Re : Modifier un code existant pour recherche sous condition

Bonjour,

Il me semblait bien qu'il fallait ... une forme de grand nettoyage ...

Pour info, les deux Checkboxes inutiles sont sur la partie droite de ta UserForm ( il faut l'agrandir ... pour les voir..)

Quant au code, en dehors de la définition des variables, tous les & ne servent pas ...

Ta macro Recherche serait mieux ... dans un module ...

Si je trouve un moment plus tard, je vais essayer de tout nettoyer ...

A +
:)
 

James007

XLDnaute Barbatruc
Re : Modifier un code existant pour recherche sous condition

Re,

Fo_rum vient sans doute de te donner la solution ...

Mais je te joins tout de même ... ton fichier entièrement nettoyé ...

A +
:)
 

Pièces jointes

  • TestSSIAP2.zip
    18.8 KB · Affichages: 25

SSIAP2

XLDnaute Occasionnel
Re : Modifier un code existant pour recherche sous condition

Bonjour forum bonjour james007 j'ai tester vos solutions et vous en remercie mais j'ai certain probleme en ce qui concerne la recherche si dans la recherche je rentre Jean-Marc il ne me trouvent rien alors que avec le code d'origine je pouvais rechercher sur plusieur colonne.
il y a t'il possibilité de retrouver cette fonction merci
 

James007

XLDnaute Barbatruc
Re : Modifier un code existant pour recherche sous condition

Bonjour,

Tu peux essayer le code suivant :

VB:
Private Sub CommandButton1_Click()
   Dim S As Worksheet, i As Long, j As Byte
   With ListView3
    .ListItems.Clear
    If TextBox1 <> "" Then
      For Each S In Worksheets
        If Left(S.Name, 9) = "FORMATION" Then
          For i = 1 To S.Cells(Rows.Count, "B").End(xlUp).Row
            If S.Cells(i, "E") <> "" And S.Cells(i, 2) = TextBox1 Or S.Cells(i, 3) = TextBox1 Then
              .ListItems.Add , , S.Cells(i, 1)
              For j = 2 To 10
                .ListItems(.ListItems.Count).ListSubItems.Add , , S.Cells(i, j)
              Next
               .ListItems(.ListItems.Count).ListSubItems.Add , , S.Name
            End If
          Next i
        End If
      Next
     End If
  End With
End Sub

A +
:)
 

SSIAP2

XLDnaute Occasionnel
Re : Modifier un code existant pour recherche sous condition

Re bonjour james007 et merci une fois de plus de ton aide malheureusement ont reviens à mon probleme du debut il m'affiche toute les ligne meme ceux de la condition
Rapelle: je voudais que mon code me permette afficher uniquement les lignes ou les celulle correspondante de la colonne E soit renseigné.
et la dans ce cas il m'affiche tous les celulle meme quand la E n'est pas renseignée.

me comprend tu
 

Fo_rum

XLDnaute Accro
Re : Modifier un code existant pour recherche sous condition

Re,

il suffit d'ajouter une boucle sur les colonnes :
Code:
Option Compare Text 'pour s'affranchir des Majuscules-Minuscules          <-----
Private Sub CommandButton1_Click()
  Dim S As Worksheet, i As Long, j As Byte, Col As Byte
  ...
  For i = 1 To S.Cells(Rows.Count, "B").End(xlUp).Row
    For Col = 1 To 10                              <-----                                   
      If S.Cells(i, "E") <> "" And S.Cells(i, Col) = TextBox1 Then               <-----
        .ListItems.Add , , S.Cells(i, 1)
        For j = 2 To 10
          .ListItems(.ListItems.Count).ListSubItems.Add , , S.Cells(i, j)
        Next
        .ListItems(.ListItems.Count).ListSubItems.Add , , S.Name
      End If
    Next                                                                              <-----
  Next
... 
End Sub
 

SSIAP2

XLDnaute Occasionnel
Re : Modifier un code existant pour recherche sous condition

Bonjour Fo_rum

donc j'ai essayer de faire je pense tous ce qu'on me demande mais le résultat est peu concluant

j'ai des lignes en double voir en triple de plus les collone non renseignée en E apparaise toujour

je suis vraiment désolé mais comme vous avez put le constater je suis pas super bon en Vba

je vous est mis une Pj avec tous ce que vous m'avez proposé

merci de votre aide
 

Pièces jointes

  • ListViewSi(1) (version 1).xls
    47.5 KB · Affichages: 40

Fo_rum

XLDnaute Accro
Re : Modifier un code existant pour recherche sous condition

re

Bonjour Fo_rum

donc j'ai essayer de faire je pense tous ce qu'on me demande mais le résultat est peu concluant
Regarde bien le dernier code que je t'ai donné sans le mélanger avec d'autres !
Si tu ne veux une recherche que sur les 4 première colonnes essaie
...
For i = 1 To S.Cells(Rows.Count, "B").End(xlUp).Row
For Col = 1 To 4 'pour une recherche sur les 4 premières colonnes !
If S.Cells(i, "E") <> "" And S.Cells(i, Col) = TextBox1 Then
.ListItems.Add , , S.Cells(i, 1)
For j = 2 To 10
.ListItems(.ListItems.Count).ListSubItems.Add , , S.Cells(i, j)
Next
.ListItems(.ListItems.Count).ListSubItems.Add , , S.Name
End If
Next
Next
...

la boucle "bleue" permet de tester les 4 premières colonnes de chaque ligne, étant entendu qu'elles aient des contenus différents les uns des autres !

Remarque : je suis passé par "une information" pour les couleurs mais l'indentation* (décalages des lignes) n'est pas prise en compte.
* indispensable pour une bonne lisibilité du code
 
Dernière édition:

SSIAP2

XLDnaute Occasionnel
Re : Modifier un code existant pour recherche sous condition

Re bonjour

j'ai tester comme ceci

Private Sub CommandButton1_Click()
For i = 1 To S.Cells(Rows.Count, "B").End(xlUp).Row
For Col = 1 To 4 'pour une recherche sur les 4 premières colonnes !
If S.Cells(i, "E") <> "" And S.Cells(i, Col) = TextBox1 Then
.ListItems.Add , , S.Cells(i, 1)
For j = 2 To 10
.ListItems(.ListItems.Count).ListSubItems.Add , , S.Cells(i, j)
Next
.ListItems(.ListItems.Count).ListSubItems.Add , , S.Name
End If
Next
Next

End Sub
il me dit reference non qualifier
 

SSIAP2

XLDnaute Occasionnel
Re : Modifier un code existant pour recherche sous condition

Re a tous

merci forum pour ton fichier j'ai bien compris sur ce coup là comme je voulais que la recherche ce fasse que sur les onglets formation j'ai fais comme ceci
Code:
Dim col As Integer
 Dim S As Worksheet, i As Long, j As Byte
  With ListView3
    .ListItems.Clear
    If TextBox1 <> "" Then
      For Each S In Worksheets
        If Left(S.Name, 2) = "FO" Then
        For i = 1 To S.Cells(Rows.Count, "B").End(xlUp).Row
          For col = 1 To 4  'pour une recherche sur les 4 premières colonnes !
            If S.Cells(i, "E") <> "" And S.Cells(i, col) = TextBox1 Then
              .ListItems.Add , , S.Cells(i, 1)
              For j = 2 To 10
                .ListItems(.ListItems.Count).ListSubItems.Add , , S.Cells(i, j)
              Next
              .ListItems(.ListItems.Count).ListSubItems.Add , , S.Name
            End If
          Next
        Next
      
    End If
  Next
  End If
  End With
bout de code pris à l'origine du premier fichier joint

tous cela pour dire que cela fonctionne parfaitement un grand grand merci pour ta patience et ton aide.

merci également à james007 qui m'a bien aider à bientot a vous 2 et encore merci:)
 

Discussions similaires

Réponses
11
Affichages
296

Statistiques des forums

Discussions
312 225
Messages
2 086 412
Membres
103 202
dernier inscrit
Claire2BM