Recherche multicritere via userform

Bonjour,

Je viens vers vous car j'ai un problème depuis plusieurs jours sur mon code vb sous excel.
j'ai un classeur dans lequel se trouve plusieurs feuilles.
j'ai un userform avec 3 listbox et 5 textbox.

l'idée est que quelque soit la ou les listbox et / ou textbox renseignés, le résultat est la ligne correspondante aux critères qui s'affiche dans deux listview.

tout fonctionne sauf :

le programme ne rentre pas dans mon code à la ligne où je demande la recherche par critère.

j'ai tenté ceci :


If C Like "*" And C.Offset(0, -13) Like "UserForm12.CI.Text" _
Or C.Offset(0, -14) Like "*" & UserForm12.TextAta.Text & "*" _
Or C.Offset(0, -12) Like "*" & UserForm12.ListeZone.Value & "*" _
Or C.Offset(0, -11) Like "*" & UserForm12.txtCadre.Text & "*" _
Or C.Offset(0, -10) Like "*" & UserForm12.Txtlisse.Text & "*" _
Or C.Offset(0, -15) Like "*" & UserForm12.CoRSP.Text & "*" _
Or C.Offset(0, -3) Like "*" & UserForm12.Credac.Text & "*" _
Or C.Offset(0, -9) Like "*" & UserForm12.Motcle.Text & "*" Then
RIEN
puis ça :

RecH = C Like "*" And C.Offset(0, -13) Like "UserForm12.CI.Text" _
Or C.Offset(0, -14) Like "*" & UserForm12.TextAta.Text & "*" _
Or C.Offset(0, -12) Like "*" & UserForm12.ListeZone.Value & "*" _
Or C.Offset(0, -11) Like "*" & UserForm12.txtCadre.Text & "*" _
Or C.Offset(0, -10) Like "*" & UserForm12.Txtlisse.Text & "*" _
Or C.Offset(0, -15) Like "*" & UserForm12.CoRSP.Text & "*" _
Or C.Offset(0, -3) Like "*" & UserForm12.Credac.Text & "*" _
Or C.Offset(0, -9) Like "*" & UserForm12.Motcle.Text & "*"
toujours rien

ça également :


'If C <> "" And (UserForm12.CI.Text = "" Or UserForm12.CI.Text = C.Offset(0, -13)) _
And (UserForm12.TextAta.Text = "" Or UserForm12.TextAta.Text = C.Offset(0, -14)) _
And (UserForm12.ListeZone.Text = "" Or UserForm12.ListeZone.Text = C.Offset(0, -12)) _
And (UserForm12.txtCadre.Text = "" Or UserForm12.txtCadre.Text = C.Offset(0, -11)) _
And (UserForm12.Txtlisse.Text = "" Or UserForm12.Txtlisse.Text = C.Offset(0, -10)) _
And (UserForm12.CoRSP.Text = "" Or UserForm12.CoRSP.Text = C.Offset(0, -15)) _
And (UserForm12.Credac.Text = "" Or UserForm12.Credac.Text = C.Offset(0, -3)) _
And (UserForm12.Motcle.Text = "" Or UserForm12.Motcle.Text = C.Offset(0, -9)) Then

pas mieux
et enfin :


If C Like "*" And IIf(C.Offset(0, -13) = UserForm12.CI.Text, C.Offset(0, -13) = UserForm12.CI.Text, UserForm12.CI.Text = "") _
'And IIf(C.Offset(0, -14) = UserForm12.TextAta.Text, C.Offset(0, -14) = UserForm12.TextAta.Text, UserForm12.TextAta.Text = "") _
And IIf(C.Offset(0, -12) = UserForm12.ListeZone.Value, C.Offset(0, -12) = UserForm12.ListeZone.Value, UserForm12.ListeZone.Value = "") _
And IIf(C.Offset(0, -11) = UserForm12.txtCadre.Text, C.Offset(0, -11) = UserForm12.txtCadre.Text, UserForm12.txtCadre.Text = "") _
And IIf(C.Offset(0, -10) = UserForm12.Txtlisse.Text, C.Offset(0, -10) = UserForm12.Txtlisse.Text, UserForm12.Txtlisse.Text = "") _
And IIf(C.Offset(0, -15) = UserForm12.CoRSP.Text, C.Offset(0, -15) = UserForm12.CoRSP.Text, UserForm12.CoRSP.Text = "") _
And IIf(C.Offset(0, -3) = UserForm12.Credac.Text, C.Offset(0, -3) = UserForm12.Credac.Text, UserForm12.Credac.Text = "") _
And IIf(C.Offset(0, -9) = UserForm12.Motcle.Text, C.Offset(0, -9) = UserForm12.Motcle.Text, UserForm12.Motcle.Text = "") Then

sans plus de succès !!!

en mode debogage, on voit bien le curseur passé mais ne pas calculer !
je vous joins également le code complet si cela peut vous servir ...

Merci pour votre aide !

 
Sub RecH()

'Déclaration des variables
Dim G, F, C, D, d1, firstAddress, n As Integer
Dim Plage, PlaGe1, PlaGe2, plage3
Dim LiGne, ligne1, RecH
Dim Nom, MSN, Fich As String
Dim x As Integer
Dim trouve As Boolean

' G représente la nouvelle ligne de la listview ou les données vont êtres écrites
' F représente le numéro de feuille qui va être analisée
' C représente chaque cellule de la plage A2 à A et le numéro de la dernière ligne de la colonne A
' D représente le nombre de colonnes de la listview à remplir sauf la première
' firstAddress représente la cellule de la colonne A dont les critères correspondes a la recherche
' si c'est le cas, on vérifie que l'adresse soit différente de la ligne de titre et différent de vide
' Plage représente "= Range(firstAddress).Offset(0, D)" soit la cellule trouvée plus le décalage a droite (D) de 1 à 5 (boucle)

'Suspension du raffraichissement de l'écran
Application.ScreenUpdating = False

'Vidage du contenu de la listview
UserForm12.ListView1.ListItems.Clear
UserForm12.ListView2.ListItems.Clear
'Mise à 1 de la variable G correspondante au nombre de lignes de recherche
G = 1
n = 1
'Mise en place de la recherche en partant de la dernière feuille vers la premiere

ligne1 = Workbooks("Occurences.xlsm").Sheets("Feuil1").Range("K" & "65536").End(xlUp).Row
Set plage3 = Workbooks("Occurences.xlsm").Sheets("Feuil1").Range("K" & "11:" & "K" & ligne1)
With plage3
For F = Sheets.Count To 1 Step -1
For x = 11 To Workbooks("Occurences.xlsm").Sheets("Feuil1").Range("K65536").End(xlUp).Row
Fich = Workbooks("Occurences.xlsm").Sheets("Feuil1").Cells(x, "k").Value
Nom = Workbooks("Occurences.xlsm").Sheets("Feuil1").Cells(x, "k").Offset(0, -10).Value

If Sheets(F).name = Nom Then
trouve = True
End If

If Not trouve Then
Exit For
End If

'Activation de la feuille
Sheets(Nom).Activate

'MsgBox (ActiveSheet.name)

'Définition de la plage de recherche sur la feuille active

LiGne = Sheets(Nom).Range("Q" & "8:" & "Q" & "65536").End(xlUp).Row + 1
Set Plage = Sheets(Nom).Range("Q" & "8:" & "Q" & LiGne)
For Each C In Plage

If C Like "*" And C.Offset(0, -13) Like "UserForm12.CI.Text" _
Or C.Offset(0, -14) Like "*" & UserForm12.TextAta.Text & "*" _
Or C.Offset(0, -12) Like "*" & UserForm12.ListeZone.Value & "*" _
Or C.Offset(0, -11) Like "*" & UserForm12.txtCadre.Text & "*" _
Or C.Offset(0, -10) Like "*" & UserForm12.Txtlisse.Text & "*" _
Or C.Offset(0, -15) Like "*" & UserForm12.CoRSP.Text & "*" _
Or C.Offset(0, -3) Like "*" & UserForm12.Credac.Text & "*" _
Or C.Offset(0, -9) Like "*" & UserForm12.Motcle.Text & "*" Then

RecH = C Like "*" And C.Offset(0, -13) Like "UserForm12.CI.Text" _
Or C.Offset(0, -14) Like "*" & UserForm12.TextAta.Text & "*" _
Or C.Offset(0, -12) Like "*" & UserForm12.ListeZone.Value & "*" _
Or C.Offset(0, -11) Like "*" & UserForm12.txtCadre.Text & "*" _
Or C.Offset(0, -10) Like "*" & UserForm12.Txtlisse.Text & "*" _
Or C.Offset(0, -15) Like "*" & UserForm12.CoRSP.Text & "*" _
Or C.Offset(0, -3) Like "*" & UserForm12.Credac.Text & "*" _
Or C.Offset(0, -9) Like "*" & UserForm12.Motcle.Text & "*"

' MsgBox (RecH)

' If C <> "" And (UserForm12.CI.Text = "" Or UserForm12.CI.Text = C.Offset(0, -13)) _
'And (UserForm12.TextAta.Text = "" Or UserForm12.TextAta.Text = C.Offset(0, -14)) _
'And (UserForm12.ListeZone.Text = "" Or UserForm12.ListeZone.Text = C.Offset(0, -12)) _
'And (UserForm12.txtCadre.Text = "" Or UserForm12.txtCadre.Text = C.Offset(0, -11)) _
' And (UserForm12.Txtlisse.Text = "" Or UserForm12.Txtlisse.Text = C.Offset(0, -10)) _
' And (UserForm12.CoRSP.Text = "" Or UserForm12.CoRSP.Text = C.Offset(0, -15)) _
' And (UserForm12.Credac.Text = "" Or UserForm12.Credac.Text = C.Offset(0, -3)) _
' And (UserForm12.Motcle.Text = "" Or UserForm12.Motcle.Text = C.Offset(0, -9)) Then

'If C Like "*" And IIf(C.Offset(0, -13) = UserForm12.CI.Text, C.Offset(0, -13) = UserForm12.CI.Text, UserForm12.CI.Text = "") _
' And IIf(C.Offset(0, -14) = UserForm12.TextAta.Text, C.Offset(0, -14) = UserForm12.TextAta.Text, UserForm12.TextAta.Text = "") _
'And IIf(C.Offset(0, -12) = UserForm12.ListeZone.Value, C.Offset(0, -12) = UserForm12.ListeZone.Value, UserForm12.ListeZone.Value = "") _
'And IIf(C.Offset(0, -11) = UserForm12.txtCadre.Text, C.Offset(0, -11) = UserForm12.txtCadre.Text, UserForm12.txtCadre.Text = "") _
'And IIf(C.Offset(0, -10) = UserForm12.Txtlisse.Text, C.Offset(0, -10) = UserForm12.Txtlisse.Text, UserForm12.Txtlisse.Text = "") _
'And IIf(C.Offset(0, -15) = UserForm12.CoRSP.Text, C.Offset(0, -15) = UserForm12.CoRSP.Text, UserForm12.CoRSP.Text = "") _
'And IIf(C.Offset(0, -3) = UserForm12.Credac.Text, C.Offset(0, -3) = UserForm12.Credac.Text, UserForm12.Credac.Text = "") _
'And IIf(C.Offset(0, -9) = UserForm12.Motcle.Text, C.Offset(0, -9) = UserForm12.Motcle.Text, UserForm12.Motcle.Text = "") Then

'Alors on place l'adresse de la variable de firstaddress
firstAddress = C.Address
If firstAddress = "$Q$" & LiGne And C <> "" Then
With ThisWorkbook.ActiveSheet
'On rempli la première colonne de la listview avec la valeur de la variable
UserForm12.ListView1.ListItems.Add , , n
'UserForm12.ListView2.ListItems.Add , , n
' Set PlaGe = Range(firstAddress).Offset(0, -1)
' UserForm12.ListView1.ListItems(G).ListSubItems.Add , , PlaGe
Set Plage = Range(firstAddress).Offset(0, -16)
UserForm12.ListView1.ListItems(G).ListSubItems.Add , , ActiveSheet.name
Set Plage = Range(firstAddress).Offset(0, -15)
UserForm12.ListView1.ListItems(G).ListSubItems.Add , , (Range(firstAddress).Offset(0, -16))
Set Plage = Range(firstAddress).Offset(0, -14)
UserForm12.ListView1.ListItems(G).ListSubItems.Add , , Plage
Set Plage = Range(firstAddress).Offset(0, -13)
UserForm12.ListView1.ListItems(G).ListSubItems.Add , , Plage
Set Plage = Range(firstAddress).Offset(0, -12)
UserForm12.ListView1.ListItems(G).ListSubItems.Add , , Plage
Set Plage = Range(firstAddress).Offset(0, -11)
UserForm12.ListView1.ListItems(G).ListSubItems.Add , , Plage
Set Plage = Range(firstAddress).Offset(0, -10)
UserForm12.ListView1.ListItems(G).ListSubItems.Add , , Plage
Set Plage = Range(firstAddress).Offset(0, -9)
UserForm12.ListView1.ListItems(G).ListSubItems.Add , , Plage
Set Plage = Range(firstAddress).Offset(0, -8)
UserForm12.ListView1.ListItems(G).ListSubItems.Add , , Plage

With ListView2

.ListItems.Add , , n
End With

Set Plage = Range(firstAddress).Offset(0, -7)
UserForm12.ListView2.ListItems(G).ListSubItems.Add , , Plage
Set Plage = Range(firstAddress).Offset(0, -5)
UserForm12.ListView2.ListItems(G).ListSubItems.Add , , Plage
Set Plage = Range(firstAddress).Offset(0, -4)
UserForm12.ListView2.ListItems(G).ListSubItems.Add , , Plage
Set Plage = Range(firstAddress).Offset(0, -3)
UserForm12.ListView2.ListItems(G).ListSubItems.Add , , Plage
Set Plage = Range(firstAddress).Offset(0, -2)
UserForm12.ListView2.ListItems(G).ListSubItems.Add , , Plage
Set Plage = Range(firstAddress).Offset(0, -1)
UserForm12.ListView2.ListItems(G).ListSubItems.Add , , Plage

n = n + 1
End With
'On rajoute 1 à G afin de déterminer la prochaine ligne à remplir dans la listview
G = G + 1

' End If
'LiGne = LiGne + 1
End If
End If
Next C

Next x
Next F
End With

If UserForm12.ListView1.ListItems.Count = 0 Then MsgBox "Pas de résultat trouvé", vbOKOnly, "FIN DE RECHERCHE"
Application.ScreenUpdating = True

End Sub

1 réponse

  1. Bonjour,

    Merci de ne pas multiplier les threads avec le même sujet
    0