Recherche multicritere via userform
damtrade
-
Polux31 Messages postés 7219 Statut Membre -
Polux31 Messages postés 7219 Statut Membre -
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 :
puis ça :
ça également :
et enfin :
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 !
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 :
RIEN
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
puis ça :
RecH = C Like "*" And C.Offset(0, -13) Like "UserForm12.CI.Text" _toujours rien
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 & "*"
ça également :
pas mieux
'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
et enfin :
sans plus de succès !!!
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
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
A voir également:
- Recherche multicritere via userform
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Rechercher ou entrer l'adresse mm - recherche google - Guide
- Recherche image - Guide
- Je recherche une chanson - Guide
- Problème recherche de chaine tv thomson - Forum Téléviseurs