[Excel][VBA] : Focntion recherche.

atjohn

XLDnaute Nouveau
Tous d'abord bonjour !

Je viens de m'inscrire sur ce forum, car je suis en train de dév une aplli en vba dont l'un des but et de rechercher en fonction d'un ou plusieurs critères des éléments dans une base de donnée.

C'est une basse de donnée composée de produit industrielle ( Numéro de commande, réf article etc) et de remarques associées à la commande.

Ce que je cherche à faire, grâce à un user forme, entrer plusieurs critères (ref article etc.) et que s'affiche toutes les remarques associées aux critères (Il peut très bien y avoir plusieurs remarque pour un seul critère).

pour faire cela je me suis inspiré d'un programme trouvé sur ce forum, mais je n'arrive pas à l'adapter (sachant que je suis sous excel 97), en faite des que je rentre une valeur dans le champ de recherche, vba me retourne une erreur 1004, au niveau du FIND...

Aussi la recherche dois commencer à la ligne 4 (2 à l'origine)... et pour l'instant je n'utilise que deux champs de recherche (4 à l'origine)... Ma feuille de travail est "carccmd". le userform ce nomme "userform2"

Je mes mon code à dispo pour que vous puissiez juger par vous même...

Version 1.1 prenant en compte les remarques ci-dessous.

Private Sub ListBox1_Click()
Sheets("carccmd").Cells(UserForm2.ListBox1.List(UserForm2.ListBox1.ListIndex, 2), 4).Select
End Sub

Private Sub TextBox1_Change()
Call chercher(TextBox1.Value, 2)
End Sub

Private Sub TextBox2_Change()
Call chercher(TextBox2.Value, 3)
End Sub

Private Sub TextBox3_Change()
Call chercher(TextBox3.Value, 4)
End Sub

Private Sub TextBox4_Change()
Call chercher(TextBox4.Value, 5)
End Sub

Public Sub chercher(rech As String, c As Integer) ' recherche d'une chaine
Dim sel As Range
Dim valide As Boolean
Dim i As Integer
Dim l As Long
Dim n As Integer
.....l = 5: n = 0
.....UserForm2.ListBox1.Clear
With Worksheets("carccmd")
.....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 i = 2 To 5
..........If UserForm2.Controls("TextBox" & i).Value <> "" _
...............And InStr(1, LCase(.Cells(l, i).Value), LCase(UserForm2.Controls("TextBox" & i).Value))
'je dois aussi avoir une erreur ici...
...............= 0 Then valide = False
.....Next i
.....If valide Then
..........UserForm2.ListBox1.AddItem _
...............(.Cells(l, 1).Value & " " & .Cells(l, 2).Value)

..........UserForm2.ListBox1.List(n, 2) = sel.Row
..........n = n + 1
.....End If
Loop
End With
End Sub

Egalement nouvelle version prenant en compte les modifs...v1.1
Regarde la pièce jointe essai base de donnée (vidée).zip
Merci d'avance pour votre aide...
PS : Ha oui,aussi... je suis une bille en VBA... en gros j'ai commencé pour la première fois à programmer la semaine dernière...
Je ne suis donc pas totale au faite de toute les subtilités de ce langage.
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : [Excel][VBA] : Focntion recherche.

Bonjour Atjohn et bienvenue :),
On a de la chance que tu ne sois pas en Excel 5, sinon, il aurait fallu reprogrammer en français :p...
Le problème vient certainement du fait que tu as dans le code des critères qui n'existait pas en 97. Pour modifier le code, commence par lancer l'enregistreur de macro, Ctrl+f pour effectuer une recherche. Cherche un truc, ferme la recherche. Arrête l'enregistreur et copie nous dans un post la ligne Find générée par l'enregistreur.
A titre de comparaison, 2007 renvoie
Code:
    Cells.Find(What:="toto", After:=ActiveCell, LookIn:=xlFormulas, LookAt _
        :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
        False[B][COLOR=red], SearchFormat:=False[/COLOR][/B]).Activate
qui ne fonctionnerai pas sous 2000 (peut-être même 2003).
A te lire :cool:
 

atjohn

XLDnaute Nouveau
Re : [Excel][VBA] : Focntion recherche.

Salut, merci pour ta réponse rapide.
J'ai donc ceci
Cells.Find(What:="df", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) _
.Activate

j'ai donc une différence au niveau du LookIn, xlFormulas... j'ai le .activate... et enfin le SearchOrder...

Mais j'ai l'impression que la formule ne fonctionne pas non pas à cause de la formule mais de quelque chose sous jacent...
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : [Excel][VBA] : Focntion recherche.

Re :),
Aucun problème de fonctionnement chez moi pour la recherche sur 2007 (j'ai mis des données fictives et ça monte bien).
Une seule erreur au double clic dans la liste
Code:
Private Sub ListBox1_Click()
Sheets("carccmd").Cells(UserForm2.ListBox1.List(Use[COLOR=red][B]r[/B][/COLOR]Form2.ListBox1.ListIndex, 2), 1).Select
End Sub
il manque un r...
Une erreur aussi, mais sans conséquence
Code:
Private Sub UserForm_Initialize()
With Sheets("carccmd")
Me.Label1.Caption = .Cells([COLOR=red]4[/COLOR], 2).Value
Me.Label2.Caption = .Cells([COLOR=red]4[/COLOR], 3).Value
Me.Label3.Caption = .Cells([COLOR=red]4[/COLOR], 4).Value
Me.Label4.Caption = .Cells([COLOR=red]4[/COLOR], 1).Value
End With
End Sub
sinon, le code de Find en 97 parait le même que celui utilisé...
Un petit truc qui me gène, certainement sans importance, mais on peut toujours essayer
Code:
Dim sel As [COLOR=red]Range[/COLOR]
A + :cool:
 

atjohn

XLDnaute Nouveau
Re : [Excel][VBA] : Focntion recherche.

Merci pour tes réponses...

Mais ça ne fonctionne toujours pas...
Le pire c'est que je suis le seul dans l'entreprise à avoir excel 97... tous le reste à 2007..
Je vais essayer sur 2007... si ça marche... :)

Par contre ça ne règle pas mon problème sur 97...

J'essaye et je t'en dit plus...
 

atjohn

XLDnaute Nouveau
Re : [Excel][VBA] : Focntion recherche.

Bon je suis presque sur que ça viens du rech...
Private Sub TextBox1_Change()
Call chercher(TextBox1.Value, 2)
End Sub
Public Sub chercher(rech, c)
Set sel = Cells.Find(What:=rech, After:=Cells(l, c)...

Là je sèche...

Sinon j'ai pas les même erreurs sur 2007 et 97... je sens que je vais demander à passer en 2007 moi...
 

JNP

XLDnaute Barbatruc
Re : [Excel][VBA] : Focntion recherche.

Re :),
Tu peux forcer le type de données à l'échange
Code:
Public Sub chercher(rech As String, c As Integer)
D'un autre côté, le problème pourrait aussi venir que la feuille n'est pas précisée
Code:
[COLOR=black]Set sel = [SIZE=4][COLOR=red][B].[/B][/COLOR][/SIZE]Cells.Find(What:=rech, After:=[B][SIZE=4][COLOR=#ff0000].[/COLOR][/SIZE][/B]Cells(l, c), LookIn:=xlValues, LookAt:=xlPart, _
SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False)[/COLOR]
le point devant les Cells à tester :cool:
 

atjohn

XLDnaute Nouveau
Re : [Excel][VBA] : Focntion recherche.

C'est vraiment sympa de prendre du temps pour m'aider !!
Mais ça ne marche toujours...

Quand tu dits que la feuille n'est précisée, tu veux dire qu'il faille que j'écrive devant le point WorkSheets("carccmd"). etc ?
ou c'est juste le point ?

Passage à la version V1.1...
Non utilisable.
 
Dernière édition:

atjohn

XLDnaute Nouveau
Re : [Excel][VBA] : Focntion recherche.

Après avoir utilisé excel 2007, je me suis rendue compte d'une nouvelle erreur.
La première serait résolue, la nouvelle provenant de
If UserForm2.Controls("TextBox" & i).Value <> "" _
And InStr(1, LCase(.Cells(l, i).Value), LCase(UserForm2.Controls("TextBox" & i).Value))

Je continue à chercher..
 

JNP

XLDnaute Barbatruc
Re : [Excel][VBA] : Focntion recherche.

Re :),
Effectivement, je suis tombé sur la même erreur. Il y a déjà le problème qu'au dessus, le "For i" va de 2 à 5 alors que les TextBox vont de 1 à 4...
J'ai épluché un peu, mais je ne vois pas l'intérêt du InStr...
J'essayerai d'y jeter un oeil quand j'aurai le temps, mais je pense qu'il y a des problèmes de références avec les colonnes de la feuille. C'est parfois plus simple de refaire le code entièrement, que de débugger au fur et à mesure :eek:...
Bon courage :cool:
 

atjohn

XLDnaute Nouveau
Re : [Excel][VBA] : Focntion recherche.

c'est ce que je pensais faire... tous ré-encoder... mais je n'ai pas les compétences pour le faire.... :'(

Fin bref je vais m'acheter un bouquin (des conseils ?) et je vais essayer de simplifier le tout...

c'est vrai que "si j'ai bien compris" que le inStr n'est pas très utile pour mon prog... ( bon par contre comme j'arrete pas de switcher entre 97 et 2007...).

Fin bref! c'est super sympa de prendre du temps pour mon problème !
Merci beaucoup !!

Aussi pour les i de 2 à 5...
c'est parceque oui j'ai des textes box de 1 à 4... mais j'ai tous décalé d'une colonne... c'est pour ça que c'est de 2 à 5...
mais bon c'est un essai... et comme je ne peux pas tester... je ne sais pas si ça influence quelque chose...
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : [Excel][VBA] : Focntion recherche.

Re :),
c'est ce que je pensais faire... tous ré-encoder... mais je n'ai pas les compétences pour le faire.... :'(
Tout vient à temps, à qui sait apprendre :p...
Fin bref je vais m'acheter un bouquin (des conseils ?) et je vais essayer de simplifier le tout...
Personnellement, j'aime bien "Les nuls", pour le 97, tu dois pouvoir le trouver d'occasion :D!
c'est vrai que "si j'ai bien compris" que le inStr n'est pas très utile pour mon prog... ( bon par contre comme j'arrete pas de switcher entre 97 et 2007...).
Si tu peux, tranche pour 2007. Pour le InString, le but était de proposer sur une partie de nom, tout en fouillant les 4 TextBoxs si j'ai bien compris, mais ça plante bien.
Fin bref! c'est super sympa de prendre du temps pour mon problème !
Merci beaucoup !!
De rien ;)
Aussi pour les i de 2 à 5...
c'est parceque oui j'ai des textes box de 1 à 4... mais j'ai tous décalé d'une colonne... c'est pour ça que c'est de 2 à 5...
Il suffit de décrire les textboxs en I-1, ou les cellules en I+1...
mais bon c'est un essai... et comme je ne peux pas tester... je ne sais pas si ça influence quelque chose...
Ça plante magnifiquement, c'est déjà pas mal :rolleyes:
Dans mes essais, j'ai plutôt utilisé la méthode Exit pour les TextBox plutôt que Change, mais bon... Quand je disais que ça marchait chez moi, j'avais mis du texte. C'est depuis que tes références sont en chiffre que ça merde...
Bon courage :cool:
 

atjohn

XLDnaute Nouveau
Re : [Excel][VBA] : Focntion recherche.

Bon j'ai réussi à faire quelque chose !! en faite j'avais changer les l en 1... ce qui faisait tous foirer... Maintenant ça fonctionne ... je mes à dispo pour ceux qui veulent... :)

En tous cas merci de ton aide !

ps: c'est toujours plus simple après une bonne nuit de sommeil, l'esprit au calme... toujours prendre du recul sur son travail.

Regarde la pièce jointe essai base de donnée (vidée) v1.2.zip
 
Dernière édition:

Discussions similaires

Réponses
4
Affichages
189
Réponses
6
Affichages
223

Statistiques des forums

Discussions
312 023
Messages
2 084 714
Membres
102 637
dernier inscrit
TOTO33000