|
|
|
|
Bonjour,
Je poursuis mon travail sur un système de suivi assez audacieux (pour ce qui me concerne) et voici un point qui me bloque :
Je cherche à permettre à l'utilisateur d'établir une recherche à un ou plusieurs critères combinés depuis un userform et à en restituer le résultat dans un formulaire (ou un autre userform).
Essayons d'illustrer mes propos...
=> supposons ces 4 critères dans le userform de recherche : Nom - Prénom - Age - Profession
=> l'utilisateur recherche les "Dupont" ayant "35ans" (critères combinés)
=> une fois le bouton "Rechercher" activé, la macro procède à cette recherche dans la feuille contenant les données et
=> ouvre un formulaire (ou un userform peu importe finalement) avec le résultat, c'est à dire la ligne complète des informations correspondantes à la recherche mise en forme dans ce formulaire.
En outre, j'aime semble-t-il me compliquer la vie, il doit être possible d'avoir une échapatoire en cas de réponses multiples (plusieurs Dupont agés de 35 ans...) ; dans ce cas, un formulaire multiple peut-il s'envisager?
Enfin, désolé je suis pénible, peut-on imaginer un système permettant une recherche assistée (par exemple, en recherchant les "Dupont" dont on ignore si la dernière lettre est un "D" ou un "T" on pourrait rechercher les "Dupon%")
Je vous remercie d'ores et déjà de toute votre aide et des pistes qui pourraient m'aider à réaliser ce projet fou.
Chris
Configuration: Windows XP Internet Explorer 6.0
Bonjour,
|
Bonjour
|
Bonjour
|
Répondre à gbinforme
|
Bonjour
If SuiviActivite.Controls("TextBox" & i).Value <> "" _
And InStr(1, lcase(.Cells(l, i).Value), lcase(SuiviActivite.Controls("TextBox" & i).Value)) = 0 Then valide = False
Si tu veux utiliser des textbox et des combo, tu peux faire quelque chose comme For Each Ctrl In Me.Controls
If typeOf Ctrl Is MSForms.textBox Then
If Ctrl.Value = True Then
'ton traitement de texte
elseif typeOf Ctrl Is MSForms.comboBox Then
If Ctrl.Value = True Then
'ton traitement de liste
--
Toujours zen
|
Bonjour
Option Explicit
Public Sub chercher(rech, c) 'recherche d'une chaine
Dim sel As Object
Dim valide As Boolean
Dim i As Integer
Dim l As Long
Dim n As Integer
l = 2: n = 0
SuiviActivite.ListBox1.Clear
With Sheets("BaseDeDonnées")
If rech = "" Then Exit Sub
Do
Set sel = .Cells.Find(What:=rech, after:=.Cells(l, c), _
LookIn:=xlValues, LookAt:=xlPart, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, MatchCase:=False)
If sel Is Nothing Then Exit Do
If sel.Column <> c Then Exit Do
If sel.Row <= l Then Exit Do
l = sel.Row
valide = True
For Each ctrl In SuiviActivite.Controls
If TypeOf ctrl Is MSForms.TextBox _
Or TypeOf ctrl Is MSForms.ComboBox Then
If ctrl.Value <> "" _
And InStr(1, LCase(.Cells(l, i).Value), LCase(ctrl.Value)) = 0 Then valide = False
End If
Next ctrl
If valide Then
SuiviActivite.ListBox1.AddItem _
(.Cells(l, 1).Value & " " & _
.Cells(l, 2).Value & " " & _
.Cells(l, 3).Value & " " & _
.Cells(l, 4).Value & " " & _
.Cells(l, 5).Value & " " & _
.Cells(l, 6).Value & " " & _
.Cells(l, 7).Value & " " & _
.Cells(l, 8).Value & " " & _
.Cells(l, 9).Value & " " & _
.Cells(l, 10).Value & " " & _
.Cells(l, 11).Value & " " & _
.Cells(l, 12).Value & " " & _
.Cells(l, 13).Value & " " & _
.Cells(l, 14).Value & " " & _
.Cells(l, 15).Value & " " & _
.Cells(l, 16).Value)
SuiviActivite.ListBox1.List(n, 2) = sel.Row
n = n + 1
End If
Loop
End With
End Sub
Toujours zen |
RE,
Public Sub chercher(rech, c) 'recherche d'une chaine
Dim sel As Object
Dim valide As Boolean
Dim i As Integer
Dim l As Long
Dim n As Integer
l = 2: n = 0
SuiviActivite.ListBox1.Clear
With Sheets("BaseDeDonnées")
If rech = "" Then Exit Sub
Do
Set sel = .Cells.Find(What:=rech, after:=.Cells(l, c), _
LookIn:=xlValues, LookAt:=xlPart, _
SearchOrder:=xlByColumns, _
SearchDirection:=xlNext, MatchCase:=False)
If sel Is Nothing Then Exit Do
If sel.Column <> c Then Exit Do
If sel.Row <= l Then Exit Do
l = sel.Row
valide = True
For Each Ctrl In SuiviActivite.Controls
If TypeOf Ctrl Is MSForms.TextBox Then
If Ctrl.Value = True Then
'ton traitement de texte
Else
If TypeOf Ctrl Is MSForms.ComboBox Then
If Ctrl.Value = True Then
'ton traitement de liste
If valide Then
SuiviActivite.ListBox1.AddItem _
(.Cells(l, 1).Value & " " & _
.Cells(l, 2).Value & " " & _
.Cells(l, 3).Value & " " & _
.Cells(l, 4).Value & " " & _
.Cells(l, 5).Value & " " & _
.Cells(l, 6).Value & " " & _
.Cells(l, 7).Value & " " & _
.Cells(l, 8).Value & " " & _
.Cells(l, 9).Value & " " & _
.Cells(l, 10).Value & " " & _
.Cells(l, 11).Value & " " & _
.Cells(l, 12).Value & " " & _
.Cells(l, 13).Value & " " & _
.Cells(l, 14).Value & " " & _
.Cells(l, 15).Value & " " & _
.Cells(l, 16).Value)
SuiviActivite.ListBox1.List(n, 2) = sel.Row
n = n + 1
End If
End If
End If
End If
End If
Next
Loop
End With
End Sub
|
Bonjour olive60,
|
Bonjour
Me.Top = Application.Top + 130 Me.Left = Application.Left + 30 en adaptant les nombres à ce que tu veux faire. Toujours zen
|
Bonjour
Private Sub Workbook_Open()
recherche.Show
End
End Sub
de quelle feuille tu parle? je n'ai pas remarqué que je n'avais pas accès à une feuille... La feuille excel avec les données est visible mais non accessible lorsque le formulaire est actif. Cela veux dire que si tu agrandis suffisamment ton formulaire, la feuille ne sera plus visible et tu peux faire qu'il ait ma même taille que la fenêtre excel. Toujours zen |