Gestion boutique

cs_Fabian123 Messages postés 180 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 22 novembre 2013 - 6 mars 2008 à 11:39
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 - 10 mars 2008 à 16:19
Bonjour à tous!

voilà mon problème:

j'ai un classeur excel dans lequel j'ai un tableau de trois colonnes, une avec la catégorie, une avec l'article et une avec le prix. ça donne donc, pour exemple, ceci:
<colgroup><col style=\"WIDTH: 60pt\" span=\"3\" width=\"80\" /></colgroup>----
 colonneB,    ColonneC ,                                   ColonneD, ----
alimentaire,    pomme, 0,7, ----
alimentaire                  ,    poire, 0,65, ----
non alimentaire,    cuilleres, 1,1, ----
non alimentaire,    fourchettes, 1,15, ----
livre,    mangerbien, 8,25, ----
livre,    le chocolat, 8,25, ----
livre,    lesgateaux, 17,15

je souhaiterais, dans un userform placer trois optionbutton, qui correspondrait chacun à une catégorie et lorsque je sélectionnerais un de ces boutons, les articles correspondant ainsi que leur prix s'afficherais dans une ListBox...

j'ai essayé avec l'aide d'excel... mais je n'arrive pas à appliquer les deux exemples donnés dans l'aide... (il s'agit d'exemple avec 'MatchEntry' et 'Item') Je pense que je dois travailler avec MatchEntry, mais je n'y arrive pas...

Quelqu'un peut m'aider ou me donner des pistes?

Merci d'avance!

19 réponses

Firelion Messages postés 27 Date d'inscription lundi 18 février 2008 Statut Membre Dernière intervention 29 avril 2008
6 mars 2008 à 11:56
Bonjour,

Je crois que pour ajouter un élément à une ListBox il faut utiliser ListBox.AddItem
0
cs_Fabian123 Messages postés 180 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 22 novembre 2013
6 mars 2008 à 12:05
oui, il faut utiliser additem, mais il faut qu'il sélectionne dans ma colonne' article' uniquement les articles correspondant à ma sélection faite avec les optionbuttons.. par exemple si j'ai sélectionné le bouton 'livres', il ne devrait afficher dans la listbox les trois articles concernés... et ça, je ne sais pas comment faire...

Mais merci de t'interesser à mon souci!
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
6 mars 2008 à 12:16
Bonjour

Pour récupérer la liste des catégories :

Private function GetListCategories() as String()
    dim ltStr() as string
    Redim ltStr(-1 to -1)
   
    dim i as long
    dim j as long
    dim lOK as boolean
    dim lStr as string
   
    i=0
    Do while Range ("B2").offset(i,0).value<>""
        lOK=true
        lStr=Range ("B2").offset(i,0).value
        'Recherche si la catégorie est connue
        for j=0 to ubound(ltstr)
            if lstr=ltstr(j) then
                lok=false
                exit for
            end if
        Next j
       
        'Si inconnue, on l'ajoute
        if lok then
            If ubound(ltstr)>=0 then
                redim preserve ltstr(0 to ubound(ltstr)+1)
            else
                redim ltstr(0 to 0)
            end if
           
            ltstr(ubound(ltstr))=lstr
        end if
       i=i+1
    Loop
   
    GetListCategories=ltStr
End function

Ensuite pour remplir ta listbox :
Private sub RemplLstBx(byval pCategorie as string)
    dim i as long
  
   ListBox1.Clear
  
    i=0
    Do while Range ("B2").offset(i,0).value<>""
        If Range ("B2").offset(i,0).value=pcategorie Then
            ListBox1.addItem Range ("C2").offset(i,0).value & " (" & cstr (Range ("D2").offset(i,0).value) & ")"
        end if
        i=i+1
    Loop
End sub

Code tapé endehore de VBA, possibilités d'erreurs et de fautes de frappes.

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
cs_Fabian123 Messages postés 180 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 22 novembre 2013
6 mars 2008 à 14:08
Merci NHenry pour ton code...

mais à mon avis je dois être le plus mauvais programmeur que l'histoire ai connu!

je place ton code, il ne plante pas mais il ne se passe rien non plus... je présume que je ne le place pas au bon endroit...

j'ai placé ton code dans le userform_initialize(), mais je suppose que j'ai fait une bourde monumentale qui va te faire dresser les cheveux sur la tête!!

je continue à chercher, je finirai bien par trouver!
0

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

Posez votre question
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
6 mars 2008 à 14:23
Bonjour

Ne te sens pas seul, tout le monde a été débutant un jour.

Tu mets ces fonction/procédures dans la form qui les utilises (tel quel, sans mettre dans une autre fonction).

Ensuite quand tu veux remplir la liste des catégories, dans la sub que tu as choisi (gestionnaire d'evenement), tu fais :

Dim ltCategories() as string
dim i as long

ltCategories=GetListCategories()
For i=0 to ubound(ltCategories)
    ComboBox1.AddItem (ltCategories(i)) 'Tu remplaces évidamment ComboBox1 par le nom de ton ComboBox
Next i

Ensuite, dans l'event Click de ton ComboBox :
RemplLstBx(ComBoBox1.Text)
N'oublis pas de mettre le nom de la listbox choisie dans la sub.

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
cs_Fabian123 Messages postés 180 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 22 novembre 2013
6 mars 2008 à 14:36
Merci de prendre le temps de m'expliquer... (je crois que ce que je veux faire est un peu trop compliqué pour un débutant comme moi...)

je pense savoir pourquoi il ne se passait rien quand j'ai mis ton code...

en fait si je t'ai bien compris, tu utilise une combobox pour afficher et selectionner la catégorie (alimentaire, non alimentaire et livres dans mon cas) En fait, moi je pensais utiliser des boutons d'options, chacun intitulé par la catégorie (il n'y aura jamais d'autres catégories que celles citées, c'est pour ca que j'avais opté pour les boutons...

mais je vais essayer avec une combobox, après tout ça sera peut être aussi bien!

encore merci!
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
6 mars 2008 à 14:47
Bonjour

Ben alors, tu n'as qu'a utiliser la sub RemplLstBx en mettant en paramètre le nom de la catégorie.

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
cs_Fabian123 Messages postés 180 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 22 novembre 2013
6 mars 2008 à 15:23
tout le monde a débuté un jour, c'est vrai, mais moi je commence à me demander si je n'aurais pas mieux fait d'arrêter avant de commencer!!!

alors, j'ai fait comme tu as dit (enfin je pense, puisque ça plante, il doit y avoir un truc que j'ai pas fait comme tu as dit!!!)

je te laisse le code comme je l'ai copié dans mon userform... peut être pourras tu me dire ou je commet des erreurs... (j'aime pas être débutant...!)

il me met le message d'erreur suivant:
"Erreur d'execution '424' : Objet requis"

Encore merci pour ton aide!

Private Function GetListCategories() As String()
    Dim ltStr() As String
    ReDim ltStr(-1 To -1)
   
    Dim i As Long
    Dim j As Long
    Dim lOK As Boolean
    Dim lStr As String
   
    i = 0
    Do While Range("B2").Offset(i, 0).Value <> ""
        lOK = True
        lStr = Range("B2").Offset(i, 0).Value
        'Recherche si la catégorie est connue
        For j = 0 To UBound(ltStr)
            If lStr = ltStr(j) Then
                lOK = False
                Exit For
            End If
        Next j
       
        'Si inconnue, on l'ajoute
        If lOK Then
            If UBound(ltStr) >= 0 Then
                ReDim Preserve ltStr(0 To UBound(ltStr) + 1)
            Else
                ReDim ltStr(0 To 0)
            End If
           
            ltStr(UBound(ltStr)) = lStr
        End If
       i = i + 1
    Loop
   
    GetListCategories = ltStr
End Function



'Ensuite pour remplir ta listbox :
Private Sub RemplLstBx(ByVal pCategorie As String)
    Dim i As Long
  
   ListBox1.Clear
  
    i = 0
    Do While Range("B2").Offset(i, 0).Value <> ""
        If Range("B2").Offset(i, 0).Value = pCategorie Then
            ListBox1.AddItem Range("C2").Offset(i, 0).Value & " (" & CStr(Range("D2").Offset(i, 0).Value) & ")"
        End If
        i = i + 1
    Loop
End Sub



 
Private Sub OptionButton_Alimentaire_Click()
    RemplLstBx (Alimentaire.Text)
End Sub



Private Sub OptionButton_NonAlimentaire_Click()
    RemplLstBx (NonAlimentaire.Text)
End Sub



Private Sub OptionButton_Livres_Click()
    RemplLstBx (Livres.Text)
End Sub
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
6 mars 2008 à 15:29
Bonjour

Erreur "Erreur d'execution '424' : Objet requis" OK, mais où ?

Si c'est sur cette ligne :
ListBox1.AddItem Range("C2").Offset(i, 0).Value & " (" & CStr(Range("D2").Offset(i, 0).Value) & ")"
C'est que Listbox1 ne doit pas être ton Listbox

Au passage, pense à mettre TOUJOURS "Option Explicit" en haut de ton code (UserForm, Module, ...)

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
cs_Fabian123 Messages postés 180 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 22 novembre 2013
6 mars 2008 à 15:33
Excuse moi j'ai oublié de mettre la ligne ou se produisait l'erreur!

il s'agit de cette ligne:  RemplLstBx (Alimentaire.Text)

et je penserai, à partir de maintenant de mettre 'option explicit'
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
6 mars 2008 à 15:44
Bonjour

Question à 1 centime, ton optionbutton il s'appel "Alimentaire" ou "OptionButton_Alimentaire" ?

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
6 mars 2008 à 15:45
Bonjour

Remarque, à la place de
RemplLstBx (Alimentaire.Text)
Préfère :
Call RemplLstBx (Alimentaire.Text)

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
cs_Fabian123 Messages postés 180 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 22 novembre 2013
6 mars 2008 à 16:00
ben dans les propriétés de optionbutton j'ai mis ceci:

dans la propriété 'name'(la première) : OptionButton_Alimentaire
et dans la propriété 'caption' : Alimentaire

J'ai fait une bétise?
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
6 mars 2008 à 16:14
Bonjour

Donc l'appel est :
Call RemplLstBx (OptionButton_Alimentaire.Caption)

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
cs_Fabian123 Messages postés 180 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 22 novembre 2013
7 mars 2008 à 08:03
Salut NHenry,

merci pour ta précieuse aide! 
j'ai changé le code comme tu l'as dit, il ne plante plus mais... il ne m'affiche pas non plus les articles dans la listbox...

Peut être devrais-je essayer de prendre le probleme sous un autre angle et d'essayer d'afficher les articles en passant par une autre façon de faire...

'Suis nul!!!!! Bouhouhou!!!!
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
7 mars 2008 à 08:40
Bonjour

Essaye une execution en pas à pas, et regarde la valeur des variables (Shift+F9 sur l'expression à espionner).
Essaye de voir pourquoi ça coince, si tu n'y arrive pas, je pourrais peut être t'aider autrement (echange de fichier).

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
cs_Fabian123 Messages postés 180 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 22 novembre 2013
7 mars 2008 à 09:22
salut!

j'ai essayé avec les espions, mais je trouve rien...

si tu veux, je peux t'envoyer le fichier (par mail?) pour que tu puisses y regarder... à moins que tu n'ai assez d'infos (après tout, c'est toi qui m'a fait le code, tu le connais mieux que moi!)

je crois que j'ai vu grand pour mon premier projet...
0
cs_Fabian123 Messages postés 180 Date d'inscription vendredi 18 janvier 2008 Statut Membre Dernière intervention 22 novembre 2013
10 mars 2008 à 16:03
salut nHenry,

je continue le post (si j'ai bien compris ce que tu m'as demandé par mail.

tu m'avais laissé un message sur vb pour que je t'envoie le fichier parcequ'il ne fonctionnait pas... mais,, pour une raison que j'ignore, il ne marche pas au bureau, par contre à la maison il marche nickel (et c'est le principal)

J'ai encore beaucoup de question à poser... si tu veux (que tu as le temps et que tu acceptes evidemment!) je peux t'envoyer mon fichier sur ton mail en t'expliquant ce que je souhaite faire au final... il y a beaucoup de chose ou je bloque, ou alors je ne sais pas par ou commencer.

Si tu preferes, je peux aussi poser mes autres questions sur ce même post...

Encore merci pour toute l'aide que tu m'apportes!
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
10 mars 2008 à 16:19
Bonjour

Quand tu envoie un courriel, indique l'adresse du sujet, car je participe à beaucoup de sujets, donc il ne m'est pas facile de retrouver tous les sujets.

D'accord pour l'envoi par mail avec les explications. Je t'indique quand même que je n'ai pas internet chez moi, donc je ne peux le faire que du jour pour le lendemain.

Au vu de ton problème, je pense que c'est dû à l'environnement, mais je ne peux pas t'en dire plus pour l'instant.

Dans Word, j'Excel. (juste pour la citation)
VB (6, .NET1&2), C++, C#.Net1
Mon site
0
Rejoignez-nous