IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

zone de liste pour alimenter textbox [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Par défaut zone de liste pour alimenter textbox
    bonjour a tous

    voila j'ai un formulaire "prise_de_commande" pour alimenter une feuille "commandeelectro".

    ce formulaire fonctionne très bien, mais je voudrais lui ajouter une fonction plus complexe

    actuellement je remplis les combobox :
    "nom", "boxtype", "boxmarque", "boxproduit"
    elles sont alimenter dans "UserForm_Initialize" par une fonction de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    boxtype.RowSource = "source!e2:e" & Range("source!e65536").End(xlUp).Row
    ensuite je saisie dans les textbox :
    "boxref", "pvht" (référence et prix de vente hors taxe)

    je cherche a créer deux nouvelles fonctions

    1) la première serait d'alimenter une liste dans la feuille "source" à chaque fois qu'une nouvelle référence(qui n'a jamais été sur cette liste) est saisie sur le bon de commande, cette référence vient s'ajouter à la liste, ainsi que le prix de vente HT qui va avec cette référence de la box PVHT

    2)la deuxième qui dépend de la première serait d'avoir une zone de liste reprenant la liste de référence avec le pvht, mais qui se filtre au fur et a mesure des choix sur les combobox, ainsi si sur cette zone de liste apparait une référence que je doit taper, je voudrais double cliquer sur la ref et ainsi elle viendrait alimenter les deux textbox


    voila c'est assez lourd et je ne sais même pas si c'est possible

    merci pour votre aide

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 102
    Par défaut
    Bonsoir

    Un code pour rajouter les données à la suite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Dim dl1 As Long ' en tête de module
    Private Sub boxtype_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    dl1= 0 
    If boxtype.ListIndex = -1 Then
    With Sheets("source")
    dl1 = .Cells(.Rows.Count, 5).End(xlUp).Row + 1
    .Range("e" & dl1) = ComboBox1.Value
    boxtype.RowSource = "source!e2:e" & Range("source!e65536").End(xlUp).Row
    End With
    End If
    End Sub
    La variable "dl1" contient le numéro de ligne, elle peut être utilisé pour mettre les éléments qui se trouvent dans les textbox.

    A tester

    JP014

  3. #3
    Membre éclairé Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Par défaut
    merci de venir m'aider

    je n'arrive pas a faire fonctionner cette macro dans le formulaire
    j'ai mis boxtype_Exit vers la fin de l'action du formulaire et placer le code dans un module

    mais je n'obtiens que le message
    erreur de compilation
    sub ou fonction mal définie

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 102
    Par défaut
    Bonjour

    Citation Envoyé par bosk1000 Voir le message
    merci de venir m'aider

    je n'arrive pas a faire fonctionner cette macro dans le formulaire
    j'ai mis boxtype_Exit vers la fin de l'action du formulaire et placer le code dans un module
    Le code doit être dans l'userform et non dans un module.

    JP014

  5. #5
    Membre éclairé Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Par défaut
    pour faire le test sans souci, j'ai créer un bouton pour ajouter la ref (txt_nexref), ainsi qu'une feuille (aaa) juste pour remplir cette fonction

    j'ai donc mis comme code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Private Sub txt_nexref_Click(ByVal Cancel As MSForms.ReturnBoolean)
    Dim dl1 As Long ' en tête de module
    dl1 = 0
    If boxtype.ListIndex = -1 Then
    With Sheets("source")
    dl1 = .Cells(.Rows.Count, 5).End(xlUp).Row + 1
    .Range("e" & dl1) = ComboBox1.Value
    boxtype.RowSource = "aaa!e2:e" & Range("aaa!e65536").End(xlUp).Row
    End With
    End If
    End Sub
    au démarrage du formulaire, un message apparait :

    erreur de compilation
    la déclaration de la procédure ne correspond pas à la description de l'événement ou de la procédure de même nom

    avec un focus sur la première ligne
    j'ai donc tester en retirant ce qui est entre les parenthèse
    (ByVal Cancel As MSForms.ReturnBoolean)
    et il ne se passe rien quand je clique sur le bouton.

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour,
    un exemple:
    dans l'userform j'ai une combo boxtype alimentée par E2:Exx de la feuille source.
    un textbox boxref qui:
    Reprend le choix dans boxtype
    Ou Ajoute un nouveau item à boxtype
    Ou éventuellement on peux écrire un item déjà existant (ne sera pas ajouté)
    ci-joint les codes nécessaires: (à mettre dans le module de l'userform)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Option Explicit
     
    Private Sub UserForm_Initialize()
    boxtype.RowSource = "source!E2:E" & Sheets("source").Cells(Rows.Count, 5).End(xlUp).Row
    End Sub
     
    Private Sub boxref_AfterUpdate()
    Dim c As Range
    Dim LastLig As Long
     
    With Sheets("source")
        LastLig = .Cells(Rows.Count, 5).End(xlUp).Row
        Set c = .Range("E2:E" & LastLig).Find(boxref, LookIn:=xlValues, lookat:=xlWhole)
        If c Is Nothing Then
            .Range("E" & LastLig + 1) = boxref
            boxtype.ListIndex = -1
            boxtype.RowSource = "source!E2:E" & LastLig + 1
            boxtype.Value = boxtype.List(boxtype.ListCount - 1)
        Else
            boxtype.Value = boxref.Value
        End If
        Set c = Nothing
    End With
     
    End Sub
     
    Private Sub boxtype_Change()
    boxref = boxtype
    End Sub

  7. #7
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Ou simplement sans le textbox
    dans la combo, on aura le choix de sélectionner un item existant ou d'ajouter un nouveau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Private Sub UserForm_Initialize()
    boxtype.RowSource = "source!E2:E" & Sheets("source").Cells(Rows.Count, 5).End(xlUp).Row
    End Sub
     
    Private Sub boxtype_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
    Dim c As Range
    Dim LastLig As Long
     
    With Sheets("source")
        LastLig = .Cells(Rows.Count, 5).End(xlUp).Row
        Set c = .Range("E2:E" & LastLig).Find(boxtype, LookIn:=xlValues, lookat:=xlWhole)
        If c Is Nothing Then
            .Range("E" & LastLig + 1) = boxtype
            boxtype.RowSource = "source!E2:E" & LastLig + 1
            boxtype.Value = boxtype.List(boxtype.ListCount - 1)
        End If
        Set c = Nothing
    End With
    End Sub

  8. #8
    Membre éclairé Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Par défaut
    mercatog, merci
    ton premier code, que j'ai repris et adapté (car j'ai déjà une boxtype), m'a permis donc d'enregistrer l'entrée de toute nouvelle référence,

    maintenant comment puis-je crée une condition supplémentaire qui,
    si j'inscrit une nouvelle référence, je met sur les colonnes suivante la valeur dans les box:
    - boxtype, boxmarque, boxproduit et pvht
    car pour la deuxième phase, je désire créer une zone de liste qui se filtrerais au fur et a mesure des choix ainsi me laissant un choix de référence déjà saisie en fonction des éléments sélectionné, et qui me mettrais le pvht automatiquement, si je le sélectionne

  9. #9
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Il suffit d'ajouter (en commentaire)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Private Sub boxref_AfterUpdate()
    Dim c As Range
    Dim LastLig As Long
     
    With Sheets("source")
        LastLig = .Cells(Rows.Count, 5).End(xlUp).Row
        Set c = .Range("E2:E" & LastLig).Find(boxref, LookIn:=xlValues, lookat:=xlWhole)
        If c Is Nothing Then
            .Range("E" & LastLig + 1) = boxref
    'ICI    .Range("F" & LastLig + 1) = boxmarque
    'ICI    .Range("G" & LastLig + 1) = boxproduit
    '....
            boxtype.ListIndex = -1
            boxtype.RowSource = "source!E2:E" & LastLig + 1
            boxtype.Value = boxtype.List(boxtype.ListCount - 1)
        Else
            boxtype.Value = boxref.Value
        End If
        Set c = Nothing
    End With
     
    End Sub

  10. #10
    Membre éclairé Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Par défaut
    impeccable
    ainsi je bénéficie d'une base de donnée qui va s'alimenter au fur et a mesure de mes saisie, qui indiquera le type, la marque, le produit, le prix de vente ht et sa réf

    toute la 1er phase se remplie impeccablement

    mais maintenant, peux t'on utiliser cette source d'information pour avoir dans une zone de liste, un filtrage des référence, en fonction des précédent choix (type, marque, produit) me laissant ainsi les réf et pvht existant dans la source

    ainsi s'il existe je veux juste cliquer dessus pour qu'il se mette la ref dans boxref, et le prix dans pvht

  11. #11
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435

  12. #12
    Membre éclairé Avatar de bosk1000
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    706
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 706
    Par défaut
    les combobox en cascades n'était pas ce que je cherchait.
    mais en lisant les 2 post
    j'ai eu un éclair
    filtre élaboré

    (note : au passage quelque modif)
    1) la feuille ou se déverse les infos est BDD
    2) l'ordre de rangement des infos de la colonne A à E (type, marque; produit, pvht, ref)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Private Sub boxproduit_Change()
    Sheets("critère").Activate
    Range("a2").Value = boxtype.Value
    Range("b2").Value = boxmarque.Value
    Range("c2").Value = boxproduit.Value
    filtre_élaborée
    list_operation.ColumnHeads = True 'en tete de colone
    list_operation.ColumnCount = 5 ' nombre de colone a afficher
    list_operation.ColumnWidths = "60,40;80;40;40"
    list_operation.RowSource = "extraction!a2:E" & Range("extraction!a65536").End(xlUp).Row ' étendue de la liste a ficher
    End Sub
    et le code filtre_élaborée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Sub filtre_élaborée()
    Sheets("extraction").Select
        Cells.Select
        Range("a1").Activate
        Selection.ClearContents
     Sheets("BDD").Columns("A:E").AdvancedFilter Action:=xlFilterCopy, _
            CriteriaRange:=Sheets("critère").Rows("1:2"), CopyToRange:=Range("A1"), _
            Unique:=False
        Range("A2").Select
    End Sub

    j'obtiens donc une listbox avec les références et les prix propre a une marque, un type et un produit

    je touche au but
    reste la dernière étape
    comment faire pour qu'en double cliquant sur une des référence, elle vienne directement sur la combobox boxref, et que le prix vienne dans la textbox pvht

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 04/08/2006, 01h51
  2. zone de liste pour afficher
    Par issam16 dans le forum Access
    Réponses: 9
    Dernier message: 22/06/2006, 15h15
  3. Cliquer sur zone de liste pour valider la valeur
    Par gwendk dans le forum Access
    Réponses: 7
    Dernier message: 15/05/2006, 15h13
  4. clic sur zone de liste pour validation
    Par ormoy28 dans le forum Access
    Réponses: 7
    Dernier message: 11/05/2006, 11h03
  5. Réponses: 4
    Dernier message: 31/10/2005, 18h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo