Problème ComboBox - Condition

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

  • Votes
  • Date
  • Date décroissante
  1. 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.
    1. 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
    2. @McKinleyNon, 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)
    3. @ano nimeBonjour 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
    4. @McKinleyouais... 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
    5. @ano nimeBonjour ano nime,

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