OVH Cloud OVH Cloud

end if ou select case ?

6 réponses
Avatar
BV
Bonjour à tous je reprends un post en date du 06/07
merci d'abors à tous pour vos réponses qui me permettent d'avancer
jour après jour (merci raymond)

bon j'ai ce code ci-dessous

Private Sub Commande6_Click()
Dim liste1 As String

liste1 = Forms![F_depart requetes]![toto]
If liste1 = "% de contrats arrivés à terme" Then
DoCmd.OpenQuery "STATS_A(% contrats arrivés à terme)"
Else
If liste1 = "% enfants à charge" Then
DoCmd.OpenQuery "STATS_A(% enfants à charge)"
Else
If liste1 = "% H/F" Then
DoCmd.OpenQuery "STATS_A(% H/F)"
Else
If liste1 = "% inscrits à l'anpe" Then
DoCmd.OpenQuery "STATS_A(% ANPE)"
Else
If liste1 = "% motif fin de contrat" Then
DoCmd.OpenQuery "STATS_A(% contrats arrivés à terme)"
Else
If liste1 = "% orientation activité souhaitée" Then
DoCmd.OpenQuery "STATS_A(% orientation par activité)"
Else
If liste1 = "% orientation chantier" Then
DoCmd.OpenQuery "STATS_A(% orientation chantier)"
Else
MsgBox ("autre choix non actif")
End If
End If
End If
End If
End If
End If
End If
End Sub

je sais c'est pas très propre mais je débute vraiment
Probleme j'ai une liste déroulante avec au moins 15 choix possibles et je
répète à chaque fois mes end if
raymond MVP m'a parlé de select case, mais je ne vois pas comment je pourrai
l'intégrer en enlevant les end if
et en laissant quand même un msgbox si probleme

merci pour vos réponses

BV

6 réponses

Avatar
Raymond [mvp]
Bonjour.

tu peux remplacer tous tes if-end if par ceci:

Private Sub Commande6_Click()
Dim liste1 As String
liste1 = Forms![F_depart requetes]![toto]
Select Case liste1
Case "% de contrats arrivés à terme"
DoCmd.OpenQuery "STATS_A(% contrats arrivés à terme)"
Case "% enfants à charge"
DoCmd.OpenQuery "STATS_A(% enfants à charge)"
Case "% H/F"
DoCmd.OpenQuery "STATS_A(% H/F)"
Case "% inscrits à l'anpe"
DoCmd.OpenQuery "STATS_A(% ANPE)"
Case "% motif fin de contrat"
DoCmd.OpenQuery "STATS_A(% contrats arrivés à terme)"
Case "% orientation activité souhaitée"
DoCmd.OpenQuery "STATS_A(% orientation par activité)"
Case "% orientation chantier"
DoCmd.OpenQuery "STATS_A(% orientation chantier)"
Case Else
MsgBox ("autre choix non actif")
End Select
End Sub

est-ce plus clair ?
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"BV" a écrit dans le message de
news:ccm3nr$n56$
Bonjour à tous je reprends un post en date du 06/07
merci d'abors à tous pour vos réponses qui me permettent d'avancer
jour après jour (merci raymond)

bon j'ai ce code ci-dessous

Private Sub Commande6_Click()
Dim liste1 As String

liste1 = Forms![F_depart requetes]![toto]
If liste1 = "% de contrats arrivés à terme" Then
DoCmd.OpenQuery "STATS_A(% contrats arrivés à terme)"
Else
If liste1 = "% enfants à charge" Then
DoCmd.OpenQuery "STATS_A(% enfants à charge)"
Else
If liste1 = "% H/F" Then
DoCmd.OpenQuery "STATS_A(% H/F)"
Else
If liste1 = "% inscrits à l'anpe" Then
DoCmd.OpenQuery "STATS_A(% ANPE)"
Else
If liste1 = "% motif fin de contrat" Then
DoCmd.OpenQuery "STATS_A(% contrats arrivés à terme)"
Else
If liste1 = "% orientation activité souhaitée" Then
DoCmd.OpenQuery "STATS_A(% orientation par activité)"
Else
If liste1 = "% orientation chantier" Then
DoCmd.OpenQuery "STATS_A(% orientation chantier)"
Else
MsgBox ("autre choix non actif")
End If
End If
End If
End If
End If
End If
End If
End Sub

je sais c'est pas très propre mais je débute vraiment
Probleme j'ai une liste déroulante avec au moins 15 choix possibles et je
répète à chaque fois mes end if
raymond MVP m'a parlé de select case, mais je ne vois pas comment je
pourrai

l'intégrer en enlevant les end if
et en laissant quand même un msgbox si probleme

merci pour vos réponses

BV




Avatar
Eric
Bonjour BV,

Simplifies toi la vie comme suit :

If liste1 = "% de contrats arrivés à terme" Then
DoCmd.OpenQuery "STATS_A(% contrats arrivés à terme)"
ElseIf liste1 = "% enfants à charge" Then
DoCmd.OpenQuery "STATS_A(% enfants à charge)"
ElseIf liste1 = "% H/F" Then
DoCmd.OpenQuery "STATS_A(% H/F)"
...
Else
MsgBox ("autre choix non actif")
End If

Je ne suis pas sur qu'un Select Case te simplifierait la vie, mais
regardes dans l'aide.

Ca donnerait un truc du genre:
Select Case Liste1
Case "% de contrats arrivés à terme"
DoCmd.OpenQuery "STATS_A(% contrats arrivés à terme)"
Case "% enfants à charge"
DoCmd.OpenQuery "STATS_A(% enfants à charge)"
...
Case Else
MsgBox ("autre choix non actif")
End Select

A+
Eric

"BV" écrivait
news:ccm3nr$n56$:

Bonjour à tous je reprends un post en date du 06/07
merci d'abors à tous pour vos réponses qui me permettent d'avancer
jour après jour (merci raymond)

bon j'ai ce code ci-dessous

Private Sub Commande6_Click()
Dim liste1 As String

liste1 = Forms![F_depart requetes]![toto]
If liste1 = "% de contrats arrivés à terme" Then
DoCmd.OpenQuery "STATS_A(% contrats arrivés à terme)"
Else
If liste1 = "% enfants à charge" Then
DoCmd.OpenQuery "STATS_A(% enfants à charge)"
Else
If liste1 = "% H/F" Then
DoCmd.OpenQuery "STATS_A(% H/F)"
Else
If liste1 = "% inscrits à l'anpe" Then
DoCmd.OpenQuery "STATS_A(% ANPE)"
Else
If liste1 = "% motif fin de contrat" Then
DoCmd.OpenQuery "STATS_A(% contrats arrivés à terme)"
Else
If liste1 = "% orientation activité souhaitée" Then
DoCmd.OpenQuery "STATS_A(% orientation par activité)"
Else
If liste1 = "% orientation chantier" Then
DoCmd.OpenQuery "STATS_A(% orientation chantier)"
Else

End If
End If
End If
End If
End If
End If
End If
End Sub

je sais c'est pas très propre mais je débute vraiment
Probleme j'ai une liste déroulante avec au moins 15 choix possibles et
je répète à chaque fois mes end if
raymond MVP m'a parlé de select case, mais je ne vois pas comment je
pourrai l'intégrer en enlevant les end if
et en laissant quand même un msgbox si probleme

merci pour vos réponses

BV





Avatar
Michel Walsh
Salut,


Ni les if-imbriqués ni le Select-Case ne peuvent être "augmentés" pour
tenir compte d'un nouveau cas SANS modifier le code, ce qui est un signe
d'un mauvais développement, en général, lorsque la liste des choses à
traiter est, par sa nature, variable (par contraire, j'illustrerais avec les
mois de l'année, avant qu'on en ajoute un treizième... ). Une solution
possible est le polymorphisme, mais c'est plutôt lourd dans l'orienté objet.
Une solution base_de_donnéenne est de faire un lookup (ou jointure), ce qui
implique que le data est dans une table, pas dans le code (en fait, ayant
une bd à notre disposition, pourquoi ne pas l'utiliser? )


Faire une table avec deux champs:

SiJaiCeci OuvrirCela ' nom des champs


et, dans les enregsitrements, placer, par exemple, "% de contrats arrivés à
terme" dans le premier champ, et le nom de la requête à ouvrir, dans le
second, et ainsi de suite. Il est facile d'ajouter des "cas" sans modifier
le code en quelque façon (donc, le "client" peut faire les modifs sans avoir
à voir le code! ) et le code lui-même est quelque chose du genre:

Private Sub Commande6_Click()

DoCmd.OpenQuery DLOOKUP( "OuvrirCela", "NomDeLaTableIci",
"SiJaiCeci=Forms![F_depart requetes]![toto]")

End Sub



eh bien oui, c'est une seule ligne... en bonus (si besoin il y avait d'avoir
un bonus, en plus).



Espérant être utile,
Vanderghast, Access MVP


"BV" wrote in message
news:ccm3nr$n56$
Bonjour à tous je reprends un post en date du 06/07
merci d'abors à tous pour vos réponses qui me permettent d'avancer
jour après jour (merci raymond)

bon j'ai ce code ci-dessous

Private Sub Commande6_Click()
Dim liste1 As String

liste1 = Forms![F_depart requetes]![toto]
If liste1 = "% de contrats arrivés à terme" Then
DoCmd.OpenQuery "STATS_A(% contrats arrivés à terme)"
Else
If liste1 = "% enfants à charge" Then
DoCmd.OpenQuery "STATS_A(% enfants à charge)"
Else
If liste1 = "% H/F" Then
DoCmd.OpenQuery "STATS_A(% H/F)"
Else
If liste1 = "% inscrits à l'anpe" Then
DoCmd.OpenQuery "STATS_A(% ANPE)"
Else
If liste1 = "% motif fin de contrat" Then
DoCmd.OpenQuery "STATS_A(% contrats arrivés à terme)"
Else
If liste1 = "% orientation activité souhaitée" Then
DoCmd.OpenQuery "STATS_A(% orientation par activité)"
Else
If liste1 = "% orientation chantier" Then
DoCmd.OpenQuery "STATS_A(% orientation chantier)"
Else
MsgBox ("autre choix non actif")
End If
End If
End If
End If
End If
End If
End If
End Sub

je sais c'est pas très propre mais je débute vraiment
Probleme j'ai une liste déroulante avec au moins 15 choix possibles et je
répète à chaque fois mes end if
raymond MVP m'a parlé de select case, mais je ne vois pas comment je
pourrai

l'intégrer en enlevant les end if
et en laissant quand même un msgbox si probleme

merci pour vos réponses

BV




Avatar
BV
ne vous battez-pas
je vais essayer toutes les solutions pour ma culture perso
en tous cas je vous remercie bq
BV


"Michel Walsh" a écrit dans le message
news: #
Salut,


Ni les if-imbriqués ni le Select-Case ne peuvent être "augmentés" pour
tenir compte d'un nouveau cas SANS modifier le code, ce qui est un signe
d'un mauvais développement, en général, lorsque la liste des choses à
traiter est, par sa nature, variable (par contraire, j'illustrerais avec
les

mois de l'année, avant qu'on en ajoute un treizième... ). Une solution
possible est le polymorphisme, mais c'est plutôt lourd dans l'orienté
objet.

Une solution base_de_donnéenne est de faire un lookup (ou jointure), ce
qui

implique que le data est dans une table, pas dans le code (en fait, ayant
une bd à notre disposition, pourquoi ne pas l'utiliser? )


Faire une table avec deux champs:

SiJaiCeci OuvrirCela ' nom des champs


et, dans les enregsitrements, placer, par exemple, "% de contrats arrivés
à

terme" dans le premier champ, et le nom de la requête à ouvrir, dans le
second, et ainsi de suite. Il est facile d'ajouter des "cas" sans modifier
le code en quelque façon (donc, le "client" peut faire les modifs sans
avoir

à voir le code! ) et le code lui-même est quelque chose du genre:

Private Sub Commande6_Click()

DoCmd.OpenQuery DLOOKUP( "OuvrirCela", "NomDeLaTableIci",
"SiJaiCeci=Forms![F_depart requetes]![toto]")

End Sub



eh bien oui, c'est une seule ligne... en bonus (si besoin il y avait
d'avoir

un bonus, en plus).



Espérant être utile,
Vanderghast, Access MVP


"BV" wrote in message
news:ccm3nr$n56$
Bonjour à tous je reprends un post en date du 06/07
merci d'abors à tous pour vos réponses qui me permettent d'avancer
jour après jour (merci raymond)

bon j'ai ce code ci-dessous

Private Sub Commande6_Click()
Dim liste1 As String

liste1 = Forms![F_depart requetes]![toto]
If liste1 = "% de contrats arrivés à terme" Then
DoCmd.OpenQuery "STATS_A(% contrats arrivés à terme)"
Else
If liste1 = "% enfants à charge" Then
DoCmd.OpenQuery "STATS_A(% enfants à charge)"
Else
If liste1 = "% H/F" Then
DoCmd.OpenQuery "STATS_A(% H/F)"
Else
If liste1 = "% inscrits à l'anpe" Then
DoCmd.OpenQuery "STATS_A(% ANPE)"
Else
If liste1 = "% motif fin de contrat" Then
DoCmd.OpenQuery "STATS_A(% contrats arrivés à terme)"
Else
If liste1 = "% orientation activité souhaitée" Then
DoCmd.OpenQuery "STATS_A(% orientation par activité)"
Else
If liste1 = "% orientation chantier" Then
DoCmd.OpenQuery "STATS_A(% orientation chantier)"
Else
MsgBox ("autre choix non actif")
End If
End If
End If
End If
End If
End If
End If
End Sub

je sais c'est pas très propre mais je débute vraiment
Probleme j'ai une liste déroulante avec au moins 15 choix possibles et
je


répète à chaque fois mes end if
raymond MVP m'a parlé de select case, mais je ne vois pas comment je
pourrai

l'intégrer en enlevant les end if
et en laissant quand même un msgbox si probleme

merci pour vos réponses

BV








Avatar
BV
la méthode de Raymond marche nikel
voilà une fin de semaine comme je les aime
merci
BV


"Michel Walsh" a écrit dans le message
news: #
Salut,


Ni les if-imbriqués ni le Select-Case ne peuvent être "augmentés" pour
tenir compte d'un nouveau cas SANS modifier le code, ce qui est un signe
d'un mauvais développement, en général, lorsque la liste des choses à
traiter est, par sa nature, variable (par contraire, j'illustrerais avec
les

mois de l'année, avant qu'on en ajoute un treizième... ). Une solution
possible est le polymorphisme, mais c'est plutôt lourd dans l'orienté
objet.

Une solution base_de_donnéenne est de faire un lookup (ou jointure), ce
qui

implique que le data est dans une table, pas dans le code (en fait, ayant
une bd à notre disposition, pourquoi ne pas l'utiliser? )


Faire une table avec deux champs:

SiJaiCeci OuvrirCela ' nom des champs


et, dans les enregsitrements, placer, par exemple, "% de contrats arrivés
à

terme" dans le premier champ, et le nom de la requête à ouvrir, dans le
second, et ainsi de suite. Il est facile d'ajouter des "cas" sans modifier
le code en quelque façon (donc, le "client" peut faire les modifs sans
avoir

à voir le code! ) et le code lui-même est quelque chose du genre:

Private Sub Commande6_Click()

DoCmd.OpenQuery DLOOKUP( "OuvrirCela", "NomDeLaTableIci",
"SiJaiCeci=Forms![F_depart requetes]![toto]")

End Sub



eh bien oui, c'est une seule ligne... en bonus (si besoin il y avait
d'avoir

un bonus, en plus).



Espérant être utile,
Vanderghast, Access MVP


"BV" wrote in message
news:ccm3nr$n56$
Bonjour à tous je reprends un post en date du 06/07
merci d'abors à tous pour vos réponses qui me permettent d'avancer
jour après jour (merci raymond)

bon j'ai ce code ci-dessous

Private Sub Commande6_Click()
Dim liste1 As String

liste1 = Forms![F_depart requetes]![toto]
If liste1 = "% de contrats arrivés à terme" Then
DoCmd.OpenQuery "STATS_A(% contrats arrivés à terme)"
Else
If liste1 = "% enfants à charge" Then
DoCmd.OpenQuery "STATS_A(% enfants à charge)"
Else
If liste1 = "% H/F" Then
DoCmd.OpenQuery "STATS_A(% H/F)"
Else
If liste1 = "% inscrits à l'anpe" Then
DoCmd.OpenQuery "STATS_A(% ANPE)"
Else
If liste1 = "% motif fin de contrat" Then
DoCmd.OpenQuery "STATS_A(% contrats arrivés à terme)"
Else
If liste1 = "% orientation activité souhaitée" Then
DoCmd.OpenQuery "STATS_A(% orientation par activité)"
Else
If liste1 = "% orientation chantier" Then
DoCmd.OpenQuery "STATS_A(% orientation chantier)"
Else
MsgBox ("autre choix non actif")
End If
End If
End If
End If
End If
End If
End If
End Sub

je sais c'est pas très propre mais je débute vraiment
Probleme j'ai une liste déroulante avec au moins 15 choix possibles et
je


répète à chaque fois mes end if
raymond MVP m'a parlé de select case, mais je ne vois pas comment je
pourrai

l'intégrer en enlevant les end if
et en laissant quand même un msgbox si probleme

merci pour vos réponses

BV








Avatar
Bernard_Michel
Bonjour à tous je reprends un post en date du 06/07
merci d'abors à tous pour vos réponses qui me permettent d'avancer
jour après jour (merci raymond)

bon j'ai ce code ci-dessous

Private Sub Commande6_Click()
Dim liste1 As String

liste1 = Forms![F_depart requetes]![toto]
If liste1 = "% de contrats arrivés à terme" Then
DoCmd.OpenQuery "STATS_A(% contrats arrivés à terme)"
Else
If liste1 = "% enfants à charge" Then
DoCmd.OpenQuery "STATS_A(% enfants à charge)"
Else
If liste1 = "% H/F" Then
DoCmd.OpenQuery "STATS_A(% H/F)"
Else
If liste1 = "% inscrits à l'anpe" Then
DoCmd.OpenQuery "STATS_A(% ANPE)"
Else
If liste1 = "% motif fin de contrat" Then
DoCmd.OpenQuery "STATS_A(% contrats arrivés à terme)"
Else
If liste1 = "% orientation activité souhaitée" Then
DoCmd.OpenQuery "STATS_A(% orientation par activité)"
Else
If liste1 = "% orientation chantier" Then
DoCmd.OpenQuery "STATS_A(% orientation chantier)"
Else
MsgBox ("autre choix non actif")
End If
End If
End If
End If
End If
End If
End If
End Sub

je sais c'est pas très propre mais je débute vraiment
Probleme j'ai une liste déroulante avec au moins 15 choix possibles et je
répète à chaque fois mes end if
raymond MVP m'a parlé de select case, mais je ne vois pas comment je pourrai
l'intégrer en enlevant les end if
et en laissant quand même un msgbox si probleme

merci pour vos réponses

BV



Hello !


Je ne suis pas non plus un grand spécialiste mais je te propose
d'essayer le code suivant (selon ton voeux "Select Case") :

Dim liste1 As String

liste1 = Forms![F_depart requetes]![toto]

Select Case liste1
Case "% de contrats arrivés à terme"
DoCmd.OpenQuery "STATS_A(% contrats arrivés à terme)"
Case "% enfants à charge"
DoCmd.OpenQuery "STATS_A(% enfants à charge)"
Case "% H/F"
DoCmd.OpenQuery "STATS_A(% H/F)"
Case "% inscrits à l'anpe"
DoCmd.OpenQuery "STATS_A(% ANPE)"
Case "% motif fin de contrat"
DoCmd.OpenQuery "STATS_A(% contrats arrivés à terme)"
Case "% orientation activité souhaitée"
DoCmd.OpenQuery "STATS_A(% orientation par activité)"
Case "% orientation chantier"
DoCmd.OpenQuery "STATS_A(% orientation chantier)"
Case Else
MsgBox ("autre choix non actif")
End Select

End Sub

Voilà, souhaitant t'avoir été utile !
Bernard