Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Select Case

4 réponses
Avatar
Jean-Paul V
Bonjour à tous
Je veux lorsque OptionButton2 = True utiliser ces Combobox pour faire des
CHOIX dans ma BD et alimenter mes 3 Lisbox ( choixnom ; ChoixOeuvre ;
ChoixDisque )
Mon Userform est initialisé avec :
Private Sub UserForm_Initialize()
….
CHOIX = Général
End Sub

Mes Combobox sont nommés ( Compositeurs ; Types ; …)
La partie Else de cette Macro avec le combo Compositeurs fonctionne ainsi
que la suite :
Private Sub Compositeurs_Change()
If Formulaire.OptionButton2.Value = False Then
...
Else
'Mettre à jour la listeBox choixnom et y mettre le choix fait avec le
Combobox Compositeurs
CHOIX = CompositeurChoisi
If Me.Compositeurs.Value <> "" Then
Me.choixnom.Clear
Me.choixnom.List = Array(Compositeurs.Value)
Formulaire.choixnom.ListIndex = 0
Else
'ne rien faire
End If
End If
End Sub
Alors que celle avec le combo Types commence bien car elle liste bien toutes
les oeuvres (si je choisi sonate j’obtiens toutes les sonates ) avec :
Private Sub Types_Change()
...
Else 'cas où je veux une aide au choix dans la BD
CHOIX = TypeChoisi
If Me.Types.Value <> "" Then
Set f = Sheets("BD")
Me.choixnom.Clear
Me.ChoixOeuvre.Clear
Me.ChoixDisque.Clear
Set MonDico = CreateObject("Scripting.Dictionary")
For Each C In f.Range("C2", f.[C65000].End(xlUp))
If Left(C.Value, Len(Types.Value)) = Types.Value And Not
MonDico.Exists(C.Value) Then MonDico.Add C.Value, C.Value
Next C
Formulaire.ChoixOeuvre.List = MonDico.items
If Formulaire.ChoixOeuvre.ListCount > 0 Then
If Formulaire.ChoixOeuvre.ListIndex = -1 Then
Formulaire.ChoixOeuvre.ListIndex = 0 ‘ ceci déclanche la macro
ChoixOeuvre_Clik
End If
End If
Range("essai").Value = Me.ChoixOeuvre.List(Me.ChoixOeuvre.ListIndex)
'ne marche pas ?
Else
'ne rien faire
End If
End If
End Sub
Mais elle se plante ensuite bizarrement sur : A =
Me.choixnom.List(Me.choixnom.ListIndex) de la macro suivante
Du Case Général alors que nous devrions être dans Case TypeChoisi ???
Private Sub ChoixOeuvre_Click()
...
Select Case CHOIX
Case Général
T = Me.ChoixOeuvre.List(Me.ChoixOeuvre.ListIndex)
T = Replace(T, "'", "''")
A = Me.choixnom.List(Me.choixnom.ListIndex) 'ce plante bizarrement ici
dans le cas TypeChoisi ???
Me.ChoixDisque.Clear
Requete = "SELECT Image From [" & NomFeuille & "$] Where Auteur like "
& "'" & A & "' And Œuvre like " & "'" & T & "' Group By Image"
Controle = "ChoixDisque"
MaRequêteAvecADO Controle, Requete
If Me.ChoixDisque.ListCount > 0 Then
If Me.ChoixDisque.ListIndex = -1 Then
Me.ChoixDisque.ListIndex = 0
End If
Else
ChoixDisque_Click
End If

Case TypeChoisi
Me.choixnom.Clear 'déjà fait mais utile si chgt choix oeuvre
T = Me.ChoixOeuvre.List(Me.ChoixOeuvre.ListIndex)
T = Replace(T, "'", "''")
Controle = "choixnom"
Requete = "SELECT Auteur From [" & NomFeuille & "$] Where Œuvre like " & _
"'" & T & "' Group By Auteur"
MaRequêteAvecADO Controle, Requete
If Me.choixnom.ListCount > 0 Then
If Me.choixnom.ListIndex = -1 Then
Me.choixnom.ListIndex = 0
End If
Else
ChoixDisque_Click
' choixnom_Click
End If
Range("essai2").Value = Me.choixnom.List(Me.ChoixOeuvre.ListIndex)

Case CompositeurChoisi
T = Me.ChoixOeuvre.List(Me.ChoixOeuvre.ListIndex)
T = Replace(T, "'", "''")
A = Me.choixnom.List(Me.choixnom.ListIndex)
Me.ChoixDisque.Clear
Requete = "SELECT Image From [" & NomFeuille & "$] Where Auteur like "
& "'" & A & "' And Œuvre like " & "'" & T & "' Group By Image"
Controle = "ChoixDisque"
MaRequêteAvecADO Controle, Requete
If Me.ChoixDisque.ListCount > 0 Then
If Me.ChoixDisque.ListIndex = -1 Then
Me.ChoixDisque.ListIndex = 0
End If
Else
ChoixDisque_Click
End If

....
Case Else
ChoixDisque_Click
End Select
End Sub
Qui peut m’expliquer ce mystère ?
http://cjoint.com/?jiqxMvLJnL
à + j’espère

--
Jean-Paul V

4 réponses

Avatar
Xavier
j'ai pas eu le temps de bien regarder mais il est normal que ça plante
puisque Me.choixnom est préalablement clear et donc que Me.choixnom est
vide et Me.choixnom.ListIndex=-1
donc Me.choixnom.List(Me.choixnom.ListIndex) n'existe pas et ne peut
être égal à A

Xavier

Jean-Paul V a écrit :
Bonjour à tous
Je veux lorsque OptionButton2 = True utiliser ces Combobox pour faire des
CHOIX dans ma BD et alimenter mes 3 Lisbox ( choixnom ; ChoixOeuvre ;
ChoixDisque )
Mon Userform est initialisé avec :
Private Sub UserForm_Initialize()
….
CHOIX = Général
End Sub

Mes Combobox sont nommés ( Compositeurs ; Types ; …)
La partie Else de cette Macro avec le combo Compositeurs fonctionne ainsi
que la suite :
Private Sub Compositeurs_Change()
If Formulaire.OptionButton2.Value = False Then
...
Else
'Mettre à jour la listeBox choixnom et y mettre le choix fait avec le
Combobox Compositeurs
CHOIX = CompositeurChoisi
If Me.Compositeurs.Value <> "" Then
Me.choixnom.Clear
Me.choixnom.List = Array(Compositeurs.Value)
Formulaire.choixnom.ListIndex = 0
Else
'ne rien faire
End If
End If
End Sub
Alors que celle avec le combo Types commence bien car elle liste bien toutes
les oeuvres (si je choisi sonate j’obtiens toutes les sonates ) avec :
Private Sub Types_Change()
...
Else 'cas où je veux une aide au choix dans la BD
CHOIX = TypeChoisi
If Me.Types.Value <> "" Then
Set f = Sheets("BD")
Me.choixnom.Clear
Me.ChoixOeuvre.Clear
Me.ChoixDisque.Clear
Set MonDico = CreateObject("Scripting.Dictionary")
For Each C In f.Range("C2", f.[C65000].End(xlUp))
If Left(C.Value, Len(Types.Value)) = Types.Value And Not
MonDico.Exists(C.Value) Then MonDico.Add C.Value, C.Value
Next C
Formulaire.ChoixOeuvre.List = MonDico.items
If Formulaire.ChoixOeuvre.ListCount > 0 Then
If Formulaire.ChoixOeuvre.ListIndex = -1 Then
Formulaire.ChoixOeuvre.ListIndex = 0 ‘ ceci déclanche la macro
ChoixOeuvre_Clik
End If
End If
Range("essai").Value = Me.ChoixOeuvre.List(Me.ChoixOeuvre.ListIndex)
'ne marche pas ?
Else
'ne rien faire
End If
End If
End Sub
Mais elle se plante ensuite bizarrement sur : A =
Me.choixnom.List(Me.choixnom.ListIndex) de la macro suivante
Du Case Général alors que nous devrions être dans Case TypeChoisi ???
Private Sub ChoixOeuvre_Click()
...
Select Case CHOIX
Case Général
T = Me.ChoixOeuvre.List(Me.ChoixOeuvre.ListIndex)
T = Replace(T, "'", "''")
A = Me.choixnom.List(Me.choixnom.ListIndex) 'ce plante bizarrement ici
dans le cas TypeChoisi ???
Me.ChoixDisque.Clear
Requete = "SELECT Image From [" & NomFeuille & "$] Where Auteur like "
& "'" & A & "' And Œuvre like " & "'" & T & "' Group By Image"
Controle = "ChoixDisque"
MaRequêteAvecADO Controle, Requete
If Me.ChoixDisque.ListCount > 0 Then
If Me.ChoixDisque.ListIndex = -1 Then
Me.ChoixDisque.ListIndex = 0
End If
Else
ChoixDisque_Click
End If

Case TypeChoisi
Me.choixnom.Clear 'déjà fait mais utile si chgt choix oeuvre
T = Me.ChoixOeuvre.List(Me.ChoixOeuvre.ListIndex)
T = Replace(T, "'", "''")
Controle = "choixnom"
Requete = "SELECT Auteur From [" & NomFeuille & "$] Where Œuvre like " & _
"'" & T & "' Group By Auteur"
MaRequêteAvecADO Controle, Requete
If Me.choixnom.ListCount > 0 Then
If Me.choixnom.ListIndex = -1 Then
Me.choixnom.ListIndex = 0
End If
Else
ChoixDisque_Click
' choixnom_Click
End If
Range("essai2").Value = Me.choixnom.List(Me.ChoixOeuvre.ListIndex)

Case CompositeurChoisi
T = Me.ChoixOeuvre.List(Me.ChoixOeuvre.ListIndex)
T = Replace(T, "'", "''")
A = Me.choixnom.List(Me.choixnom.ListIndex)
Me.ChoixDisque.Clear
Requete = "SELECT Image From [" & NomFeuille & "$] Where Auteur like "
& "'" & A & "' And Œuvre like " & "'" & T & "' Group By Image"
Controle = "ChoixDisque"
MaRequêteAvecADO Controle, Requete
If Me.ChoixDisque.ListCount > 0 Then
If Me.ChoixDisque.ListIndex = -1 Then
Me.ChoixDisque.ListIndex = 0
End If
Else
ChoixDisque_Click
End If

....
Case Else
ChoixDisque_Click
End Select
End Sub
Qui peut m’expliquer ce mystère ?
http://cjoint.com/?jiqxMvLJnL
à + j’espère



Avatar
Jean-Paul V
Bonjour Xavier

Si vous regardez à nouveau dans le Case TypeChoisi il n'y a pas de :
A = Me.choixnom.List(Me.choixnom.ListIndex)
la question est pourquoi la macro s'obstine à exécuter Case Général dans
ChoixOeuvre
Dans Private Sub Types_Change()
après les :
Me.choixnom.Clear
Me.ChoixOeuvre.Clear
Me.ChoixDisque.Clear
j'ai essayé d'ajouter un CHOIX = TypeChoisi au cas où un des 3 clear
m'aurait changé mon CHOIX rien à faire il s'obstine à éxécuter Case Général
dans ChoixOeuvre_Click
Bonne journée





--
Jean-Paul V


"Xavier" wrote:

j'ai pas eu le temps de bien regarder mais il est normal que ça plante
puisque Me.choixnom est préalablement clear et donc que Me.choixnom est
vide et Me.choixnom.ListIndex=-1
donc Me.choixnom.List(Me.choixnom.ListIndex) n'existe pas et ne peut
être égal à A

Xavier

Jean-Paul V a écrit :
> Bonjour à tous
> Je veux lorsque OptionButton2 = True utiliser ces Combobox pour faire des
> CHOIX dans ma BD et alimenter mes 3 Lisbox ( choixnom ; ChoixOeuvre ;
> ChoixDisque )
> Mon Userform est initialisé avec :
> Private Sub UserForm_Initialize()
> ….
> CHOIX = Général
> End Sub
>
> Mes Combobox sont nommés ( Compositeurs ; Types ; …)
> La partie Else de cette Macro avec le combo Compositeurs fonctionne ainsi
> que la suite :
> Private Sub Compositeurs_Change()
> If Formulaire.OptionButton2.Value = False Then
> ...
> Else
> 'Mettre à jour la listeBox choixnom et y mettre le choix fait avec le
> Combobox Compositeurs
> CHOIX = CompositeurChoisi
> If Me.Compositeurs.Value <> "" Then
> Me.choixnom.Clear
> Me.choixnom.List = Array(Compositeurs.Value)
> Formulaire.choixnom.ListIndex = 0
> Else
> 'ne rien faire
> End If
> End If
> End Sub
> Alors que celle avec le combo Types commence bien car elle liste bien toutes
> les oeuvres (si je choisi sonate j’obtiens toutes les sonates ) avec :
> Private Sub Types_Change()
> ...
> Else 'cas où je veux une aide au choix dans la BD
> CHOIX = TypeChoisi
> If Me.Types.Value <> "" Then
> Set f = Sheets("BD")
> Me.choixnom.Clear
> Me.ChoixOeuvre.Clear
> Me.ChoixDisque.Clear
> Set MonDico = CreateObject("Scripting.Dictionary")
> For Each C In f.Range("C2", f.[C65000].End(xlUp))
> If Left(C.Value, Len(Types.Value)) = Types.Value And Not
> MonDico.Exists(C.Value) Then MonDico.Add C.Value, C.Value
> Next C
> Formulaire.ChoixOeuvre.List = MonDico.items
> If Formulaire.ChoixOeuvre.ListCount > 0 Then
> If Formulaire.ChoixOeuvre.ListIndex = -1 Then
> Formulaire.ChoixOeuvre.ListIndex = 0 ‘ ceci déclanche la macro
> ChoixOeuvre_Clik
> End If
> End If
> Range("essai").Value = Me.ChoixOeuvre.List(Me.ChoixOeuvre.ListIndex)
> 'ne marche pas ?
> Else
> 'ne rien faire
> End If
> End If
> End Sub
> Mais elle se plante ensuite bizarrement sur : A =
> Me.choixnom.List(Me.choixnom.ListIndex) de la macro suivante
> Du Case Général alors que nous devrions être dans Case TypeChoisi ???
> Private Sub ChoixOeuvre_Click()
> ...
> Select Case CHOIX
> Case Général
> T = Me.ChoixOeuvre.List(Me.ChoixOeuvre.ListIndex)
> T = Replace(T, "'", "''")
> A = Me.choixnom.List(Me.choixnom.ListIndex) 'ce plante bizarrement ici
> dans le cas TypeChoisi ???
> Me.ChoixDisque.Clear
> Requete = "SELECT Image From [" & NomFeuille & "$] Where Auteur like "
> & "'" & A & "' And Œuvre like " & "'" & T & "' Group By Image"
> Controle = "ChoixDisque"
> MaRequêteAvecADO Controle, Requete
> If Me.ChoixDisque.ListCount > 0 Then
> If Me.ChoixDisque.ListIndex = -1 Then
> Me.ChoixDisque.ListIndex = 0
> End If
> Else
> ChoixDisque_Click
> End If
>
> Case TypeChoisi
> Me.choixnom.Clear 'déjà fait mais utile si chgt choix oeuvre
> T = Me.ChoixOeuvre.List(Me.ChoixOeuvre.ListIndex)
> T = Replace(T, "'", "''")
> Controle = "choixnom"
> Requete = "SELECT Auteur From [" & NomFeuille & "$] Where Œuvre like " & _
> "'" & T & "' Group By Auteur"
> MaRequêteAvecADO Controle, Requete
> If Me.choixnom.ListCount > 0 Then
> If Me.choixnom.ListIndex = -1 Then
> Me.choixnom.ListIndex = 0
> End If
> Else
> ChoixDisque_Click
> ' choixnom_Click
> End If
> Range("essai2").Value = Me.choixnom.List(Me.ChoixOeuvre.ListIndex)
>
> Case CompositeurChoisi
> T = Me.ChoixOeuvre.List(Me.ChoixOeuvre.ListIndex)
> T = Replace(T, "'", "''")
> A = Me.choixnom.List(Me.choixnom.ListIndex)
> Me.ChoixDisque.Clear
> Requete = "SELECT Image From [" & NomFeuille & "$] Where Auteur like "
> & "'" & A & "' And Œuvre like " & "'" & T & "' Group By Image"
> Controle = "ChoixDisque"
> MaRequêteAvecADO Controle, Requete
> If Me.ChoixDisque.ListCount > 0 Then
> If Me.ChoixDisque.ListIndex = -1 Then
> Me.ChoixDisque.ListIndex = 0
> End If
> Else
> ChoixDisque_Click
> End If
>
> ....
> Case Else
> ChoixDisque_Click
> End Select
> End Sub
> Qui peut m’expliquer ce mystère ?
> http://cjoint.com/?jiqxMvLJnL
> à + j’espère
>



Avatar
Xavier
Effectivement j'avais pas compris la finesse du pb

Ton problème vient du fait que tu oublie de mettre les guillemets dans
tes string
Case "Général" au lieu de case Général

en effet si tu met pas les guillemets il prends général comme une
variable vide et donc lorsque choix ="" et bien le case général s'active
car général=""

de même tu dois marquer CHOIX = "Général" et non CHOIX = Général


Xavier

Jean-Paul V a écrit :
Bonjour Xavier

Si vous regardez à nouveau dans le Case TypeChoisi il n'y a pas de :
A = Me.choixnom.List(Me.choixnom.ListIndex)
la question est pourquoi la macro s'obstine à exécuter Case Général dans
ChoixOeuvre
Dans Private Sub Types_Change()
après les :
Me.choixnom.Clear
Me.ChoixOeuvre.Clear
Me.ChoixDisque.Clear
j'ai essayé d'ajouter un CHOIX = TypeChoisi au cas où un des 3 clear
m'aurait changé mon CHOIX rien à faire il s'obstine à éxécuter Case Général
dans ChoixOeuvre_Click
Bonne journée







Avatar
Jean-Paul V
Bonjour Xavier

C'est bien ça, merci ça marche
--
Jean-Paul V


"Xavier" wrote:

Effectivement j'avais pas compris la finesse du pb

Ton problème vient du fait que tu oublie de mettre les guillemets dans
tes string
Case "Général" au lieu de case Général

en effet si tu met pas les guillemets il prends général comme une
variable vide et donc lorsque choix ="" et bien le case général s'active
car général=""

de même tu dois marquer CHOIX = "Général" et non CHOIX = Général


Xavier

Jean-Paul V a écrit :
> Bonjour Xavier
>
> Si vous regardez à nouveau dans le Case TypeChoisi il n'y a pas de :
> A = Me.choixnom.List(Me.choixnom.ListIndex)
> la question est pourquoi la macro s'obstine à exécuter Case Général dans
> ChoixOeuvre
> Dans Private Sub Types_Change()
> après les :
> Me.choixnom.Clear
> Me.ChoixOeuvre.Clear
> Me.ChoixDisque.Clear
> j'ai essayé d'ajouter un CHOIX = TypeChoisi au cas où un des 3 clear
> m'aurait changé mon CHOIX rien à faire il s'obstine à éxécuter Case Général
> dans ChoixOeuvre_Click
> Bonne journée
>
>
>
>
>