Recherche valeur avec multi critères
Bonjour,
Je sèche sur un problème malgré plusieure tentatives.*
Sur un tableau selon une entrée d'un nom par rapport à une hauteur et largeur correspont à un tarif défini
Jusqu'a la et avec l'aide du forum cela fonctionne
Le problème c'est que j'ai plusieures feuilles de tarif avec des noms différents et selon que l'on met un tarif qui correspond à une feuille ou une autre le tarif correspondand au nom doit estre pris.
Ma question comment pouvoir faire réference au tarif correspondant si je change le tarif de feuille
Je joint un fichier pour explication
A vous lire merci beaucoup
Bonsoir,
Une proposition avec la fonction Indirect().
Cdlt
Bonsoir Jean Eric,
Je viens de regarder ta réponse c'est pas mal du tout , un hic cependant en ce qui concerne les H et L du tableau ce sont des colonnes et lignes de base pour le tarif c'est à dire qui fixe le trarif de ce fait les dimensions sont entrées sans valeur juste par rapport au tableau par ex. si je rentre 2510 en largeur c'est la valeur sup. qui doit estre prise en compte.
dans ta proposition avec la liste déroulante on ne peut entrer autre que ce choix.Si tu peux m'aider à ce sujet
merci encorre.
Je vais essayer de voir si je peut résoudre en attendant je validerais plus tard
Encorre un grand merci car cela à bien fait évoluer ce fichu projet
cordialement CLAUDE64
Re bonsoir ou Bonjour Jean Eric,
je viens de faire quelque manip et tout est rentré dans l'ordre sur mon fichier réel ça fonctionne à merveille
Merci et bravo
Cdt
Claude64
Bonjour Jean Eric,
Merci pour tya réponse je ne dirais qu'un seul mot c'est excellent
Cordialement
Claude64
Bonjour,
je profite de ce post car ai un peu le même 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 & "*" Thenessai3
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)) Thenessai5
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 = "") Thenen mode debogage, on voit bien le curseur passé mais ne pas calculer !
0ej 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
Pas glop-glop de squatter un post (erreur nouveau venu)
Sinon ton fichier serait plus utile que ton code
Tu y indiques ce que tu dois trouver (donnes des exemples de résultat à obtenir)
Le sujet est clos. Il est préférable que tu crées un nouveau sujet.
Et pour recevoir une aide, mets ton fichier en ligne, sinon les réponses vont être peu nombreuses, sinon nulles.
Cdlt