RESOLU afficher les résultats dans Userform2 après une recherche

Geely

XLDnaute Occasionnel
Bonsoir le Forum

Ma feuille se décompose en deux étapes: j'ouvre un UserForm1 pour faire une recherche d'une identité.
Le résultat est affiché dans une ListBox. jusque là pas de problème.
exemple: Si je tape "pomme" dans identité et lance la recherche, j'ai la liste des lignes ayant le mot "pomme"
ensuite si je clic sur une ligne j'ouvre UserForm2 (c'est là que je bloque) pour afficher cinq lignes qui suivent ma sélection par le clic ayant le mot "controle" en colonne C.

En espérant que le fichier vous aidera a comprendre mon problème.


Geely
 

Pièces jointes

  • geely4.xls
    975.5 KB · Affichages: 85
  • geely4.xls
    975.5 KB · Affichages: 87
  • geely4.xls
    975.5 KB · Affichages: 91
Dernière édition:

MichD

XLDnaute Impliqué
Re : afficher les résultats dans Userform2 après une recherche

Bonjour,

Le code dans ton formulaire :

VB:
Private Sub CommandButton1_Click()
  K = 0
With Me.ListBox1
    .Clear
    .ColumnCount = 6
    .ColumnWidths = "85;0;75;40;0;40"
End With
    
If Me.TextBox1 = "" Then Me.TextBox1 = "*"
    
With Feuil1
    For i = 10 To .[A65530].End(xlUp).Row
        If .Cells(i, 2) Like "*" & Me.TextBox1 & "*" Then
            Me.ListBox1.AddItem
            Me.ListBox1.List(K, 0) = .Cells(i, 2) 'identité
            Me.ListBox1.List(K, 1) = .Cells(i, 3) 'Contrôle
            Me.ListBox1.List(K, 2) = .Cells(i, 4) 'test
            Me.ListBox1.List(K, 3) = .Cells(i, 5) 'type
            Me.ListBox1.List(K, 4) = .Cells(i, 6) 'Ok nok
            Me.ListBox1.List(K, 5) = .Cells(i, 1) 'ligne
            K = K + 1
        End If
    Next i
End With
End Sub
'--------------------------------------------------------------------------
Private Sub ListBox1_Click()
Dim T(0 To 4, 0 To 4), A As Long
Dim K As Integer, B As Long, P As Integer
Dim Arr(), Elt As Variant

'Numéro des colonnes à afficher dans le listbox
Arr = Array(0, 2, 4)

With Me.ListBox1
    A = .ListCount
    For B = 0 To A - 1
        If LCase(.List(B, 1)) = LCase("Contrôle") Then
            For Each Elt In Arr
                T(K, P) = .List(B, Elt)
                P = P + 1
             Next
             P = 0
             'k = compteur jusqu'à 5
             K = K + 1
        End If
        If K = 5 Then Exit For
   Next
End With
    
With UserForm2
    .ListBox2.List = T
    Load Me
End With
Me.Hide
UserForm2.Show
'si besoin
'Unload Me
End Sub
 
Dernière édition:

Geely

XLDnaute Occasionnel
Re : afficher les résultats dans Userform2 après une recherche

Bonjour
merci MichD pour ton aide.

Je n'arrive pas a afficher le résultat dans l'Userform2, Les 5 cinq lignes doivent être pourtant bien là.

Geely
 

Pièces jointes

  • geely5.zip
    175 KB · Affichages: 67
Dernière édition:

Geely

XLDnaute Occasionnel
Re : afficher les résultats dans Userform2 après une recherche

Je me suis mal expliqué, la recherche dans UserForm2 doit trouver les Cinq lignes qui suivent la sélection dans Userform1 ayant le mot "contrôle" mais cette nouvelle recherche se fait toujours sur la feuille et pas dans la liste de UserForm1

Geely
 

Geely

XLDnaute Occasionnel
Re : afficher les résultats dans Userform2 après une recherche

Bonjour Pierrejean

Super, merci,. ça fonctionne.
Je l'adapte à mon fichier, Il y a 50 000 à 60 000 lignes en espérant qu'il n'y aura pas trop de ralentissements.

Geely
 

Geely

XLDnaute Occasionnel
Re : afficher les résultats dans Userform2 après une recherche

Bon j'ai essayé aussi le fichier de MichD ça marche aussi mais des que j'adapte l'un ou l'autre a mon fichier j’obtiens une erreur
1004 la methode Range de l'objet Global à échoué avec celui de Pierrejean; et un userform2 désespérément vide

Geely
 

Geely

XLDnaute Occasionnel
Re : afficher les résultats dans Userform2 après une recherche

Bonjour Pierrejean

Et non, des heures a chercher... Merci Pierrejean
ce qui est étrange, c'est que si j'avais moins de cinq colonnes dans ma ListBox je n'avait pas d'erreur.
Je continu de tester.
une autre question, J'importe dans mon tableau ou j'effectue la recherche, un fichier csv ( beaucoup de lignes).
Et le format des cellules copiées qui comportent un date est modifié au lien de rester en standard.
Une piste?
Code:
With ActiveWorkbook
        S = "A1:" & ActiveSheet.Range("A1").SpecialCells(xlCellTypeLastCell).Address
        ActiveSheet.Range(S).Copy
        .Close
    End With
    Range("F2") = Nomfichierentree
    Range("A20").Select
     ActiveSheet.Paste
    'Astuce pour rendre les cellules au format standard
   ' Columns("A:X").Select
    Selection.Replace What:=",", Replacement:=".", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Range("A20").Select
Geely
 
Dernière édition:

Geely

XLDnaute Occasionnel
Re : afficher les résultats dans Userform2 après une recherche

La solution de Pierrejean fonctionne bien, j'ai pu l'adapter sans problème après l'oubli du code: Public ligne

Mais maintenant.
Si j'utilise un tableau trop important (supérieur à 40 000 lignes ) j'obtiens une erreur d'exécution 6 dépassement de capacité.

Code:
Private Sub CommandButton1_Click()
Dim i As Long
Dim k As Long
  k = 0
  Me.ListBox1.Clear
  If Me.TextBox2 = "" Then Me.TextBox2 = "*"
  If Me.TextBox1 = "" Then Me.TextBox1 = "*"
  
  For i = 21 To [A65530].End(xlUp).Row
   If Cells(i, 20) Like "*" & Me.TextBox1 & "*" _
     And Cells(i, 24) Like TextBox2 Then
      Me.ListBox1.AddItem
      Me.ListBox1.List(k, 0) = Cells(i, 2) 'date
      Me.ListBox1.List(k, 1) = Cells(i, 20) 'identité
      Me.ListBox1.List(k, 2) = Cells(i, 13) & " " & Cells(i, 21) 'test + résultat
      Me.ListBox1.List(k, 3) = Cells(i, 23) & ". Lot: " & Cells(i, 24) 'réactif-1 + lot-1
      Me.ListBox1.List(k, 4) = Cells(i, 25) & ". Lot: " & Cells(i, 26) 'réactif-2 + lot-2
      Me.ListBox1.List(k, 5) = Cells(i, 47) & ". Lot: " & Cells(i, 48) 'Controle-1 + lot-1
      Me.ListBox1.List(k, 6) = Cells(i, 49) & ". Lot: " & Cells(i, 50) 'Controle-2 + lot-2
      Me.ListBox1.List(k, 7) = Cells(i, 22) 'lot Bobine
      Me.ListBox1.List(k, 8) = i
      k = k + 1
   End If
 Next i
End Sub
malgré la déclaration en type Long de la variable, l'erreur persiste.
Peut être faut il convertir la variable en type "CLong" , mais comment?


Geely
 
Dernière édition:

MichD

XLDnaute Impliqué
Re : afficher les résultats dans Userform2 après une recherche

Je viens de tester pour les contrôles ListBox et ComboBox
émanant de la boîte à outils contrôle sur la feuille de calcul
avec une version Excel 2013

Si tu as une version antérieure à Excel 2007, la limite doit être
inférieure....

Ce code s'exécute sans problème. Je suppose qu'il en est de
même pour ces contrôles dans le formulaire.
'-----------------------
Sub test()
With Feuil1
With .Range("A1:A1000000")
Feuil1.ComboBox2.List = .Value
Feuil1.ListBox1.List = .Value
End With
End With
End Sub
'-----------------------

Pour ce qui est du combobox et Listbox issus de la boîte à outils
"Formulaire" dans la feuille de calcul, leur limite est de : 32767
 

Discussions similaires

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16