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.

1 réponse

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
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
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
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
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
McKinley > ano nime
 
Bonjour ano nime,

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