Reccherche multicritere dans userform

Bonjour,

désolé je ne peux vous adresser le fichier en entier poru des raisons de confidentialité.

voici mon problème :

j'ai un classeur avec X onglets.

j'ai fais un userform avec listbox et textbox pour une recherche multicritere.

là ais deux problèmes :

mon code fonctionne mais ne "passe pas" par le code de recherche multi.

cela fais des jours que je teste nombre de code sans aucuns résultats.

aussi je viens vers vous car ais souvent suivi vos conseils éclairés.

voici les codes qui plantent puis le codes en entier.

J'espère que vous aurez de bonnes pistes pour moi car mon boss attends les résultats et là suis dans une impasse.

essai 1

Evaluate ("=sum(((Cells(x1, ""Q"").Offset(0, -12))= " & UserForm12.CI.Text & ") * ((Cells(x1, ""Q"").Offset(0, -13)) = " & UserForm12.TextAta.Text & ") * ((Cells(x1, ""Q"").Offset(0, -11))=" & UserForm12.ListeZone.Text & ") * ((Cells(x1, ""Q"").Offset(0, -10))=" & UserForm12.txtCadre.Text & ") * (Cells(x1, ""Q"").Offset(0, -9))=" & UserForm12.Txtlisse.Text & ") * ((Cells(x1, ""Q"").Offset(0, -14))= " & UserForm12.CoRSP.Text & ") * ((Cells(x1, ""Q"").Offset(0, -3))=" & UserForm12.Credac.Text & ") * ((Cells(x1, ""Q"").Offset(0, -8))=" & UserForm12.Motcle.Text & "))")

essai 2

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

essai3

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 & "*"

essai 4

 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

essai5

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 
.

Bonjour

damtrade a écrit :

désolé je ne peux vous adresser le fichier en entier poru des raisons de confidentialité.

Pas besoin de tout

Tu enlèves tout ce qui n'est en rapport avec ton problème et si besoin s'en fait sentir tu anonymises les données personnelles

Une vingtaine de ligne dans les bases de données devrait suffire

c'est fait ais un spot perso

Bonjour

damtrade a écrit :

c'est fait ais un spot perso

Si tu veux traduire en langage "vieux"

merci

voici le fichier sans info sensibles

merci d'avance

Dans un classeur, j'ai rapatrié sur plusieurs feuilles les fichiers dont j'ai besoin.

je souhaiterais via l'userform, faire une recherche basée soit sur un critère, soit sur plusieurs.

J'ai également un textbox pour une recherche syntaxique sur une colonne précise.

au finale, je voudrais que les résultats s'affichent dans les deux listview du usrf avec possibilité de l'imprimer avec mise en page ou de le copier dans un classeur a part.

Aucuns de mes essais de code ne fonctionnent. je désespère. j'ai même tenté via une feuille (nommée filtre) mais là aussi rien ne marche.

j'ai vraiment besoin de votre aide sur ce coup.

je vous joins le fichier oté des info sensibles..

35occurences1.xlsm (82.05 Ko)

C'est incroyable comment la politesse se perd (suis de l'ancienne génération )

Un essai : Juste la partie recherche

Bonsoir

Oupss

effectivement Banzai64 milles pardons pour mon incivilité mais tellement pris par mon problème que j'en ais oublié la bienséance.

pour ton fichier : MILLE MERCI !!!! c'est tout à fait ça !!!

et en plus ton code est tellement épuré !

bref du super beau et bon travail

tu m'enlève une sacrée épine du pied.

juste ..... si je peux ... ce serait la cerise sur le gâteau :

j'aimerais que l'utilisateur puisse choisir entre imprimer format excel le résultat ou l'enregistrer dans un autre classeur de son choix.

de plus est il possible de synchroniser les scroll des deux listview ?

encore merci pour ton aide

Chapeau bas

Bonsoir

Pas d'idée pour l'impression ou pour la sauvegarde

Banzai64 a écrit :

est il possible de synchroniser les scroll des deux listview ?

Pourquoi ne pas tout mettre sur la même Listview ?

Bonsoir,

en fait je n'ai pas assez de place pour tout mettre dans une seule listview.

la partie commentaire prend bcp.

des idées ou des pistes pour placer dans un classeur ?

synchroniser l'ascenseur verticale des listview?

merci

Bonsoir

Le problème sera toujours le même, que tu aies 2 ListView ou 1 seule

Pour voir tout le commentaire il te faudra occulter les autres colonnes (c'est à dire que tu n'auras que la colonne commentaire pour la lire)

Ensuite il faudra bien diminuer cette colonne pour visualiser les autres colonnes

A quoi te sert d'avoir le numéro de ligne et accessoirement le nom de la page ?

Fais un exemple de résultat que tu voudrais obtenir

Pas trop compliqué car c'est la macro qui devra le faire

Rechercher des sujets similaires à "reccherche multicritere userform"