lolpop
Messages postés211Date d'inscriptionmercredi 4 août 2004StatutMembreDernière intervention18 octobre 2010
-
22 juin 2006 à 15:34
valtrase
Messages postés937Date d'inscriptionlundi 19 janvier 2004StatutMembreDernière intervention 9 mai 2022
-
23 juin 2006 à 19:25
bonjour
j'ai écrit un code pour faire une recherche aider de personne sur le forum, mais j'ai une erreur au niveau de ma boucle, sur la ligne du findnext, est ce que quelqu'un pourrait m'aider , je ne trouve pas l'erreur?
Do
vl = ligneuligneu Feuil1.Columns.FindNext(After :vl).Row
If ligneu < vl Or ligneu = vl Then Exit Do
msg = Feuil1.Cells(ligneu, 1)
UserForm1.ListBox1.AddItem msg
Loop
lolpop
Messages postés211Date d'inscriptionmercredi 4 août 2004StatutMembreDernière intervention18 octobre 2010 22 juin 2006 à 16:00
j'ai oublier d eprécisé, je suis sour VBA excel.
le code est censé recherche dans une colonne un mot entré dans un textbox prédédement.
lorsque je clique sur le bouton une erreur 1004 impossible de lire la propriète findnext de la classe range.
lorsque je fait un débogage ligne par ligne j'ai une erreur sur cette ligne:
ligneu = Feuil1.Columns(1).FindNext(after:="" & vl).Row
Vous n’avez pas trouvé la réponse que vous recherchez ?
lolpop
Messages postés211Date d'inscriptionmercredi 4 août 2004StatutMembreDernière intervention18 octobre 2010 22 juin 2006 à 16:30
b en fait lorsque je teste et que je sais ce que je recherche et coné la ligne, je remplaceligneu Feuil1.Columns.FindNext(After :vl).Row
par
ligneu = Feuil1.Columns.FindNext([4]).Row
et la ca marche
A4 étant la cellule ou j'ai trouvé ce que je cherchais dans le premier find() .
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 22 juin 2006 à 16:37
Aie Aie lolpop,
t'utilises mon code, je le reconnais. Je confirme ce que te dis tr15 :
"" & chercher est strictement équivalent à chercher
Dans ma syntaxe, quand je dis Find("", [a1] ... c'est pour chercher une cellule vide a partir d'A1
Si tu dis "" & chercher, le "" & est complètement inutile
Mais quand je t'ai fourni le code la dernière fois, je l'avais adapté pour tes besoins. Seuls les noms des contrôles étaient à changer.
Sachant que le l'avais tester auparavant, j'avais placé un peu partout des "morgan", des "momo" et d'autres, avec comme critères de recherche "mo". Et je t'ai fait une boucle pour tout rechercher et en sortir dès qu'il n'y avait plus de valeurs correspondantes.
Sinon, ton erreur elle se trouve là :
ligneu = Feuil1.Columns(1).FindNext(after:="" & vl).Row
^ cherche le suivant après telle cellule. je doute que "" & vl soit une cellule
lolpop
Messages postés211Date d'inscriptionmercredi 4 août 2004StatutMembreDernière intervention18 octobre 2010 22 juin 2006 à 16:51
oui mais j'ai deja essayer ce code qui ne marche pas non plus:
Do
vl = ligneu
ok = "[A" & vl & "]"
'MsgBox ok
ligneu = Feuil1.Columns(1).FindNext(after:=ok).Row
If ligneu < vl Or ligneu = vl Then Exit Do
msg = Feuil1.Cells(ligneu, 1)
UserForm1.ListBox1.AddItem msg
Loop
et la pourtant ok correspond bien a une cellule [Ax]
Do
AncienneLigne = ActiveCell.Row
Cells.FindNext(After:=ActiveCell).Activate
NouvelleLigne = ActiveCell.Row
If NouvelleLigne < AncienneLigne Or NouvelleLigne = AncienneLigne Then Exit Do
NomTemp = Selection.Value
ListBox1.AddItem NomTemp
Loop
End Sub
S'il y a quelque chose que tu ne comprends pas où que tu souhaites adapter, n'hésite pas,
lolpop
Messages postés211Date d'inscriptionmercredi 4 août 2004StatutMembreDernière intervention18 octobre 2010 22 juin 2006 à 19:44
lol, c'est pas que je ne veut pas prendre ton cote ^^.
c'est juste que j'aime bien arrivé a faire mes propres code, bien sur avec de l'aide et aussi voir des codes pour m'aider, mais arriver a taper mes propres code, mais je pense que je vais prendre le tiens parque je bugue sur mon problem j'ai tout essayer lol.
et la deuxieme c'est que je viens de la programation PHP, je sais pas si tu coné mais c'est pas tout a fait pareil, je n'ai pas envie de travailler avec les cellule active et tout ça, dans la mesure du possible j'aimerais bien essayer de garder l'algorithme du php. c'est a dire, pour les recherches on prend chaque ligne avec une id et on recherche dans les champs que l'on souhaite.
travailler avec les célélule e me branche pas trop , je prefere faire ligne par ligne, j'ai l'impression que c'est pas trés sur en passant par les celules active, défois je me fait peur lol.
valtrase
Messages postés937Date d'inscriptionlundi 19 janvier 2004StatutMembreDernière intervention 9 mai 20223 22 juin 2006 à 21:24
Lut,
J'ai tappé find dans VBA et voilà ce que je sort
Dim c, Dim FirstAddress
With Worksheets(1).Range("a1:a500")
Set c = .Find(2, lookin:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
Set c = . FindNext (c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
Donc dans ton cas :
With Worksheets(1).Column(1)
Set c = .Find(chercher, [A2],lookin:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
UserForm1.ListBox1.AddItem c.Value
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
valtrase
Messages postés937Date d'inscriptionlundi 19 janvier 2004StatutMembreDernière intervention 9 mai 20223 22 juin 2006 à 21:40
Re,
Il manque le s de columns dans mon code
Maintenant j'ai pas compris ce que tu cherche à faire
Tu recherches une valeur (de ton textbox) et quand tu trouves tu rajoutes cette valeur dans ta listbox ??????
tu vas te retrouver avec plein de "toto" ou autres dans ta listbox .....
Cordialement, Jean-Paul
______________________________________________________________________
lolpop
Messages postés211Date d'inscriptionmercredi 4 août 2004StatutMembreDernière intervention18 octobre 2010 23 juin 2006 à 07:20
b en fait j'ai une colonne A avec plusieur nom, mai c'est juste un entrainement, au final ca sera des fournisseurs.
et je recherche dedans le mots clé tapez dans le listbox.
voila voila, mais mon probleme c'est que mon code marche soffe la ligne du findnext je ne comprend pas pourquoi ma valeur ok n'est pas pris en compte.
lorsque je veux teste mon module de recherche, je con deja les résultat,je m'explique, imaginons que je recherche le mot morgan, je sais que morgan est en célule A3 et A5.
donc si je modifie le code en fonction pour tester ca donne :
limit = 100
Do While ligneu < limit
vl = ligneu
ok = "[A" & vl & "]"
MsgBox ok
ligneu = Feuil1.Columns(1).FindNext(after:=[A3]).Row 'juste cette ligne qui change
If ligneu < vl Or ligneu = vl Then Exit Do
msg = Feuil1.Cells(ligneu, 1)
UserForm1.ListBox1.AddItem msg
Loop
Le resultat est impécable, il me retournde dans ma listbox les value de mes 2 cellules A3 et A5.
Mais lorsque je rechange le [A3] par ok ca ne marche plus, pourtant lorsque le msgbox ok s'affiche il y a bien marqué [A3]
valtrase
Messages postés937Date d'inscriptionlundi 19 janvier 2004StatutMembreDernière intervention 9 mai 20223 23 juin 2006 à 19:25
Re,
Dans le code c est un objet Range donc c.Address te renvoie l'adresse de la cellule en cours (celle qui corresponds à la recherche) sous la forme "$A$1:$B$5" on mémorise cette adresse pour pouvoir sortir de la boucle quand le code à fait le tour de toutes les cellules et qu'il revient dessus.
pour cette ligne Set c = . FindNext (c)je te l'ai expliqué dans mon précédant post donc je récapitule.
c, est un objet Range ( une plage de 1 ou plusieurs cellules)
pour pouvoir l'affecter à une autre objet Range ici en l'occurence .FindNext(c)(Car ici le code te renvoie un objet Range : donc une cellule) tu dois utiliser Set sinon tu ne récupèrera que la valeur de ta cellule et non pas l'objet complet.
en exemple ce bout de code que tu peux mettre dans l'évènement Click d'un bouton
On Error GoTo CommandButton1_Click_Err
Dim Myrange ' ici je dimensionne en Variant
' Mais ça va devenir soit une chaine soit un objet Range
Dim rngCell As Range
'On affecte a rngCell une plage
Set rngCell = [A1]
rngCell.Value = "Ma valeur est Toto"
'Maintenant regardes bien ce qui se passe
Myrange = rngCell
' là ça plante car MyRange est une variable String
' qui contient la valeur de la cellule
MsgBox Myrange.Address
MsgBox "MyRange est-t'il un object ? = " _
& IsObject(Myrange)
' maintenant avec set
Set Myrange = rngCell
' ici MyRange est un objet avec toutes ses propriétés
MsgBox "MyRange est-t'il un object ? = " _
& IsObject(Myrange)
MsgBox Myrange.Address
CommandButton1_Click_End:
Exit Sub
CommandButton1_Click_Err:
MsgBox Err.Description
Resume Next