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 :

Definir l'index d'une combobox comme une variable


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 76
    Par défaut Definir l'index d'une combobox comme une variable
    Bonjour a tous,

    Suite a la mise en place d'un userform avec plusieurs combobox, je souhaite utiliser une boucle sur les index de la combobox pour optimiser mon code.

    Toutefois, je ne sais pas comment definir la variable suivante :
    Dim Obj as ?
    Obj = ("ComboBox" & CbxIndex)

    Comment definir le tout pour que le code marche properment?

    Merci d'avance

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    Sub Control_delivery_report()
     
    ''''''''''''''''''''''''''
    '''This macro is developped to monitor the delivery from RPC to SANG VILLA SITE
     
     
    Dim Ws As Worksheet
    Dim pl, r As Range
    Dim Obj as ?
    Dim pa As String
     
    Dim CbxIndex, N_cbxIndex As Integer
     
    ''''''''''''''''''''''''''
    '''Collect the data form userform Delivery Report
     
    Set Ws = Worksheets("Database_production")
    Set Obj = "ComboBox" & CbxIndex
    Set Obj1 = "Combobox" & N_cbxIndex
     
    ''''''''''''''''''''''''''
    '''Common data to the all userform
     
    Delivery_date = UserForm6.Calendar1.Value
    subcontractor = UserForm6.ComboBox1.Value
    truck_nb = UserForm6.ComboBox2.Value
     
    ''''''''''''''''''''''''''
    '''Specific data from userfrom
     
    Ws.Select
     
    If CbxIndex = 3 Or CbxIndex = 5 Or CbxIndex = 7 Or CbxIndex = 9 Or CbxIndex = 11 Then
        N_cbxIndex = CbxIndex + 1
        nblines = WorksheetFunction.CountA(Range("A:A"))
        Set pl = Ws.Range("D2:D" & nblines)
        Set r = pl.Find(CStr(UserForm6.Obj.Value & UserForm6.Obj1.Value))
     
        If Not r Is Nothing Then
        pa = r.Address
        sr1 = Cells(Range(pa).Row, 1)
        End If
     
     
        Sheets("Database").Select
        Cells(sr1, 14) = Delivery_date
        Cells(sr1, 15) = subcontractor
        Cells(sr1, 16) = truck_nb
    End If
     
    End Sub

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    Le code ci dessous pourrait t'aider, il boucle sur chaque objet de la userform et affiche le nom des combobox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Dim Ctl As Control
     
    For Each Ctl In UserForm1.Controls
        If TypeOf Ctl Is MSForms.ComboBox Then
            MsgBox Ctl.Name
        End If
     
    Next

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    76
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 76
    Par défaut
    L'idee est bonne, elle fonctionne sauf que je recupere une seule donnee.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim Ctl As Control
     
    For Each Ctl In UserForm1.Controls
        If TypeOf Ctl Is MSForms.ComboBox Then
            MsgBox Ctl.Name
        End If
     
    Next
    Si je comprends bien ce code, il vient rechercher les valeurs des combobox (et en affiche le message).

    Comment, je peux fusionner deux combobox? Et ensuite les faire tourner sur d'autres combobox afin d'en recuperer les informations?


    Voici mon fichier (ci-joint)

    Dans le userform, je recupere les donnees d'un element precis: (Son Nom et sa Reference). J'ai utilise une combobox en cascade pour me l'approprier et connaitre les stocks actuels.

    Pour la premiere ligne de la combobox voici me code qui fonctionne:

    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
     
     
    Dim Ws As Worksheet
    Dim pl, r As Range
    Dim pa As String
     
    Set Ws = Worksheets("Database_production")
     
    Delivery_date = UserForm6.Calendar1.Value
    subcontractor = UserForm6.ComboBox1.Value
    truck_nb = UserForm6.ComboBox2.Value
     
    Ws.Select
     
        nblines = WorksheetFunction.CountA(Range("A:A"))
        Set pl = Ws.Range("D2:D" & nblines)
        Set r = pl.Find(CStr(UserForm6.combobox3.Value & UserForm6.combobox4.Value))
     
        If Not r Is Nothing Then
        pa = r.Address
        sr1 = Cells(Range(pa).Row, 1)
        End If
     
     
        Sheets("Database").Select
        Cells(sr1, 14) = Delivery_date
        Cells(sr1, 15) = subcontractor
        Cells(sr1, 16) = truck_nb
    End If
    Toutefois, il y a 5 lignes de livraison differentes que je souhaite repliquer avec une boucle, plutot que le reecrire le code en modifiant les Index des combobox.

    J'avais cette idee en tete:
    Utiliser les index des combobox et les faire tourner en boucle.
    Cependant je ne sais pas declarer les variables ... J'ai toujours une erreur type.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    Obj = ("userform6.combobox" & CbxIndex)
    N_obj = ("userform6.combobox" & Cbxindex + 1)
     
    For cbxIndex = 3 to 11
     
    Set r = pl.Find(CStr(Obj.Value & N_Obj.Value))
     
    Next
    Merci d'avance
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. [Débutant] Récupérer une valeur d'une combobox via une SortedList
    Par smurfing dans le forum VB.NET
    Réponses: 1
    Dernier message: 18/03/2013, 13h32
  2. Comment faire une recherche dans une combobox et une sélection automatique
    Par VictoriusDan dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/12/2009, 16h17
  3. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  4. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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