damtrade
-
24 nov. 2013 à 18:06
Polux31
Messages postés6917Date d'inscriptionmardi 25 septembre 2007StatutMembreDernière intervention 1 novembre 2016
-
24 nov. 2013 à 18:12
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
'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