Problème ComboBox - Condition
McKinley
-
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.
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.
A voir également:
- Problème ComboBox - Condition
- Excel cellule couleur si condition texte - Guide
- Excel condition ou - Guide
- Nbval avec condition - Forum Excel
- NBVAL avec conditions - Forum Excel
- Excel colorer une cellule sous condition d'une autre cellule - Forum Excel
1 réponse
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.
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.
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
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)
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
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
Je vous remercie pour votre aide, le code fonctionne correctement.
Merci encore pour votre aide.