Données dans listbox

Signaler
Messages postés
10
Date d'inscription
jeudi 11 novembre 2004
Statut
Membre
Dernière intervention
30 décembre 2011
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
Bonjour

J'ai récuperé un morceau de code sur VB-france concernant une recherche de texte et son incrémentation dans une listbox.
J'ai legerement modifié cette Sub pour qu'elle m'affiche la ligne correspondant à la valeur recherchée. Ensuite cette ligne est répercutée dans la listbox, le problème est qu'elle m'affiche l'adresse des cellules correspondantes à la recherche, et non leur valeur. J'ai beau indiquer par de nouvelles variables que je veux qu'il m'affiche les valeurs, il me met en code erreur "erreur 424 : "objet requis""
Pourriez vous m'aider s'il vous plait?

Voici mon code:

Sub RecherchePhrases()
'Programme de recherche de phrases suivant critere de saisie

Dim nom, c, msg, lign, reclign1, reclign2, reclign3, reclign4, reclign5, reclign6, reclign7, reclign8, reclign9, reclign10, reclign11, reclign12
Dim NombrePhrasesTrouvées As Integer
NombrePhrasesTrouvées = 0

'Affichage du inputbox pour saisie
nom = Trim(Application.InputBox("Entrez un critère", "Recherche"))
'N'execute pas la rechereche si on clique sur Annuler ou si aucune saisie
If nom False Or nom "" Then
Exit Sub
End If
'Active la feuille nommée Base de données
Sheets("Base de Données").Activate

'Effectue la recherche dans la plage cellule
For Each c In Range("a5:l1000")
If c.Value Like "*" & nom & "*" Then
'Incremente le nombre de phrases trouvés
NombrePhrasesTrouvées = NombrePhrasesTrouvées + 1
'texte trouvé suivant la saisie

lign = c.Row
reclign1 = "a" & lign

reclign2 = "b" & lign
reclign3 = "c" & lign
reclign4 = "d" & lign
reclign5 = "e" & lign
reclign6 = "f" & lign
reclign7 = "g" & lign
reclign8 = "h" & lign
reclign9 = "i" & lign
reclign10 = "j" & lign
reclign11 = "k" & lign
reclign12 = "l" & lign

'fait une liste des phrases correspondantes a la saisie dans
'le listbox
UserFormResultat.ListBoxResultatRecherche.AddItem reclign1 & Chr(9) & reclign2 & Chr(9) & reclign3 _
& Chr(9) & reclign4 & Chr(9) & reclign5 & Chr(9) & reclign6




End If
Next
'Affiche le liste
If NombrePhrasesTrouvées > 0 Then
UserFormResultat.Caption = NombrePhrasesTrouvées & " phrase(s) trouvé(s)"
UserFormResultat.Show
Else
MsgBox "Aucun résultat !", vbInformation, "Resultat Recherche"
End If

End Sub

20 réponses

Messages postés
14813
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
25 juillet 2021
156
Bonjour,

Quand tu postes un code, pensee à lire le point 2 de ma signature.
Sur quelle ligne se produit l'erreur ?

Sinon, pour ton premier message, l'avoir bien classé, c'est très bien :)

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Bonjour,

mis a part le fait que tu devrais preferablement utiliser la fonction Find au lieu de ta boucle.
- c est bien toi, qui demande d afficher les adresse et non le contenu des cellules)
´- l erreur denomcee laisse entendre aue tu n as pas de listbox nommee ListBoxResultatRecherche sur un userform nomme UserFormResultat. L un des deux (ou les deux) n existe pas sous ce nomla.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
10
Date d'inscription
jeudi 11 novembre 2004
Statut
Membre
Dernière intervention
30 décembre 2011

Bonjour NHenry

J'ai essayé la coloration syntaxique, mais ça doit pas être ça !:D
Pour ce qui est du code erreur, il se produit lorsque j'introduis une variable (que je déclare comme variant) qui est censée récupérer la valeur de la cellule:

reclignval1= reclign1.value
(je l'insère en dessous de ---recligne1="a"&lign---)


Le code que j'ai transmis est sans erreur mais il me renvoit l'adresse des cellules concernées et non leur valeur.
De plus lors de l'apparition du message d'erreur je n'ai pas de ligne en surbrillance.

Merci pour ton aide

[code=autre]Sub RecherchePhrases() 

'Programme de recherche de phrases suivant critere de saisie

Dim nom, c, msg, lign, reclign1, reclign2, reclign3, reclign4, reclign5, reclign6, reclign7, reclign8, reclign9, reclign10, reclign11, reclign12
Dim NombrePhrasesTrouvées As Integer
NombrePhrasesTrouvées = 0

'Affichage du inputbox pour saisie
nom = Trim(Application.InputBox("Entrez un critère", "Recherche"))
'N'execute pas la rechereche si on clique sur Annuler ou si aucune saisie
If nom False Or nom "" Then
Exit Sub
End If
'Active la feuille nommée Base de données
Sheets("Base de Données").Activate

'Effectue la recherche dans la plage cellule
For Each c In Range("a5:l1000")
If c.Value Like "*" & nom & "*" Then
'Incremente le nombre de phrases trouvés
NombrePhrasesTrouvées = NombrePhrasesTrouvées + 1
'texte trouvé suivant la saisie

lign = c.Row
reclign1 = "a" & lign

reclign2 = "b" & lign
reclign3 = "c" & lign
reclign4 = "d" & lign
reclign5 = "e" & lign
reclign6 = "f" & lign
reclign7 = "g" & lign
reclign8 = "h" & lign
reclign9 = "i" & lign
reclign10 = "j" & lign
reclign11 = "k" & lign
reclign12 = "l" & lign

'fait une liste des phrases correspondantes a la saisie dans
'le listbox
UserFormResultat.ListBoxResultatRecherche.AddItem reclign1 & Chr(9) & reclign2 & Chr(9) & reclign3 _
& Chr(9) & reclign4 & Chr(9) & reclign5 & Chr(9) & reclign6




End If
Next
'Affiche le liste
If NombrePhrasesTrouvées > 0 Then
UserFormResultat.Caption = NombrePhrasesTrouvées & " phrase(s) trouvé(s)"
UserFormResultat.Show
Else
MsgBox "Aucun résultat !", vbInformation, "Resultat Recherche"
End If

End Sub
Messages postés
10
Date d'inscription
jeudi 11 novembre 2004
Statut
Membre
Dernière intervention
30 décembre 2011

Merci Ucfoutu
Mais je viens de vérifier une nouvelle fois et j'ai bien mon userform et la listbox correctement nommés. De plus si je me contente de l'adresse des cellules, ce code fonctionne bien. Mais je veux les valeurs...
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
si ligne = 2 (exemple) ===>> reclign2 = "B" & "2" ===>> = "B2"

Et le contenu de cette cellule est donc Range("B2"):value, soit Range(reclign2).Value


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Quant a ma reponse precedente, elle etait justifiee par :
il me met en code erreur "erreur 424 : "objet requis""

pardi

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
et ceci :
Dim nom, c, msg, lign, reclign1, reclign2, reclign3, reclign4, reclign5, reclign6, reclign7, reclign8, reclign9, reclign10, reclign11, reclign12

fait que chqcune de ces variables, non typee, se retrouve donc avec le type Variant ....


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
10
Date d'inscription
jeudi 11 novembre 2004
Statut
Membre
Dernière intervention
30 décembre 2011

Merci pour tes réponses
Je viens d'essayer de lui implanter

reclignval1=Range(reclign2).Value

en déclarant préalablement reclignval1 as string

Mais sans succès! il me met erreur 1004.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
que viendrait faire :
reclignval1=Range(reclign2).Value

avec l ajout d un item a la listbox ?
Comprends pas, la ....
et ton erreur 424 ? Tu n en parles plus ?
Et c est reclign2, que tu dois declarer en string ...
et a ce propos ; que contient reclign2 en mode debug ? (cqr si "" ou incoherent, ma foi ...)

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
10
Date d'inscription
jeudi 11 novembre 2004
Statut
Membre
Dernière intervention
30 décembre 2011

Mon (gros) probleme est que je suis loin d'être un pro du VBA.
Donc je rajoute l'item reclignval1 à la listbox puisque cette variable est censée contenir la valeur de la cellule et non son adresse.
Ensuite l'erreur 424 n'est pas apparue avec la modif que j'ai indiquée, elle à été remplacée par l'erreur 1004 (c'était trop beau !)
Je vais de ce pas déclarer tous les reclign en string et je vais essayer de trouver le mode debug!
Merci pour ton aide!
Messages postés
10
Date d'inscription
jeudi 11 novembre 2004
Statut
Membre
Dernière intervention
30 décembre 2011

Donc rien de nouveau sous le soleil, a savoir que l'erreur 1004 (erreur définie par l'application ou par l'objet)

Ce qui m'interpelle est que ce code fonctionne parfaitement lorsqu'on ne lui demande pas la valeur des cellules. Il m'affiche correctement dans ma listbox toutes les adresses des cellules, séparées par un espace (chr(9)).
Il me semble qu'il ne lui faudrait pas grand chose pour qu'il m'affiche le contenu de la cellule et non son adresse, mais c'est peut être qu'une impression!
Messages postés
14813
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
25 juillet 2021
156
Bonjour,

Recopie le code BBCode endessous et mets-y ton code.
[code=vb]
/code

Penses bien à l'indenter.
Une fois cela fait, ce sera plus clair.

Car tu dis avoir fais quelquechose, mais on ne sais pas comment tu l'as fait.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
10
Date d'inscription
jeudi 11 novembre 2004
Statut
Membre
Dernière intervention
30 décembre 2011

Sub RecherchePhrases() 
'Programme de recherche de phrases suivant critere de saisie 

Dim nom, c, msg, lign, reclign1, reclign2, reclign3, reclign4, reclign5, reclign6, reclign7, reclign8, reclign9, reclign10, reclign11, reclign12 as string
Dim reclignval1
 Dim NombrePhrasesTrouvées As Integer 
NombrePhrasesTrouvées = 0 

'Affichage du inputbox pour saisie 
nom = Trim(Application.InputBox("Entrez un critère", "Recherche")) 
'N'execute pas la rechereche si on clique sur Annuler ou si aucune saisie 
If nom False Or nom "" Then 
Exit Sub 
End If 
'Active la feuille nommée Base de données 
Sheets("Base de Données").Activate 

'Effectue la recherche dans la plage cellule 
For Each c In Range("a5:l1000") 
If c.Value Like "*" & nom & "*" Then 
'Incremente le nombre de phrases trouvés 
NombrePhrasesTrouvées = NombrePhrasesTrouvées + 1 
'texte trouvé suivant la saisie 

lign = c.Row 
reclign1 = "a" & lign 
reclignval1 = Range(reclign1).value
reclign2 = "b" & lign 
reclign3 = "c" & lign 
reclign4 = "d" & lign 
reclign5 = "e" & lign 
reclign6 = "f" & lign 
reclign7 = "g" & lign 
reclign8 = "h" & lign 
reclign9 = "i" & lign 
reclign10 = "j" & lign 
reclign11 = "k" & lign 
reclign12 = "l" & lign 

'fait une liste des phrases correspondantes a la saisie dans 
'le listbox 
UserFormResultat.ListBoxResultatRecherche.AddItem reclignval1 & Chr(9) & reclign2 & Chr(9) & reclign3 _
 & Chr(9) & reclign4 & Chr(9) & reclign5 & Chr(9) & reclign6 




End If 
Next 
'Affiche le liste 
If NombrePhrasesTrouvées > 0 Then 
UserFormResultat.Caption = NombrePhrasesTrouvées & " phrase(s) trouvé(s)" 
UserFormResultat.Show 
Else 
MsgBox "Aucun résultat !", vbInformation, "Resultat Recherche" 
End If 

End Sub


Voila, je viens de vous donner le code tel qu'il est maintenant, avec le probleme 1004 de la ligne
reclignval1 = Range(reclign1).value
Merci à vous.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Ouais ...
1) ton code n est pas indente (et donc penible a lire)
2)
Dim nom, c, msg, lign, reclign1, reclign2, reclign3, reclign4, reclign5, reclign6, reclign7, reclign8, reclign9, reclign10, reclign11, reclign12 as string
Dim reclignval1

Tu n as type aucune de ces variables (deja dit plus haut)
3)
Range("a5:l1000")

n est pas coherent (serait-ce Range("A5:Al1000") que tu veux parcourir ?
4) je t ai demande (en vain, apparemment) de rentrer en mode debug.

Moi (de surcroit en vacances et a la peche) je te laisse la, car :
-Ce sont les bases elles_memes, qui font ici gravement defaut
- tu ne me parais pas tenir compte (vouloir meme tenir compte) de ce qui t est dit.
Bonne chance et bonne etude des bases du VBA

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
10
Date d'inscription
jeudi 11 novembre 2004
Statut
Membre
Dernière intervention
30 décembre 2011

Effectivement les bases font défaut étant donné que je n'en ai pas!
Si par debug, c'est le "pas à pas détaillé" que tu entends, alors oui je l'ai fait mais je n'ai pas eu d'informations avec ce mode, contrairement aux autres codes sur lesquels je travaille.
Pour ce qui est de la volonté de tenir compte des conseils, là je peux t'affirmer que tu te trompes, c'est que tes explications ne veulent rien dire pour moi (on en revient au 1er de cette réponse!).
Merci quand même d'avoir essayé et bonnes vacances.
Messages postés
14813
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
25 juillet 2021
156
Bonjour,

Recherches le terme "Indenter" sur internet, tu comprendras la demande.
Ensuite,
- As-tu regardé les valeurs de tes variables ?(Shift+F9)
- Mis quelques points d'arrêts ? (F9)
etc.

Qu'as-tu constaté ?

Si ce n'est pas fait, mets "Option Explicit" (sans les ") en haut de tout tes modules de code.

Types toutes tes variables avec le bon type, cela permet de savoir ce qui est attendu plus facilement.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
Messages postés
10
Date d'inscription
jeudi 11 novembre 2004
Statut
Membre
Dernière intervention
30 décembre 2011

Bonjour

Merci pour ces conseils, j'ai repris de la doc sur la déclaration de variable, et je vais desormais indenter mes codes.
Pour ce qui est de la soluce, elle m'a été donnée très rapidement sur un autre forum, suffisait de rajouter un "range", comme quoi je n'étais pas loin.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Pour ce qui est de la soluce, elle m'a été donnée très rapidement sur un autre forum, suffisait de rajouter un "range", comme quoi je n'étais pas loin.


C est une plaisanterie ?

Elle ne t avait pas, selon toi, ete donnee egalement ici (beaucoup plus haut), en exemple et avec explications ?

Pour memoire :
si ligne 2 (exemple)>> reclign2 = "B" & "2" ===>> = "B2"

Et le contenu de cette cellule est donc Range("B2").value, soit Range(reclign2).Value


Ce n etait bien evidemment pas ton code "tout fait, juste a recopier" ..... C etait juste quoi, alors ? === >>> juste une "mise sur le bon rail" (a destination de celui qui veut conduire et non etre un simple passager)
Mais bon ...

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
10
Date d'inscription
jeudi 11 novembre 2004
Statut
Membre
Dernière intervention
30 décembre 2011

Comme quoi tu es certainement très fort en VBA mais pas en pédagogie, vu que je n'avais rien compris à ton explication! L'art de la pédagogie s'est savoir se mettre au niveau (même bas) de son interlocuteur pour lui expliquer les choses, non pas le noyer sous des explications incompréhensibles en utilisant un langage qui l'est encore moins!
Qui plus est, utiliser 2 pages sur le forum alors que l'explication tenait en 2 lignes, j'en vois pas trop l'interêt.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Tu dois avoir raison, mais uniquement si tu ne vois d interet que dans l ecriture de ton code tout cuit.
D autres choses essentielles t ont egalement ete dites. Elles concernaient des notions tres rudimentaires que tu n as pas encore acquises et qui sont indispensables.
En te rappelant que tu es ici sur un forum de developpement et non d apprentissage des notions les plus elementaires, censees deja possedees.
Je te souhaite neanmoins bonne chance dans ton "approche" tres personnelle du developpement informatique.
Voila tout.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient