Fonction FIND

Résolu
cs_Fabian123 Messages postés 180 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 22 novembre 2013 - 17 mars 2008 à 15:59
cs_Fabian123 Messages postés 180 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 22 novembre 2013 - 18 mars 2008 à 10:05
Bonjour à toutes et tous,

voici mon probleme,

j'ai une feuille excel avec trois colonnes, une correspondant à une référence, une correspondant à l'article et la dernière au prix de cet article

ex:

colA ColB ColC
1111 pomme 0.50?
2222 poire 0.48?

j'ai un userform dans lequel j'ai placé un textbox et une listbox.
quand l'utilisateur encode une référence et appuye sur 'enter' l'article et son prix (correspondant à la référence encodée s'affiche dans la listbox)

Seulement avec mon code, je n'affiche que la première ligne d'article... il ne reconnait pas les autres références... je n'arrive pas à placer plusieurs articles (et plusieurs fois le meme) dans la listbox...

de plus, lorsque j'ai appuyé sur Enter, le pointeur se place ailleurs dans le userform, hors je souhaiterais que le textbox reste actif afin d'encoder plusieurs references à la suite (sans devoir a chaque fois reprendre la souris pour venir cliquer dans la textbox...)

voici mon code, merci pour votre aide...

Private Sub TextBox3_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

If KeyCode = vbKeyReturn Then
Dim i As Long
i = 0
nomCherche = Format(TextBox3.Value, "0000")
On Error Resume Next

Sheets("Listing des Articles").Range("A2:A100").Find(What:=nomCherche, LookIn:=xlValues).Select
If Err = 0 Then
For j = 0 To Sheets("Listing des Articles").Range("h2:i100")
     ListBox2.AddItem
            ListBox2.List(j, 0) = Sheets("Listing des Articles").Range("H2").Offset(i, 0).Value
            ListBox2.List(j, 1) = Format(CStr(Sheets("Listing des Articles").Range("I2").Offset(i, 0).Value), "0.00")
  j = j + 1
  Next j
Else
MsgBox "Veuillez introduire une référence valide"
End If
i = i + 1
On Error GoTo 0
End If
End Sub

7 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
18 mars 2008 à 09:19
Dim Recherche As Range
Set Recherche = Sheets("Listing des Articles").Columns("A").Find(CLng(Textbox3), Lookin:=xlValues, LookAt:=xlWhole)
If Not Recherche Is Nothing Then
    Listbox2.AddItem
    Listbox2.List(Listbox2.ListCount, 0) = _
            Sheets("Listing des Articles").Range("C" & Recherche.Row)
    Listbox2.List(Listbox2.ListCount, 1) = _
            Sheets("Listing des Articles").Range("D" & Recherche.Row)
Else
    Msgbox "Le code n'a pas été trouvé"
End if

Si tu es certain de bien avoir entré ton code et que la recherche est tout de même infructueuse, c'est probablement qu'il existe une différence entre les 2 valeurs, celle dans la cellule et celle recherchée. Mets un point d'arrêt sur la ligne du FIND et passe ta souris pour voir ce que contient la valeur de la cellule.
1111 est différent de "1111" ou de "1111 "Donc guillemets String, pas de guillemets Numérique, espaces à vérifier, ...

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
3
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
17 mars 2008 à 19:28
Salut,

ce qui suit suppose que la listbox2 a ete initialisée avec 3 colonnes  : ListBox2.ColumnCount = 3

Private Sub TextBox3_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = vbKeyReturn Then
        Dim i As Long, LigneCodeArticle As Long
        With Sheets("Listing des Articles")
            nomCherche = Format(TextBox3.Value, "0000")
            On Error Resume Next
            LigneCodeArticle = .Range("A2:A100").Find(nomCherche, [A1],xlValues , , xlByRows, xlPrevious).Row
            If Err = 0 Then
                'ici on boucle sur les cellules de la ligne du code article trouvé, colonne A,B,C comme dans ton explication
                'et dans le meme temps on boucle sur les colonnes du nouvelle item pour
                'ecrire les valeurs des cellules de la ligne du code article trouvé
                For i = 0 to 2 '0 car la premiere colonne de la listbox a comme index 0
                    Listbox2.AddItem
                    ListBox2.List(listBox2.listCount,i) = .cells(LigneCodeArticle, i + 1).Value
                next i
            Else
                MsgBox "Veuillez introduire une référence valide"
            End If
         End With
    TextBox1.SetFocus 'Donne le focus a la textbox1
    End If
End Sub
0
cs_Fabian123 Messages postés 180 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 22 novembre 2013
17 mars 2008 à 20:05
Salut bigfish!

merci pour ton aide!
j'ai essayé ton code, mais je ne sais pas pourquoi, il m'affiche
systématiquement le messgbox...

je vais essayer d'expliquer ce que je fait avec mon fichier!

j'ai donc une feuille excel de 4 colonnes:

colonneA: correspond a la reference de l'article
colonne b : correspond a la categorie de l'article
colonne c : correspond a l'article
colonne d : son prix

ex:
A B C D
1111 Alimentaire Pomme 0.50?
2222 Livres Atlas 15?

et ainsi de suite.

Dans mon UserForm, l'utilisateur à trois optionbutton correspondant a trois catégories (aliment livres, non alimentaires)
lorsqu'il clique dessus la listbox affiche l'ensemble des articles correspondant ainsi que leurs prix (listbox de deux colonnes)

je souhaiterais aussi via une textbox qu'il puisse encoder une reference et lorsqu'il appuye sur Enter, l'article et son prix s'affiche dans la listbox.
Mais, je souhaiterais, en plus qu'il puisse afficher plusieurs fois le meme article!
j'espere avoir été clair...
peut être cela t'aidera à voir ou est mon probleme...

encore merci!
0
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
17 mars 2008 à 20:17
...

non desolé je ne vois pas ou est le probleme.

C'est quoi cette message box ?

De plus cela veut dire quoi encoder une reference : saisir,choisir ?

A+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
17 mars 2008 à 21:47
L'erreur provient peut-être du fait que tu cherches une valeur numérique et que tu lui passes une valeur String (Format...)

Essaie en forçant la valeur en numérique
.Find(CLng(NomCherche),....)

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
cs_Fabian123 Messages postés 180 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 22 novembre 2013
18 mars 2008 à 08:55
Bonjour Bigfish, Bonjour Mpi,

J'ai essayé avec 'CLng' mais ça ne fonctionne pas! j'ai aussi essayé de retirer la partie avec le mssgbox pour voir si il plantait, mais non! ça ne plante pas mais il ne se passe rien!

Concernant mon petit programme, je vais essayer de vous expliquer mieux à quoi il doit servir! il s'agit d'un petit progr de gestion d'une boutique.

j'ai donc dans une feuille excel les infos suivantes:

 - colonneA : contient des références (4 chiffres)
 - colonneB : contient les catégories d'articles (chaque article est lié à une catégorie, il y en a trois au total (Alimentaire, NonAlimentaire et Livres)
 - colonneC : Contient les articles à vendre
 - colonne D : Contient le prix des articles.

Dans un userform j'ai placé les objets suivants:

 - une textbox
 - 2 listbox
 - 3 optionbuttons. (correspondant chacun à une catégorie d'articles)

l'userform sert donc à encoder les articles vendus. Je souhaiterais que l'utilisateur ai deux possibilités pour lui encoder les articles:
 - 1ère possibilité:
il choisi, via un des optionbutton, une catégorie d'article (alimentaire, non alimentaire ou livres) les articles (et leurs prix) de cette catégorie sont alors affiché dans la première listbox (elle affiche donc une fois chaque article). L'utilisateur double-clique alors sur un article et celui-ci est 'copié/collé' dans la seconde listbox. Il peut ainsi encoder plusieurs fois le meme article. Au final la listbox2 lui donne l'ensemble des articles vendu.
Pour cette possibilité, pas de problème ça marche!

- 2ème possibilité:
il encode la référence de l'article (4chiffres) dans la textbox et lorsqu'il appuye sur la touche 'Enter' l'article (et sont prix) s'affiche directement dans la seconde listbox. (comme pour l'autre possibilité, il peut encoder plusieurs fois le meme article).
Pour cette possibilité, ça marche pas!!

Voilà j'espere avoir été  un peu plus clair...
0
cs_Fabian123 Messages postés 180 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 22 novembre 2013
18 mars 2008 à 10:05
ça fonctionne nickel!!!!

Merci Beaucoup!!!!!
0
Rejoignez-nous