OVH Cloud OVH Cloud

macro trop dur pour moi

6 réponses
Avatar
BV
Bonjour à tous
j'ai un formulaire ds lequel j'ai 2 listes déroulantes
liste1 (A,B,C)
liste 2 (A1, A2, A3, A4....)
et un bouton qui est sensé lancer la macro quand je sélectionne un élément
de chaque

principe je veux pouvoir choisir (A et A1 ou A et A4 ou B et A1 etc..... )
pour qu'à partir de là ma macro
m'ouvre la requête correspondante

exemple inspiré d'excel
si(et(liste1=a;liste2=a1);"lance la requete
1";si(et(liste1=a;liste2=A2);"lance la requete2".....)
pour info le contenu de ma liste 2 est long (je pense qu'il faut utiliser
des variables mais là je suis out)

je suis bloqué

merci d'avance

BV

6 réponses

Avatar
Raymond [mvp]
Bonjour.

si tu calcules le A,B,C et un nombre important dans liste2, tu imagines
facilement le nombre de combinaisons. Si au lieu de nommer tes requêtes
requête1, requête2 .... tu les nommais Requête_AA1, requête_BA4,
Requête_CA3, tu pourrais générer le nom de la requête directement par:
"Requête_" & liste1 & liste2.
A mon avis ton problème doit être plus simple, et il suffirait de construire
directement la requête en vba pour supprimer l'ensemble de tes requêtes.

--
@+
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:cce2is$qrf$
Bonjour à tous
j'ai un formulaire ds lequel j'ai 2 listes déroulantes
liste1 (A,B,C)
liste 2 (A1, A2, A3, A4....)
et un bouton qui est sensé lancer la macro quand je sélectionne un élément
de chaque

principe je veux pouvoir choisir (A et A1 ou A et A4 ou B et A1 etc..... )
pour qu'à partir de là ma macro
m'ouvre la requête correspondante

exemple inspiré d'excel
si(et(liste1=a;liste2¡);"lance la requete
1";si(et(liste1=a;liste2¢);"lance la requete2".....)
pour info le contenu de ma liste 2 est long (je pense qu'il faut utiliser
des variables mais là je suis out)

je suis bloqué

merci d'avance

BV





Avatar
BV
merci mais difficile pour moi de tout faire en vba
manque de connaissances suffisantes
j'ai essayé un systeme comme ca
au fait question suis je obligé à chaque fois de répéter autant de fois de
end if
que j'ai de conditions
(je demande de la clémence je débute :)

Private Sub Commande6_Click()
Dim liste1 As String

liste1 = Forms![F_depart requetes]![listeA]
If liste1 = "% H/F" Then
DoCmd.OpenQuery "R_H/F"
Else

If liste1 = "% enfants à charge" Then
DoCmd.OpenQuery "R_enfants à charge"

Else

If liste1 = "% inscrits à l'anpe" Then
DoCmd.OpenQuery "R_ANPE"

Else
MsgBox ("autre choix non actif")

End If
End If
End If
End Sub



"Raymond [mvp]" a écrit dans le message news:

Bonjour.

si tu calcules le A,B,C et un nombre important dans liste2, tu imagines
facilement le nombre de combinaisons. Si au lieu de nommer tes requêtes
requête1, requête2 .... tu les nommais Requête_AA1, requête_BA4,
Requête_CA3, tu pourrais générer le nom de la requête directement par:
"Requête_" & liste1 & liste2.
A mon avis ton problème doit être plus simple, et il suffirait de
construire

directement la requête en vba pour supprimer l'ensemble de tes requêtes.

--
@+
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:cce2is$qrf$
Bonjour à tous
j'ai un formulaire ds lequel j'ai 2 listes déroulantes
liste1 (A,B,C)
liste 2 (A1, A2, A3, A4....)
et un bouton qui est sensé lancer la macro quand je sélectionne un
élément


de chaque

principe je veux pouvoir choisir (A et A1 ou A et A4 ou B et A1
etc..... )


pour qu'à partir de là ma macro
m'ouvre la requête correspondante

exemple inspiré d'excel
si(et(liste1=a;liste2¡);"lance la requete
1";si(et(liste1=a;liste2¢);"lance la requete2".....)
pour info le contenu de ma liste 2 est long (je pense qu'il faut
utiliser


des variables mais là je suis out)

je suis bloqué

merci d'avance

BV









Avatar
Raymond [mvp]
Si tu débutes en vba, il est préférable de placer une seule instruction par
ligne avec un endif. plus tard, très bientôt tu pourras mettre les
instructions sur la même ligne en les séparant par des : et même te passer
des endif pour les if simples.
Pour l'instant, tu fais
If Condition Then
instructions
Else
instructions
End If

Les 2 lignes else ... instructions sont facultatives:
If Condition Then
instructions
End If

Chaque End If correspond à un If et quand ils sont imbriqués, l'indentation
des lignes est obligatoire ( mise en retrait des débuts de ligne) pour une
bonne lecture.
Lorsque tu as plusieurs If sur la même variable qui se suivent, il est
préférable de passer par une instruction Select Case
dans ton exemple les else devraient être remplacés par des ElseIf ce qui
supprimerait beaucoup de IF et même un select case.
--
@+
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:ccedka$p64$
merci mais difficile pour moi de tout faire en vba
manque de connaissances suffisantes
j'ai essayé un systeme comme ca
au fait question suis je obligé à chaque fois de répéter autant de fois de
end if
que j'ai de conditions
(je demande de la clémence je débute :)

Private Sub Commande6_Click()
Dim liste1 As String

liste1 = Forms![F_depart requetes]![listeA]
If liste1 = "% H/F" Then
DoCmd.OpenQuery "R_H/F"
Else

If liste1 = "% enfants à charge" Then
DoCmd.OpenQuery "R_enfants à charge"

Else

If liste1 = "% inscrits à l'anpe" Then
DoCmd.OpenQuery "R_ANPE"

Else
MsgBox ("autre choix non actif")

End If
End If
End If
End Sub


Avatar
eric.NOSPAMvalery
Bonjour,

Je n'ai aps tout compris:
Le choix d'un élément dans liste1 et liste2 détermine
t'il exactement une requete. Si oui, la requete varie
t'elle seulement par les paramètres des choix fait dans
liste1 et liste2. Si oui, une solution :

Clic sur liste 1
Clic sur liste 2

Soit AfterUpdate (après mise a jour) de liste2, soit en
mettant un bouton (pour éviter de lancer une requete a
chaque fois que l'on change la valeur de liste2), donc
sur clic du bouton:
définir la requete a exécuter dans la procédure
evenementielle du sur clic du bouton

"select A,B form tableX where A=" & me.liste1 & " AND B="
& me.liste2

Si A et B sont des chaines prévoir des guillemet pour
entourer me.liste1 et me.liste2 ou faire des likes.

Si ce sont des requetes différentes, je ne voit pas bien
le problème, ou en tout cas je ne vois pas bien de
solution a part creer une table qui contiendra trois
champ liste1, liste2, nomrequete et qui donne la requete
a lancer en fonction des choix de liste 1 et liste 2.

Bon courage.

EVA

-----Message d'origine-----
Bonjour à tous
j'ai un formulaire ds lequel j'ai 2 listes déroulantes
liste1 (A,B,C)
liste 2 (A1, A2, A3, A4....)
et un bouton qui est sensé lancer la macro quand je
sélectionne un élément

de chaque

principe je veux pouvoir choisir (A et A1 ou A et A4 ou
B et A1 etc..... )

pour qu'à partir de là ma macro
m'ouvre la requête correspondante

exemple inspiré d'excel
si(et(liste1=a;liste2¡);"lance la requete
1";si(et(liste1=a;liste2¢);"lance la requete2".....)
pour info le contenu de ma liste 2 est long (je pense
qu'il faut utiliser

des variables mais là je suis out)

je suis bloqué

merci d'avance

BV



.



Avatar
BV
merci je vais essayer de suivre tes conseils même si je ne me sents pas
trop rassuré pour le faire (non ca n'explose pas) en fait j'essaie
d'apprendre pas à pas avec des msgbox pour me guider mais ca me parait
tellement puissant que je crois que je vais investir dans une formation vba

thanks

BV



"Raymond [mvp]" a écrit dans le message news:

Si tu débutes en vba, il est préférable de placer une seule instruction
par

ligne avec un endif. plus tard, très bientôt tu pourras mettre les
instructions sur la même ligne en les séparant par des : et même te passer
des endif pour les if simples.
Pour l'instant, tu fais
If Condition Then
instructions
Else
instructions
End If

Les 2 lignes else ... instructions sont facultatives:
If Condition Then
instructions
End If

Chaque End If correspond à un If et quand ils sont imbriqués,
l'indentation

des lignes est obligatoire ( mise en retrait des débuts de ligne) pour une
bonne lecture.
Lorsque tu as plusieurs If sur la même variable qui se suivent, il est
préférable de passer par une instruction Select Case
dans ton exemple les else devraient être remplacés par des ElseIf ce qui
supprimerait beaucoup de IF et même un select case.
--
@+
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:ccedka$p64$
merci mais difficile pour moi de tout faire en vba
manque de connaissances suffisantes
j'ai essayé un systeme comme ca
au fait question suis je obligé à chaque fois de répéter autant de fois
de


end if
que j'ai de conditions
(je demande de la clémence je débute :)

Private Sub Commande6_Click()
Dim liste1 As String

liste1 = Forms![F_depart requetes]![listeA]
If liste1 = "% H/F" Then
DoCmd.OpenQuery "R_H/F"
Else

If liste1 = "% enfants à charge" Then
DoCmd.OpenQuery "R_enfants à charge"

Else

If liste1 = "% inscrits à l'anpe" Then
DoCmd.OpenQuery "R_ANPE"

Else
MsgBox ("autre choix non actif")

End If
End If
End If
End Sub






Avatar
Raymond [mvp]
C'est une trrès bonne idée qui te fera avancer immédiatement.

--
@+
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:ccefgm$l74$
merci je vais essayer de suivre tes conseils même si je ne me sents pas
trop rassuré pour le faire (non ca n'explose pas) en fait j'essaie
d'apprendre pas à pas avec des msgbox pour me guider mais ca me parait
tellement puissant que je crois que je vais investir dans une formation
vba


thanks

BV