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 qui s'additionne


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur
    Inscrit en
    Mai 2018
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2018
    Messages : 93
    Par défaut Combobox qui s'additionne
    Bonjour,
    J'ai un problème avec mes combobox qui s’additionnent. Lorsque je sélectionne un chiffre dans un combobox, le suivant ne veut pas s'afficher. Si il y a des caractères, tout marche pourtant. Voici un modèle de mon code simplifié car j'ai 4 combobox qui s’auditionnent au total...


    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
    Option Explicit
    Dim f
     
    Private Sub UserForm_Initialize()
     
    Dim MonDico
    Dim C As Range
      Set f = Sheets("TEST")
      Set MonDico = CreateObject("Scripting.Dictionary")
      For Each C In Range(f.[A3], f.[A65000].End(xlUp))
        MonDico(C.Value) = C.Value
      Next C
       Me.ComboBox1.List = MonDico.items
     
    End Sub
     
    Private Sub Combobox1_Change()
     
    Dim MonDico
    Dim C As Range
      Set MonDico = CreateObject("Scripting.Dictionary")
      For Each C In Range(f.[A3], f.[A65000].End(xlUp))
         If C = Me.ComboBox1 Then MonDico(C.Offset(, 2).Value) = C.Offset(, 2).Value
      Next C
      Me.ComboBox2.List = MonDico.items
      Me.ComboBox2.ListIndex = -1
     
    End Sub
     
     
    Private Sub ComboBox2_Change()
     
    Dim C As Range
        For Each C In Range(f.[A3], f.[A65000].End(xlUp))
            If C = Me.ComboBox1 And C.Offset(, 2) = Me.ComboBox2  Then
                 Msgbox "GOOD TEST"
                Exit For
            End If
        Next C
     
    End Sub
    Si vous voulez un document pour visualiser, je peux vous l'envoyer.

    Merci pour vos réponses

  2. #2
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour Xaviou, bonjour le forum,

    Je ne vois pas, dans le code, d'addition de ComboBox !... Toutefois, il faut prendre en compte le fait qu'une ComboBox renvoie une valeur de type String (Texte). Il te faudra donc, avant de faire l'addition, convertir les données en Integer ou Double du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    T = CDbl(Me.ComboBox1.Value + Me.ComboBox2.Value)

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur
    Inscrit en
    Mai 2018
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2018
    Messages : 93
    Par défaut
    Je me suis sans doute mal exprimé.
    Quand je parle de combobox qui s’additionne, on fait une première sélection depuis la liste du combobox1. Parmi cette sélection, on fait une deuxième sélection parmi la liste du combobox2 et ainsi de suite.
    Or je sais pas comment résoudre mon problème car si j'ai une valeur numérique à sélectionner, mon combobox n'affiche rien.

    Vous voulez un document ressource?

  4. #4
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Re,

    Oui ce n'étais pas très clair... En revanche, l'indication que je te donnais devrait être la solution. Remplace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If C = Me.ComboBox1 Then MonDico(C.Offset(, 2).Value) = C.Offset(, 2).Value
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If C = CInt(Me.ComboBox1.Value) Then MonDico(C.Offset(, 2).Value) = C.Offset(, 2).Value
    et, de même, remplace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If C = Me.ComboBox1 And C.Offset(, 2) = Me.ComboBox2 Then
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If C = CInt(Me.ComboBox1.Value) And C.Offset(, 2) = CInt(Me.ComboBox2.value) Then

    Ne connaissant pas les valeur je te propose de convertir en entier CInt mais ça peut être en double CDbl.

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonjour

    je comprend pas l'interet de passer par 2 combo pour capter une de tes cellules en éA" puis tester si elle corespond a l'offset(0,2) de la combo2

    etant donné que tu rempli ta combo1 avec le control d'un dico pourquoi ne met tu pas tout (cle/item dans une combo )?

    je crois saisir dans ton intention que tu pourrais avoir un truc du genre

    dans tes cellule A et donc C
    toto - - titi
    toto- - riri

    maheureusement dans ton dico vu ta boucle qui suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each C In Range(f.[A3], f.[A65000].End(xlUp))
         If C = Me.ComboBox1 Then MonDico(C.Offset(, 2).Value) = C.Offset(, 2).Value
      Next C
    tu n'aura que toto- - riri dans le dico

    donc toute ta procedure est caduque car si tu clique dans ta combo2 riri tu ne pourrais trouver que toto-riri dans ta feuille toto- - titi n'existe pas

    c'est toute ta conception qui est a revoir
    amoins qu'il manque du code que tu nous montre pas

    dans un dico tu ne peux pas avoir toto-titi et toto-riri en tant que cle/item c'est pas possible

    re en fait en lisant une 2d fois je comprends que au click combo 2 tu va chercher la bonne association dans ta feuille avec comb1 value pour éA" et combo2.value pour l'offset(0,2)
    je maintient que tu pourrais faire avec une seule combo avec 2 colonne
    cela dit c'est ton choix


    de plus rien ne demontre dans ton code avec ton test combo1 que la value combo1 selectionnée corespond a l'existance dan ta feuille de combo1 en "A" et combo2 en "C" sans parler des doublons qui ne serait jamais selectionnés

    si tu a toto- - riri 6 fois dans ta feuille en ayant toto dans combo1 et riri dans combo2 tu n'attraperais que le 1 er dans ta feuille les autres passeraient a la trappe
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur
    Inscrit en
    Mai 2018
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2018
    Messages : 93
    Par défaut
    Bonjour à tous et merci pour vos réponses très instructives autant pour les unes pour les autres.

    En effet, il y une grande partie de code que je vous montre pas car je suis allé à l'essentiel pour vous simplifier la lecture d'ou le manque d'annonce des variables, le manque de logique de ce que je fais. En changeant tout simplement .value par .text , mes combobox marchent parfaitement.

    Pour répondre à ta question Marcel, c'est en quelques sortes un recherche en cascade en effet.

    Patrick, mon code marche parfaitement. Par exemple si j'ai 5 cellules en A avec titi, 8 cellules avec riri et 9 avec roro, je veux sélectionner titi. Parmi les 5 cellules de titi, j'ai 2 hum, 1 fum et 1 tata. Je clique sur 2 hum et ainsi de suite (vu que j'ai 4 combobox en "série") jusqu'à ce qu'il n'y est qu'une seule et unique possibilité. Mes combobox font une recherche dans 4 colonnes différentes mais dans mon tableau il y des miliers de lignes variantes et jamais deux identiques

    Je vous remercie d'avoir pris le temps de me répondre et je vous souhaite à tous une agréable fin de semaine.

    Ps: Problème résolu

  7. #7
    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 : 67
    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,

    Pour la transformation de Combobox en valeur numérique, voir une discussion récente
    ajout de combobox

    D'autre part, pourquoi déclarer un dictionnaire en Variant?
    En activant la référence
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim mondico as Scripting.dictionary
    Cette précaution facilitera d'autant l'écriture du code, en ayant accès aux propriétés et méthodes propres aux dictionaires.

    Quand bien même, pourquoi passer par un dictionnaire pour alimenter les items d'une Combobox si, lors de la création de celui-ci, on ne teste pas si l'item ajouté n'existe pas?

    Plutôt l'alimenter globalement (voir le tutoriel de Sylkiroad à ce sujet)

    Enfin, je crois comprendre que l'alimentation des Combobox du formulaire doit s'effectuer en cascade
    (La valeur choisie pour la 1ère définit les items de la suivante, etc..°
    Est-ce bien cela?

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 26/05/2008, 17h19
  2. Combobox qui remplie les chalos d'une autre combobox
    Par kenzo84 dans le forum Access
    Réponses: 2
    Dernier message: 21/06/2007, 19h22
  3. Combobox qui depend d'une autre
    Par KOUTO dans le forum Delphi
    Réponses: 3
    Dernier message: 18/12/2006, 11h11
  4. Une Combobox, qui redirige vers une Feuille
    Par Didpa dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/11/2006, 11h42
  5. [VBA-E]Erreur avec une combobox qui liste le contenu de cell
    Par Tartenpion dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/03/2006, 12h01

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