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 :

Combobox en Cascade


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2019
    Messages : 8
    Par défaut Combobox en Cascade
    Bonjour à toutes et à tous,

    Etant débutant en VBA, je rencontre quelques difficultés qui me bloquent depuis quelques jours , du coup je sollicite votre aide svp.

    Je suis en cours de réalisation d'un dossier de suivi sur excel . Cependant je souhaiterais réaliser une liste déroulante conditionnelle au niveau de la ressource sélectionnée.
    Je voudrais :
    que la liste déroulante ( combobox 2 ) s'affiche en fonction de la précédente. Dans notre cas c'est afficher dans le combobox 2 les ordres de fabrication affectés à la ressource (par exemple sur la ressource 242, on peut avoir un ou plusieurs ordres de fabrication ), par la suite afficher le numéro d’article en fonction de l’ordre de fabrication choisi dans le combobox 3 . Ensuite insérer la quantité saisie dans le textebox .
    Bouton de commande « enregistrer » qui nous permet d’insérer à chaque fois la ligne avec la ressource sélectionnée ainsi que l’of sélectionné et le produit qui correspond à l’of , la date et l’heure d’enregistrement.
    Si je clique sur enregistrer par exemple, ça va nous insérer nos sélections dans une ligne .

    Par exemple : ressource 242 ---- OF134567 ----- T345634 ( n° d'article ) ------- 25 (Quantité) -------- 12/05/2020 15:45

    Je serai vraiment reconnaissant;

    j'espère que j'étais clair

    Je vous remercie d'avance
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour à toi, Bonjour au Forum,

    Classique. Sujet maintes fois abordé.

    Une simple recherche amène à de nombreux exemples

    2 espaces à consulter
    Les combobox en cascades (FAQ)
    Les Combobox en cascades par Pierre Fauconnier (avec tableaux structurés)

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2019
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2019
    Messages : 8
    Par défaut
    Bonjour Marcel G ,

    Merci pour votre retour

    Au faite, j'ai essayé mais je n'y arrive pas .

    ca m'affiche la liste des ressources, mais dans les combobox suivant ca n'affiche rien

    Cordialement

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    Private Sub UserForm_Initialize()
      Me.ComboBox1.List = SansDoublonsTrié(Application.Transpose(Range("A2:A" & [A65000].End(xlUp).Row)))
    End Sub
     
     
     
    Private Sub ComboBox1_Change()
        'Remplissage Combo2
        Alim_Combo 2, ComboBox1.Value
    End Sub
     
     
    Private Sub ComboBox2_Change()
        'Remplissage Combo3
        Alim_Combo 3, ComboBox2.Value
    End Sub
     
    Function SansDoublonsTrié(a)
      Set d = CreateObject("Scripting.Dictionary")
      For Each c In a
        d(c) = ""
      Next c
      b = d.keys
      Call Tri(b, LBound(b), UBound(b))
      SansDoublonsTrié = Application.Transpose(b)
    End Function
     
    Sub Tri(a, gauc, droi) ' Quick sort
      ref = a((gauc + droi) \ 2)
      g = gauc: d = droi
      Do
        Do While a(g) < ref: g = g + 1: Loop
        Do While ref < a(d): d = d - 1: Loop
        If g <= d Then
          temp = a(g): a(g) = a(d): a(d) = temp
          g = g + 1: d = d - 1
        End If
       Loop While g <= d
       If g < droi Then Call Tri(a, g, droi)
       If gauc < d Then Call Tri(a, gauc, d)
    End Sub
     
     
    Private Sub Alim_Combo(CbxIndex As Integer, Optional Cible As Variant)
        Dim j As Integer
        Dim Obj As Control
     
     
        Set Obj = Me.Controls("ComboBox" & CbxIndex)
     
        Obj.Clear
     
     
        If CbxIndex = 1 Then
            'Boucle sur les lignes de la colonne A (à partir de la 2eme ligne)
            For j = 2 To NbLignes
                Obj = Ws.Range("A" & j)
                'Remplit le ComboBox sans doublons
                If Obj.ListIndex = -1 Then Obj.AddItem Ws.Range("A" & j)
            Next j
        Else
     
            For j = 2 To NbLignes
                If Ws.Range("A" & j).Offset(0, CbxIndex - 2) = Cible Then
                    Obj = Ws.Range("A" & j).Offset(0, CbxIndex - 1)
                    If Obj.ListIndex = -1 Then Obj.AddItem Ws.Range("A" & j).Offset(0, CbxIndex - 1)
                End If
            Next j
       End If
     
       'Enlève la sélection dans le ComboBox
       Obj.ListIndex = -1
    End Sub

  4. #4
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut,

    Tout d'abord, 2 précautions à considérer pour une meilleure lisibilité
    - Reporter un code nécessite d'utiliser les balises appropriées #
    - L'indentation (retrait des lignes comprises dans un bloc If, With ...) du code est nécessaire, voire obligatoire

    Dans un premier temps, mieux vaut éviter les procédures annexes (ici Tri) jusqu'à la finalisation du code principal.

    N'ayant pas ton classeur sous la main, je te propose les actions suivantes:
    - placer des points d'arrêt dans ton code
    - lancer le formulaire
    - procéder à une exécution en pas à pas à partir des points d'arrêt en notant les valeurs de cellules considérées

  5. #5
    Membre Expert Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Par défaut
    Bonjour,

    Je n'ai jamais été partisant des combobox liés à coup de dictionnaire.
    C'est loin d'être simple à comprendre pour les non initiés.

    De plus les fichiers exemples fournis, ne répondent à aucun 'standard' (déclaration variable, utilisation de notation à crochet, limite des ligne à 65000,et j'en passe...)

    Pour résoudre ton souci, je te conseillerais vivement de jeter un œil à ce post, avec les outils actuels ( power query), il devrait être assez simple de passer de ta table global à une architecture "base de données".

    Combox en cascade Pierre Fauconnier

    Et donc de remplir tes combobox en cascade.

    Ps : vu que tu utilises un tableau structuré, ça serait bien aussi de jeter un œil à ceci, à fin dans utiliser la syntaxe spécifique dans ton code.

    Tuto ListObject Pierre Fauconnier

Discussions similaires

  1. Probleme ComboBox en cascade
    Par YOP33 dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 17/01/2010, 15h08
  2. fonction pour filtrage avec des combobox en cascade
    Par Montor dans le forum Contribuez
    Réponses: 3
    Dernier message: 09/11/2009, 12h05
  3. [E-00] ComboBox en cascade + TextBox
    Par couistelle dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 20/11/2008, 10h32
  4. Combobox en cascade et sans doublons
    Par humbp dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/11/2007, 13h54
  5. [VBA-E] ComboBox en cascade avec correspondance dans matrice
    Par ViperSpy dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/06/2006, 17h01

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