|
|
|
|
Configuration: Windows XP Internet Explorer 6.0
Bonjour,
Si on maitrise à la fois Excel et le VBA, on peut faire beaucoup de chose. As-tu déjà créé ton userform et écrit quelques macros? Un sujet similaire a été traité récemment sur ce même forum. Recherche nikky 74 par nom d'utilisateur forum programmation, et vois si tu peux déjà identifier ton problème de recherche à celui qui y est évoqué. Dans cet exemple il est question de recherche par nom. Pour la recherche multicritères, ça va dépendre des comparaisons souhaitées: = ;<; >; =<;>=;<>; OR; XOR; AND....; ordre de priorité ..... Cela peut ce compliquer rapidement. Mais rien n'est impossible, il y a toujours une astuce. Tout dépend de ton niveau en VBA et ou tu places la barre de complexité. J'espère ne pas t'avoir découragé.On peut toujours essayer et voir ou ça nous mène. A+ |
bonjour
Un petit exemple pour te faire voir ce que l'on peut faire : http://cjoint.com/?cAax7fK2BS Le fichier n'ai pas bien adapté et pour tester il n'y a que les chiffres à faire varier sur les saisies. Les doubles sont listés et si on en sélectionne un, on atteint la ligne de "base" correspondante. Regardes si cela peux t'aider... Toujours zen
|
bonjour
la possibilité de ne pas respecter la casse Ah bon ! la recherche qui est faite ne s'en préoccupe pas ! Bonne continuation et à bientôt peut-être... Toujours zen
|
bonjour
J'ai mis à ma sauce le module de recherche sur vba mais j'ai un petit couac sur cette ligne de commande : Cette ligne ne récupère que les contrôles dont le nom commence par "TextBox" et avec la valeur de i Si tu as supprimé des textbox pour mettre des combo, ton i est faux et cela plante. Pour ne pas tenir compte de la casse, il suffit de modifier ainsi 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,
For Each Ctrl In SuiviActivite.Controls il manque NEXT. Salut.
|
bonjour
Tu as effectivement une syntaxe incorrecte. Si j'ai compris ta modification, je te propose ceci avec décalage des instructions pour bien voir le début et la fin des boucles, des if et autres. 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,
essaye comme ça
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
|
Résultats pour Vba macro excel recherche et userform
Résultats pour Vba macro excel recherche et userform