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:

Geely

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

Bonjour MichD & Pierrejean

A l'apparition de l'erreur quelles sont les valeurs de i et k ????

k=0 i=42324

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

Je suis avec Excel 2003,donc il y a bien une limite dans les ListBox :(.

J’aurai du choisir une autre piste (que dans ListBox) pour faire mon petit programme de recherche de données d'un fichier csv.

Comment puis je éviter cette limite

Geely
 

laetitia90

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

bonjour tous :):):)
sous excel 2003 tu dois pouvoir remplir 65536 lignes sans pb.... nb.colonne pas de pb non plus dans la mesure que tu utilise .list ou passer par un tablo
exemple pour remplir rapidement une listbox avec tablo dans ton cas
Code:
Private Sub CommandButton1_Click()
 Dim t(), t1(), z As Long, x As Long, i As Long
 ListBox1.Clear
 On Error Resume Next
 t = Feuil1.Range("a10:f" & Feuil1.Cells(Rows.Count, 1).End(xlUp).Row)
 ReDim t1(1 To UBound(t), 1 To 6)
 For i = 1 To UBound(t)
 If t(i, 2) Like "*" & TextBox1 & "*" Then
 x = x + 1
 t1(x, 1) = t(i, 2)
 t1(x, 2) = t(i, 4)
 t1(x, 3) = t(i, 5)
 t1(x, 4) = t(i, 1)
 End If: Next i
 ListBox1.List = t1
End Sub

les colonnes & largeur tu definis dans propritées listbox

pour le reste l'ami pierre jean :):):):) ta donne la soluc..
 

Geely

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

Bonjour Laetitia90

Bonne nouvelle alors:cool:

Mais ça va coincer quand je vais sélectionner une ligne dans la listBox

Comment faire pour afficher plus de 8 colonnes, avant je faisais
Me.ListBox1.List(k, 2) = Cells(i, 13) & " " & Cells(i, 21)



Wei_qi

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
Private Sub ListBox1_Click()
ligne = ListBox1.Column(8)
Rows(ligne).Select
UserForm2.Show


End Sub
 
Dernière édition:

laetitia90

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

bonjour tous:):)
bizarre!!!! chez moi marcher avec un ancien fichier crée sous excel 2003 adapter a 50 colonnes

aujourd'hui utilise 2007 je peus pas tester avec 2003 si quelqu'un peut ???

il suffit de selectionner la plage & etirer jusqu'a 65000 lignes pour voir

Code:
Private Sub CommandButton1_Click()
 Dim t(), t1(), y As Byte, x As Long, i As Long
 listbox1.Clear
 On Error Resume Next
 t = Feuil2.Range("a1:ax" & Feuil2.Cells(Rows.Count, 1).End(xlUp).Row)
 ReDim t1(1 To UBound(t), 1 To 50)
 For i = 1 To UBound(t)
 If t(i, 1) <> "" Then
 x = x + 1
 For y = 1 To 50: t1(x, y) = t(i, y): Next y
 End If
 Next i
 listbox1.List = t1
End Sub

ps :avec le bouton assez long a remplir dans ce cas la on rempli 3250000 items mais dans le cas present uniquement 9 colonnes
 

Pièces jointes

  • listox 50colonne.xls
    35 KB · Affichages: 54
Dernière édition:

laetitia90

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

re tous:):)

bonjour l'ami pierre jean :):)
effectivement une possibilitée autrement il ne nous dit pas tous.... comment il declare ses variables???
son fichier serait le bienvenue pour voir
bisous a+ leti:)
 

Geely

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

Bonjour Pierrejean et Laetitia
Merci de votre aide, très sympa

Il y a peut être un problème ailleurs, alors je joint les deux fichiers, pour être dans les mêmes conditions
Le fichier principale et le fichier .csv
Problème de mémoire a force d'importer les fichiers csv?

Le premier icône permet d'importer le fichier .csv sur la feuille, le deuxième lance la recherche.

La recherche se fait sur la colonne T (taper 12355 ou 12354 comme recherche par exp)

j'obtiens le même problème erreur d’exécution 6 dépassement de capacité
avec Excel 2007

Une petite question supplémentaire: Pourquoi en colonne B le format de la date varie
a partir du 13/09/20012 il inverse la date et le mois 09/12 au lieu de 12/09

Evénement Résultat 13/09/2012 00:01
Evénement Résultat 13/09/2012 00:01
Evénement Résultat 13/09/2012 00:00
Evénement Résultat 09/12/2012 23:46
Evénement Résultat 09/12/2012 23:41
Evénement Résultat 09/12/2012 23:41


Geely
 
Dernière édition:

pierrejean

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

Re

Apres bien des recherches , je tombe sur la cellule T42383 ou il y a ce que l'importation voit comme une date negative
D'autres sont dans le même cas plus loin
A mon avis c'est la que le bât blesse
J'essaie de voir si l'on peut tourner le probleme
 

pierrejean

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

Re

Bonne nouvelle !!

Il suffit de selectionner toute la colonne T et la passer en Format Standard

Par ailleurs ,note de ne mettre Application.DisplayAlerts = False qu'avec la plus grande moderation
Personnellement je ne la met que lorsque je sais quelle alerte elle va masquer .Elle est positionnée juste avant la ligne risquée qui, elle ,est suivie du retablissement de l'alerte
Sans cette ligne on aurait passé un peu moins de temps sur de faux problemes
 

pierrejean

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

Re

Pour l'importation je te suggere ceci qui devrait resoudre le pb des dates
Si besoin tu pourras eventuellement y rajouter un format a ta convenance

Code:
Sub CopierCSV()
Range("A20:BB65530").ClearContents
Range("F2").ClearContents 'efface le nom complet du fichier
Dim Nomfichierentree As String, S As String
Dim w
Dim wcsv
Set w = ThisWorkbook
    'Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    Nomfichierentree = Application.GetOpenFilename("Fichier Csv (*.csv), *.csv")
    If Nomfichierentree = "Faux" Then Exit Sub 'cliquer sur annuler
    'efface
    Range("A20:BB65530").ClearContents
    'Ouvre le fichier texte en séparant les colonnes avec les espaces.
    Workbooks.OpenText Filename:=Nomfichierentree, local:=True
    Set wcsv = ActiveWorkbook
    'copies des données
  w.Sheets("Feuil1").Range("F2") = Nomfichierentree
  wcsv.Sheets(1).Range("A1:" & ActiveSheet.Range("A1").SpecialCells(xlCellTypeLastCell).Address).Copy Destination:=w.Sheets("Feuil1").Range("A20")
  wcsv.Close
  Range("A20:BB65530").Replace What:=",", Replacement:=".", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    Range("A20").Select
    'Rétabli les fonction de messages d'alertes.
    'Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub
 

Si...

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

salut

Si... je puis me permettre :
J’ai travaillé avec les fichiers fournis au message 23.
Avec mon 2010, je ne comprends pas l’anlyse de pierrejean à propos de la colonne T.

J’ai aussi le message d’erreur que l’on peut corriger en remplaçant dans la macro Sub CopierCSV(),
Range("A20:BB65530").ClearContents par Rows("20:65535").Delete *

Pour l’initialisation de l’Userform2, j’ai utilisé la macro dans TrackTool (plus de variable Public mais la variable t() déclarée en première ligne !)
Code:
Private Sub ListBox1_Click()
  Dim t1()
  ReDim t1(1 To UBound(t), 1 To 6)
  For i = 1 To UBound(t)
    If t(i, 20) = ListBox1.List(i, 2) Then
      x = x + 1
      t1(x, 1) = t(i, 3) 'adapter les colonnes
      t1(x, 2) = t(i, 2)
      t1(x, 3) = t(i, 47)
      t1(x, 4) = t(i, 9)
      t1(x, 5) = t(i, 13)
      t1(x, 6) = t(i, 21)
      If x = 5 Then Exit For
    End If
  Next
  UserForm2.ListBox2.List = t1
  UserForm2.Show
End Sub

* La dernière proposition que je viens de tester de pierrejean :) corrige bien le problème (de résidus enregistrés)
 

Geely

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

Bonsoir
Merci SI de t'être également penché sur mon problème.
Rows("20:65535").Delete effectue un nettoyage en profondeur donc.
Mais j'ai toujours le défaut de l'importation sur les dates.

Je viens également de tester la solution de PierreJean. La je n'ai plus de problème de date lors de l'importation ni de message d'erreur d’exécution 6 dépassement de capacité.
Par contre ma Colonne T est maintenant formaté en % et non en standard ce qui me donne des résultats en 0.75 au lieu de 75%
dans mes UserForm
Comment puis je palier à cela ? c'est l'importation qui modifie le format?

Geely
 
Dernière édition:

laetitia90

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

bonjour tous:):)
je me pose la qst.. pourquoi pas faire la boucle directement sur le fichier .csv ??? on gagne du temps a mediter

Code:
Private Sub CommandButton1_Click()
 Dim t(), t1(), z As Long, x As Long, i As Long, ligne As Long
 Application.ScreenUpdating = False 'rajoute
 Windows("aa.csv").Activate 'rajoute
 ListBox1.Clear
 t = Range("a2:ay" & Cells(Rows.Count, 1).End(xlUp).Row) 'modifie
 ReDim t1(1 To UBound(t), 1 To 8)
 For i = 1 To UBound(t)
 If t(i, 20) Like "*" & TextBox1 & "*" Then
 x = x + 1
 t1(x, 1) = t(i, 2)
 t1(x, 2) = t(i, 20)
 t1(x, 3) = t(i, 13)
 t1(x, 4) = t(i, 21)
 t1(x, 5) = t(i, 23)
 t1(x, 6) = t(i, 24)
 t1(x, 7) = t(i, 25)
 t1(x, 8) = t(i, 26)
 End If: Next i
 ListBox1.List = t1
Windows("TrackTool_62.xls").Activate 'rajoute
End Sub

le fichier .csv je le nomme aa pour essai
 

Discussions similaires

Statistiques des forums

Discussions
312 322
Messages
2 087 275
Membres
103 504
dernier inscrit
Marie28