Je précise :
Losque j'appuie sur le bouton rechercher, il me dit erreur de syntaxe et me met en rouge la ligne Me du code du bouton rechercher.
Vous voyez pas ?
Je précise :
Losque j'appuie sur le bouton rechercher, il me dit erreur de syntaxe et me met en rouge la ligne Me du code du bouton rechercher.
Vous voyez pas ?
Envoyé par fpecastaing
Les propositions son nécessairement faites en VBA Ici. Si à ton niveau, tu utilises le QBE pour faire tes requêtes c'est normal que la syntaxe soit un peu différente.
Dans cette requête
au niveau de la fenêtre requête c'est plutot la ligne critère de la colonne NomPrenom qui prend cette valeurSELECT * FROM Personnel WHERE (NomPrenom='" & iif(Forms!FrmPrincipal2!FiltreParNom<>null;Forms!FrmPrincipal2!FiltreParNom; Personnel.NomPrenom) & "');
Il n'ya pas de quote ni de doube quote.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 iif(Forms!FrmPrincipal2!FiltreParNom<>null;Forms!FrmPrincipal2!FiltreParNom; Personnel.NomPrenom)
Merci Mboub,
Là ça fonctionne.
J'ai donc le filtre nom qui est bon, maintenant je reprends la source et je rajoute sous la colonne service la même fonction Iif ?
Et après pour les autres, je fais la mêmechose ?
Oui exactement la même chose pour les autres.
Voilà ce que ça donne pour le premier sous-formulaire.
Ca marche niquel à part que je ne peux pas faire une recherche que sur le service sans le nom. Il me faut le nom ou le nom+le service
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT Personnel.NomPrenom, Personnel.Numéro, Personnel.Service FROM Personnel WHERE (((Personnel.NomPrenom)=IIf([Forms]![FrmPrincipal2]![FiltreParNom] Is Not Null,[Forms]![FrmPrincipal2]![FiltreParNom],[Personnel].[NomPrenom])) AND ((Personnel.Service)=IIf([Forms]![FrmPrincipal2]![FiltreParService] Is Not Null,[Forms]![FrmPrincipal2]![FiltreParService],[Personnel].[Service])));
Il faudrait pouvoir dire "si le FiltreParNom est vide alors le prendre que le Filtre parService" ...
En principe c'est Et/Ou cette façon de faire. Maintenant si dans tes données tu n'a pas la correspondance que tu veux dans tes données c'est sur ca n'ira pas.
Est ce que pour le service que tu choisi, tu as au moins quelque données.
Parce que pour
ceci correspond bien à toutes les possibilitéssi le FiltreParNom est vide alors le prendre que le Filtre parService
Si le nom est vide et que le service soit renseigné, il te rend toutes les lignes correspondant à tous les noms mais seulement pour lesquelles le service choisi est le bon....WHERE (((Personnel.NomPrenom)=IIf([Forms]![FrmPrincipal2]![FiltreParNom] Is Not Null,[Forms]![FrmPrincipal2]![FiltreParNom],[Personnel].[NomPrenom])) AND ((Personnel.Service)=IIf([Forms]![FrmPrincipal2]![FiltreParService] Is Not Null,[Forms]![FrmPrincipal2]![FiltreParService],[Personnel].[Service])));
Regarde bien tes données.
C'est en effet ce que j'aimerais qu'il me fasse mais si je laisse le filtre nom vide et que je veux par exemple tous les gens du service achat (il y a en 20 dans la base), il m'affiche 0 résultat. Car pour lui il cherchent tous les gens du service "achat" qui ont pour nom "rien" ou "vide". Et focément yen a pas car chaque pers a un nom et traville pour un service.Si le nom est vide et que le service soit renseigné, il te rend toutes les lignes correspondant à tous les noms mais seulement pour lesquelles le service choisi est le bon.
Je ne sais pas si on peut rajouter si le nom est vide alors filtrer que sur le service.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ...WHERE (((Personnel.NomPrenom)=IIf([Forms]![FrmPrincipal2]![FiltreParNom] Is Not Null,[Forms]![FrmPrincipal2]![FiltreParNom],[Personnel].[NomPrenom])) AND ((Personnel.Service)=IIf([Forms]![FrmPrincipal2]![FiltreParService] Is Not Null,[Forms]![FrmPrincipal2]![FiltreParService],[Personnel].[NomPrenom]));
ok ca marche, je m'étais planté dans mon code du bouton afficher tout qui est censé vider les filtres.
J'ai mis tous les Me. ... en commentaire et depuis ça marche.
Dommage car on est maintenant obligé de supprimer le contenu des filtres à la main une fois la recherche faite...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Private Sub Commande17_Click() Me.[frm personnel2].Form.FilterOn = False 'Me.FiltreParNom = "" 'Me.FiltreParDateMin = "" 'Me.FiltreParDateMax = "" 'Me.FiltreParOrganisme = "" 'Me.FiltreParService = "" 'Me.FiltreParFormation = "" Me.[frm personnel2].Requery End Sub
Par contre, quand je passe aux critères (type formation et organisme) du sous-formulaires suivant il ne les cumule plus avec ceux du dessus (nom et service). Ca marche pas ...
Voilà le nouveau code du bouton recherche :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Private Sub Commande16_Click() 'filtre du sous-formulaire frm personnel2 Me.[frm personnel2].Requery 'filtre du sous-sous-formulaire frmFormation2 : je pense que l'erreur vient de là Forms![FrmPrincipal2]![frm personnel2].Form![frmFormation2].Requery End Sub
Essai l'inverse. Les Me... après le RequeryEnvoyé par fpecastaing
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Private Sub Commande17_Click() Me.[frm personnel2].Form.FilterOn = False Me.[frm personnel2].Requery Me.FiltreParNom = "" Me.FiltreParDateMin = "" Me.FiltreParDateMax = "" Me.FiltreParOrganisme = "" Me.FiltreParService = "" Me.FiltreParFormation = "" End Subla j'ai pas bien compris !Par contre, quand je passe aux critères (type formation et organisme) du sous-formulaires suivant il ne les cumule plus avec ceux du dessus (nom et service). Ca marche pas ...
Mon soucis est que si je choisis d'afficher toutes les formations "excel" effectuées par christian, j'obtiens TOUTES les formations de christian (Excel, Word, Access,...), comme s'il ne voyait pas le filtre Formation.
Voilà la propriété source du sous-sous-formulaire frmFormation2 :
En fait, je ne sais pas si ça pose un problème mais mon sous-formulaire est basé sur une requête qui permet de relier la table Formation à la table personnelFormé. Est-ce que ce que j'ai mis en vert est bon ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT Formation.TypeFormation, Formation.VisiteMedicale, Formation.AutorisationEmployeur, Formation.Organisme, Formation.SGS, Formation.Observations, Formation.NbHeuresFormation, PersonnelFormé.NumeroPersonnel, PersonnelFormé.NumeroFormation FROM Formation INNER JOIN PersonnelFormé ON Formation.NumeroFormation = PersonnelFormé.NumeroFormation WHERE (((Formation.TypeFormation)=IIf([Forms]![FrmPrincipal2]![FiltreParFormation] Is Not Null,[Forms]![FrmPrincipal2]![FiltreParFormation],[Formation].[TypeFormation])) AND ((Formation.Organisme)=IIf([Forms]![FrmPrincipal2]![FiltreParOrganisme] Is Not Null,[Forms]![FrmPrincipal2]![FiltreParOrganisme],[Formation].[Organisme]))) ORDER BY Formation.TypeFormation;
Car je rappelle que j'ai 3 tables : Personnel / formation / PersonnelFormé (qui est une table union entre les deux autres, elle contient la clé primaire des deux autres tables).
Pour en avoir le coeur net remplace directement le parametre par une valeur.Envoyé par fpecastaing
Par exemple
après le = tu met "Excel", un numéro valide correspondant à la formation que tu veux voir. Ainsi tu sauras si la parametre contient quelque chose ou non.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ... Formation.TypeFormation=
Par ailleurs pour ce qui est de la requête tout semble correcte.
si je mets excel, il ne me sors rien. je vois pas ...
Bonjour,
à la place de ça
je mettrais ça
Code : Sélectionner tout - Visualiser dans une fenêtre à part IIf([Forms]![FrmPrincipal2]![FiltreParFormation] Is Not Null
Cordialement,
Code : Sélectionner tout - Visualiser dans une fenêtre à part IIf(not isnull([Forms]![FrmPrincipal2]![FiltreParFormation])
Jai testé, ça marche pas non plus.
Formation.TypeFormation c'est du numérique ou du texte ?
C'est du texte ...
Et alors, ça fait quoi que ce soit du texte ou du numérique ? C'est ça qui me bloque tout ?
essaye ceci
dans le cas ou la condition n'est pas rempli il affichera tout.
Code : Sélectionner tout - Visualiser dans une fenêtre à part like iif(not isnull(.....),...) & "*"
Il me ditsyntax error, manque un opérateurJe pense qu'il faut des guillemets ou des cotes après le "like".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT Personnel.NomPrenom, Personnel.Numéro, Personnel.Service FROM Personnel WHERE (((Personnel.NomPrenom)= like IIf(Not isnull([Forms]![FrmPrincipal2]![FiltreParNom]),[Forms]![FrmPrincipal2]![FiltreParNom],[Personnel].[NomPrenom]) & "*") AND ((Personnel.Service)= like IIf(Not IsNull([Forms]![FrmPrincipal2]![FiltreParService]),[Forms]![FrmPrincipal2]![FiltreParService],[Personnel].[Service]) & "*"));
Merci pour ton aide
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager