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 :

Condition à l’événement change de ma combobox [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2018
    Messages : 19
    Par défaut Condition à l’événement change de ma combobox
    Bonjour,

    J'ai un combobox2, je souhaiterai qu'a l'évènemen ( change), la combobox3 affiche les valeurs conditionelles..Tout fonctionne bien. Mais quand j'ai la valeur ( 4ème Année) et combobox1 a la valeur ( ADULTE), la combobox3 affiche correctement " CONFIRMATION"...le problème survient si au prochaint évènement change de ma combobox2, sa valeur est ( 4ème Année) et que la combobox1 a pour valeur ( ENFANTS OU JEUNES), la combobox3 affiche " CONFIRMATION' au lieu de ( 5ème Année).

    Quelqu'un pourrait il bien apporter une correction à mon code....

    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
     
     
    Private Sub ComboBox2_Change()
     
     Me.ComboBox3.Value = ""
     If ComboBox2.Value = "PréCatéchuménat" Then
           ComboBox3.Value = "1ère  Année"
           CommandButton5.Enabled = True
           CommandButton3.Enabled = False
           Exit Sub
           End If
     
           If ComboBox2.Value = "1ère  Année" Then
           ComboBox3.Value = "2ème  Année"
           CommandButton5.Enabled = True
           CommandButton3.Enabled = False
           Exit Sub
           End If
     
           If ComboBox2.Value = "2ème  Année" Then
           ComboBox3.Value = "3ème  Année"
           CommandButton5.Enabled = True
           CommandButton3.Enabled = False
           Exit Sub
           End If
     
           If ComboBox2.Value = "3ème  Année" Then
           ComboBox3.Value = "BAPTÊME"
           CommandButton3.Enabled = True
           CommandButton5.Enabled = False
           Exit Sub
           End If
     
           If ComboBox1.Value = "ENFANTS" And ComboBox2.Value = "4ème  Année" Then
           ComboBox3.Value = "5ème  Année"
            CommandButton5.Enabled = True
            CommandButton3.Enabled = False
            Exit Sub
           End If
           If ComboBox1.Value = "JEUNES" And ComboBox2.Value = "4ème  Année" Then
           ComboBox3.Value = "5ème  Année"
            CommandButton5.Enabled = True
            CommandButton3.Enabled = False
            Exit Sub
           End If
            If ComboBox2.Value = "5ème  Année" Then
           ComboBox3.Value = "CONFIRMATION"
            CommandButton3.Enabled = True
            CommandButton5.Enabled = False
            Exit Sub
           End If
           If ComboBox1.Value = "ADULTES" And ComboBox2.Value = "4ème  Année" Then
            ComboBox3.Value = "CONFIRMATION"
            CommandButton3.Enabled = True
            CommandButton5.Enabled = False
            Else
            If ComboBox2.Value = "4ème  Année" Then
           ComboBox3.Value = "5ème  Année"
            CommandButton5.Enabled = True
            CommandButton3.Enabled = False
           End If
            Exit Sub
           End If
           ComboBox3.Locked = False
    End Sub

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Je ne cesserai personnellement jamais de répéter le caractère assez abusif - et on en paye quelquefois le prix - de l'utilisation de l'évènement Change d'une combobox en lieu et place de l'évènement click. S'il est vrai qu'une corrélation existe entre la sélection faite et l'intitulé de la zone d'édition (seule concernée par l'évènement Change) d'une combobox, il n'en demeure pas moins vrai qu'il convient de ne pas se servir de l'effet d'une cause comme la cause elle-même. Cet évènement Change ne devrait être utilisé qu'aux fins de contrôle de saisie (en cours de saisie) de la zone d'édition de la combobox.
    Quant à la détermination de l'article sélectionné, elle se fait de manière orthodoxe au clic (évènement Click) ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Combobox1.Listindex ' retourne l'index de l'article sélectionné
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Combobox1.List(combobox1.listindex) ' retourne donc la valeur de l'article sélectionné

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    D'accord avec Jacques sur le choix de l'évènement.

    Pour résoudre ton problème (en ne comprenant pas bien pourquoi un combobox3 puisqu'apparemment, il ne s'agit pas d'y choisir une valeur mais simplement d'y inscrire une valeur), je te propose de sortir la logique du code, de travailler avec des tableaux structurés dans Excel et de t'appuyer dessus pour trouver la bonne valeur.

    Sur click du combobox2, on recherche la bonne valeur dans le tableau grâce à la combinaison des valeurs des combobox2 et combobox1 grâce à EVALUATE qui teste un INDEX/EQUIV matriciel.

    Tu vois ainsi que le code qui cherche la valeur n'imbrique pas des IF et des EXIT dans tous les sens. Si d'autres cas devaient être créés, il suffirait de compléter le(s) tableau(x) sans toucher au code (pour autant que la logique de dépendance des combo soit respectée, évidemment).

    Nom : 2018-08-27_220259.png
Affichages : 1277
Taille : 14,3 Ko

    Dans un module standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Test()
      With UserForm1
        .ComboBox1.List = Range("t_cb1[cb1]").Value
        .ComboBox2.List = Range("t_cb2[cb2]").Value
        .ComboBox3.List = Range("t_cb3[cb3]").Value
        .Show
      End With
      Unload UserForm1
    End Sub
    Dans le userform
    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
    Private Sub ComboBox2_Click()
      Dim Value As String
     
      Value = getCb3Value()
      If Value <> "N/A" Then
        ComboBox3.Value = Value
      Else
        MsgBox "Choix impossible"
      End If
    End Sub
     
    Function getCb3Value()
      Dim Formula As String
      Dim Search As String
     
      Formula = "iferror(index(t_choix[cb3],match(""[search]"",t_choix[cb2] & ""-"" & t_choix[cb1],0)),""N/A"")"
      Search = ComboBox2.Value & "-" & ComboBox1.Value
      Formula = Replace(Formula, "[search]", Search, , , vbTextCompare)
      getCb3Value = Evaluate(Formula)
    End Function
    PS: Nomme tes contrôles. C'est beaucoup plus simple pour écrire, lire et comprendre le code...
    Fichiers attachés Fichiers attachés
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Août 2018
    Messages : 19
    Par défaut Re
    Bonjour, merci à vous. Monsieur Pierre, votre proposition me convient. je l'ai testé et ça marche. Merci

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

Discussions similaires

  1. [XL-2007] Synthétiser tous les evenements "change" sur des combobox avec une seule macro ou modules
    Par Titeuf4243 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 18/12/2017, 19h01
  2. [XL-2010] Répétition d'action sur la condition "change" de plusieurs combobox.
    Par jordan973 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 16/02/2014, 16h15
  3. [XL-2010] Evenement "Click" et " Change" d'une ComboBox
    Par oppositif dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 13/01/2014, 15h46
  4. Réponses: 2
    Dernier message: 21/07/2007, 01h12
  5. [VBA E] propriété on change d'une combobox
    Par gruget dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/02/2007, 14h19

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