Problème ComboBox - Condition

McKinley -  
 McKinley -
Bonjour,

Je souhaite activer certaines lignes en fonction d'un choix dans une liste (ComboBox)
Je suis débutant en Macro.
Pour un choix, l'activation fonctionne.
Le problème, c'est que dès que je demande plusieurs conditions, ça plante, VBA ne prend en compte que ma dernière requête.

Pour mieux expliquer mon problème :
J'ai fait un userForm.
Dans le UserForm, j'ai mis une ComboBox.
Sur la feuille excel, je lance le userForm. En fonction du choix dans le UserForm, des lignes de ma feuille sont cachées ou non.

Voici le Code :

Private Sub ComboBox1_Change()
If ComboBox1.Value = "AR" Then
Rows("48:100").Hidden = True
Else
Rows("48:100").Hidden = False
End If

If ComboBox1.Value = "BR" Then
Rows("14:47").Hidden = True
Rows("60:100").Hidden = True
Else
Rows("14:47").Hidden = False
Rows("60:100").Hidden = False
End If

If ComboBox1.Value = "CR" Then
Rows("14:60").Hidden = True
Rows("65:100").Hidden = True
Else
Rows("14:60").Hidden = False
Rows("65:100").Hidden = False
End If

End Sub

Exemple : il n'y a que quand je sélectionne "CR", que les lignes sont cachées. C'est comme si VBA ne prend pas en compte le "AR" et le "BR".

Si quelqu'un voit comment je peux m'en sortir !!! :)

Merci pour votre aide.
Configuration: Windows XP
Firefox 2.0.0.13

1 réponse

  1. ano nime
     
    Bonjour,

    PB de logique

    SI condition ALORS faire_ceci SINON faire_cela.

    Dans votre cas vous cherchez si le combo vaut AR, si oui on masque les lignes 48 à 100, mais comme le combo ne vaut ni BR ni CR on affiche donc les lignes 14 à 47, 60 à 100, 14 à 60 et 65 à 100.
    moralité : si combo vaut AR les lignes 48 à 100 sont donc masqués pas les "ELSE" suivants.

    Il faut arrêter de tester les autres condition si l'une est bonne.
    0
    1. McKinley
       
      Bonjour,

      Merci pour ta réponse ano nime.
      En d'autres termes, si je comprends bien je ne peux faire qu'une seule condition pour ma combobox ?

      Comment contourner le problème ?
      Si quelqu'un a une idée, je suis preneur.
      Merci d'avance
      0
      1. ano nime > McKinley
         
        Non, vous pouvez faire autant de condition que vous voulez, mais vous avez un pb de logique dans ce que vous voulez faire car vous mettez des ELSE à chaque fois, donc ils s'exécutent à chaque fois.
        Reprenez la logique de ce que vous voulez faire et/ou ajouter des EXIT SUB (c'est pas beau ni propre) après chaque partie

        Private Sub ComboBox1_Change()
        If ComboBox1.Value = "AR" Then
        Rows("48:100").Hidden = True
        EXIT SUB
        Else
        Rows("48:100").Hidden = False
        EXIT SUB
        End If

        If ComboBox1.Value = "BR" Then
        Rows("14:47").Hidden = True
        Rows("60:100").Hidden = True
        EXIT SUB
        Else
        Rows("14:47").Hidden = False
        Rows("60:100").Hidden = False
        EXIT SUB
        End If

        If ComboBox1.Value = "CR" Then
        Rows("14:60").Hidden = True
        Rows("65:100").Hidden = True
        EXIT SUB
        Else
        Rows("14:60").Hidden = False
        Rows("65:100").Hidden = False
        EXIT SUB
        End If

        End Sub

        mais beurk beurk beurk, car le je ne fais que contourner en vite fait le pb de logique et c'est pas terrible du tout du tout (j'ai honte même de proposer ça)
        0
      2. McKinley > ano nime
         
        Bonjour ano nime,

        J'ai modifié un tout petit peu mon code de la manière suivante :

        Private Sub ComboBox1_Change()
        If ComboBox1.Value = "AR" Then
        Rows("48:100").Hidden = True
        Else
        Rows("48:100").Hidden = False
        If ComboBox1.Value = "BR" Then
        Rows("14:47").Hidden = True
        Rows("60:100").Hidden = True
        Else
        Rows("14:47").Hidden = False
        Rows("60:100").Hidden = False
        If ComboBox1.Value = "CR" Then
        Rows("14:60").Hidden = True
        Rows("65:100").Hidden = True
        Else
        Rows("14:60").Hidden = False
        Rows("65:100").Hidden = False

        End If
        End If
        End If

        End Sub

        Du coup tout fonctionne bien, mais quand j'ai choisi un des éléments AR, BR ou CR dans ma liste, les lignes restent cachées quand je reséléctionne AR...

        Existe-t-il une ligne de code qui permet de réinitailiser la comboBox à chaque séléction dans la liste ?

        Sinon, j'ai lu ton message avec les "EXIT SUB". Je l'ai essayé, mais le résultat est négatif dna smon fichier. Quand je sélectionne un des 3 choix possibles, aucunes lignes ne se retrouvent cachées...

        Merci de ton aide,

        McKinley
        0
      3. ano nime > McKinley
         
        ouais... j'avais pas testé et j'avais trop honte d'avoir écrit un truc pareil.

        Question : pourquoi avez vous des "ELSE" à chaque IF ?
        Si j'ai bien compris votre soucis, certaines lignes doivent être masquées si la case vaut AR, BR ou CR, c'est bien ça ?
        Alors moi je verrais bien un truc du genre

        Private Sub ComboBox1_Change()

        'on commence par tout afficher
        Rows("14:100").Hidden = False

        ' ensuite, selon la valeur du combo, on masque les lignes x à y
        If ComboBox1.Value = "AR" Then
        Rows("48:100").Hidden = True
        End If

        If ComboBox1.Value = "BR" Then
        Rows("14:47").Hidden = True
        Rows("60:100").Hidden = True
        End If

        If ComboBox1.Value = "CR" Then
        Rows("14:60").Hidden = True
        Rows("65:100").Hidden = True
        End If

        End Sub

        ou encore
        Private Sub ComboBox1_Change()

        'on commence par tout afficher
        Rows("14:100").Hidden = False

        ' ensuite, selon la valeur du combo, on masque les lignes x à y
        Select Case ComboBox1.Value
        Case "AR"
        Rows("48:100").Hidden = True
        Case "BR"
        Rows("14:47").Hidden = True
        Rows("60:100").Hidden = True
        Case "CR"
        Rows("14:60").Hidden = True
        Rows("65:100").Hidden = True
        EndCase

        End If
        0
      4. McKinley > ano nime
         
        Bonjour ano nime,

        Je vous remercie pour votre aide, le code fonctionne correctement.
        Merci encore pour votre aide.
        0