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 :

Code répétitif pour combobox


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti 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
    Points : 367
    Points
    367
    Par défaut Code répétitif pour combobox
    Bonjour à tous

    je voudrais savoir s'il est possible de simplifier un code redondant dans le cas ou se sont pour des combobox avec l’événement "change"

    je met ci dessous le code de la 1er combobox. c'est le même de la 2 èmè à la 5 ème.
    Les combobox sonc "produit1" à "produit5"
    les textbox qui sont modifié par le choix de combobox sont
    "stock_actuel1" à "stock_actuel5"
    et
    "prix1" à "prix5"

    le but étant de me faire apparaître en fonction du produit sont stock actuel et son prix

    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
     
    Private Sub produit1_Change()
    On Error Resume Next
    Dim Cellule As Range
     
    Dim prix As Single, stockact As Single
    Dim NomPièce As Variant
    If Not Cellule Is Nothing Then prix = Cellule(1, 6)
     
    NomPièce = produit1.Value
    prix = WorksheetFunction.VLookup(NomPièce, Range("stock"), 5, False)
    prix1.Value = prix
    stockact = WorksheetFunction.VLookup(NomPièce, Range("stock"), 3, False)
    stock_actuel1.Value = stockact
    End Sub

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Bonjour,

    Tu mets cette macro par combobox :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub produit1_Change()
        test Right(produit1.Name, 1)
    End
    et cette macro 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
    Sub test(Num)
        Dim prix As Single, stockact As Single
        Dim Cellule As Range
        Dim NomPièce As Variant
        If Not Cellule Is Nothing Then prix = Cellule(1, 6)
     
        NomPièce = Controls("produit" & Num).Value
        prix = WorksheetFunction.VLookup(NomPièce, Range("stock"), 5, False)
        Me.Controls("prix" & Num).Value = prix
        stockact = WorksheetFunction.VLookup(NomPièce, Range("stock"), 3, False)
        Me.Controls("stock_actuel" & Num) = stockact
    End Sub

  3. #3
    Membre averti 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
    Points : 367
    Points
    367
    Par défaut
    Merci,

    ça fonctionne

    Pour comprendre, le "(num)" dans sub test(Num)
    est obtenue grâce à cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    test Right(produit1.Name, 1)
    Donc dans la même idée d'allègement de code
    dans le UserForm_Initialize()
    j'ai 5 fois ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    produit1.RowSource = "stock!a2:a" & Range("stock!a65536").End(xlUp).Row
       produit1.MatchEntry = fmMatchEntryComplete ' permet d'ecrire les nom dans une zone de liste deroulante
        produit1.MatchRequired = True 'pour forcer une saisie correct
    l'utilisation d'un "Controls("produit" & Num)" devrait me permettre d'écrire une fois le code au lieu de 5 ?

  4. #4
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 207
    Points : 14 362
    Points
    14 362
    Par défaut
    Est-ce que le RowSource est le même pour les 5 contrôles ? Sinon quel est-il ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub UserForm_Initialize()
        For i = 1 To 5
            Set Var = Me.Controls("produit" & i)
            With Me.Controls("produit" & i)
                .RowSource = "stock!a2:a" & Range("stock!a65536").End(xlUp).Row
                .MatchEntry = fmMatchEntryComplete
                .MatchRequired = True
            End With
        Next i
    End Sub

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour, regarde ça
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. [Débutant] Code c# : pour remplir (combobox) à partir d'une BDD postgresql
    Par geoinformation dans le forum C#
    Réponses: 11
    Dernier message: 22/12/2012, 12h53
  2. [XL-2010] Code VBA pour trier sur combobox
    Par duplaly dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 14/04/2011, 17h56
  3. Probleme de Code pour combobox et base de donnée
    Par freko dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 03/11/2007, 14h37
  4. [VB6] Code source pour modifier MsgBox
    Par khany dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 25/02/2003, 15h13

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