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 :

[VBA-E] ComboBox en cascade avec correspondance dans matrice


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 3
    Points : 4
    Points
    4
    Par défaut [VBA-E] ComboBox en cascade avec correspondance dans matrice
    Bonjour,

    Après avoir parcouru le forum qui a résolu plusieurs de mes soucis, il m'en reste un où je coince.

    Mon but est de cascader 2 ComboBox, le choix de la première déterminant les options de la seconde, et que le choix de la seconde affiche dans d'autres cellules, les infos correspondant à ce dernier dans une matrice qui dépend justement de la valeur de la première...
    C'était clair ? J'explique, ma première liste correspond au nom d'un budget auquel correspond des sous-budget sélectionnables dans la seconde liste. Le choix de ce sous-budget doit afficher son montant et sa date de validité.

    J'ai commencé par utiliser les outils formulaires, là, aucun soucis pour afficher les infos (grâce à la fonction index([matrice];[no_ligne]) ), mais impossible de lier les 2 listes, du coup, je me suis rabattu sur les objets de contrôle.
    J'ai donc créé mes 2 ComboBox et dans la première j'ai mis le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub ComboBox2_Change()
        ComboBox3.Value = Null
        ComboBox3.ListFillRange = Range("D8").Value
    End Sub
    "D8" étant ma cellule de référence de ma ComboBox2 pour en afficher le résultat (qui se fait directement contrairement à la liste déroulante des outils formulaire).
    Ensuite, dans ma feuille avec mes différentes matrices listant les sous-budget, j'ai nommé chaque matrice avec le nom correspondant du budget afin de pointer directement dessus sans avoir à le mettre en "dur" dans le code. Déjà, s'il y a une autre manière, je suis open, mais ça fonctionne donc...

    Mon principal problème est de pouvoir afficher les données correspondant au sous-budget étant donné qu'il n'y a plus de référence d'index du coup, j'ai testé la formule suivante, mais il ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =RECHERCHEV(H8;CONCATENER("Tables!";D8);1)
    "H8" étant la cellule de référence de ma ComboBox3 et "Tables" ma feuille avec les matrices.
    Evidement, si je peux me passer d'une formule et mettre ça directement dans le code, là, ça m'arrange, mais je ne sais pas comment récupérer les données dans la bonne matrice (même si la seconde ComboBox a sélectionné la ligne).

    Voilà, c'est un peu long, mais je voulais être clair.

    La question optionnelle, histoire de bien finir, est-il possible de masquer la feuille Tables sans causer de soucis dans les listes déroulantes ?

  2. #2
    Membre confirmé Avatar de Commodore
    Homme Profil pro
    Business manager
    Inscrit en
    Février 2004
    Messages
    599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Business manager

    Informations forums :
    Inscription : Février 2004
    Messages : 599
    Points : 632
    Points
    632
    Par défaut
    j'ai pas très bien compris ton problème, mais pour répondre a ta question optionnelle, oui tu peux masquer la feuille sans causer de souci d'accès aux données.
    Moi, j'aime pas facebook.

    Musiciens de France

  3. #3
    Candidat au Club
    Inscrit en
    Juin 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Mon problème en résumé était de remplacer par du code vba, l'indexation présente dans les outils formulaire et pas dans les outils de controle. Après plusieurs recherche sur le forum et quelques test infructueux (qu'est-ce qu'ils sont pas clair leurs messages d'erreur entre paranthèses...), j'ai trouvé ma soluce... donc si il y en a qui on besoin pour s'en inspirer :

    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
    Private Sub ComboBox2_Change()
        ComboBox3.Value = Null
        ComboBox3.ListFillRange = Range("D8").Value
    End Sub
    Private Sub ComboBox3_Change()
        If ComboBox3.Value <> "" Then
            Dim MaFeuille As Worksheet, Reponse As Range, PremAdresse As String
            Dim MonCritere As String
            Dim MonBudget As Range, MaDateBudget As Range, MaMatrice As Range
            Set MaFeuille = Sheets("Tables")
            Set MaMatrice = Sheets("Tables").Range("N2:N10")
            MonCritere = Sheets("Saisie").Range("H8").Value
            With MaMatrice
                Set Reponse = .Find(MonCritere, LookIn:=xlValues)
                If Not Reponse Is Nothing Then
                    PremAdresse = Reponse.Address
                End If
            End With
            Set MonBudget = Sheets("Tables").Cells(Range(Reponse.Address).Row, Range(Reponse.Address).Column + 1)
            Set MaDateBudget = Sheets("Tables").Cells(Range(Reponse.Address).Row, Range(Reponse.Address).Column + 2)
            Sheets("Saisie").Range("E9").Value = MonBudget.Value
            Sheets("Saisie").Range("I9").Value = MaDateBudget.Value
            Set Reponse = Nothing
        End If
    End Sub
    Pour info, les pièges que j'ai rencontré sont :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub ComboBox2_Change()
        ComboBox3.Value = Null
        ComboBox3.ListFillRange = Range("D8").Value
    End Sub
    Private Sub ComboBox3_Change()
        If ComboBox3.Value <> Null Then
    malgré le fait que j'initialise ComboBox3.Value à Null, ce test ne fonctionne pas, il considère toujours le résultat comme faux, en mettant "" à la place, no soucy.
    De plus, quand j'ai défini mes range MonBudget et MaDateBudget, il a fallu impérativement que je mette ma référence de feuille dedans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Saisie").Range("E9").Value = Sheets("Tables").MonBudget.Value
    ne fonctionne pas, ce n'est pas une propriété reconnue (ça peut être évident pour ceux qui connaissent, mais je le marque pour info pour ceux comme moi qui débutent).

    Voilà, il me reste encore pas mal de boulot, mais le sujet de ce post est résolu, mes autres questions (si je n'en trouve pas les réponses seul) seront sujettent à des post différents.

    Merci en tout cas aux auteurs des différents FAQ (celui de J-M RABILLOUD m'a bien aidé) et aux modérateurs qui par leurs réponses orientées aux autres post m'ont permis de saisir (en partie tout du moins) comment aborder mon problème et ainsi le résoudre.

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

Discussions similaires

  1. [XL-2007] combobox en cascade avec feuille differente de l'usf
    Par stephadm dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 25/07/2011, 10h20
  2. Réponses: 12
    Dernier message: 30/05/2006, 15h57
  3. [VBA]Execution d'une procédure avec un ComboBox sur Excel
    Par delamarque dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 31/01/2006, 09h27
  4. Réponses: 4
    Dernier message: 13/10/2005, 14h44
  5. [debutant][awt] Pb avec ItemStateChanged dans combobox
    Par cosmos.1097 dans le forum Composants
    Réponses: 2
    Dernier message: 30/06/2005, 18h38

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