Bug de macro de filtre sous Access 2007

Résolu/Fermé
WildDragon Messages postés 1347 Date d'inscription mercredi 17 octobre 2007 Statut Membre Dernière intervention 28 octobre 2009 - 17 oct. 2007 à 18:37
WildDragon Messages postés 1347 Date d'inscription mercredi 17 octobre 2007 Statut Membre Dernière intervention 28 octobre 2009 - 19 oct. 2007 à 12:11
Bonjour,
Je tiens tout d'abord a preciser 2 choses :
-Tout d'abord, c'est la premiere fois que je lance un sujet sur un forum donc excusez moi d'avance si je commets quelques erreurs.
-De plus, parlez moi comme a un noob : je m'y connais en Access 2003 mais je n'ai jamais vraiment utilise les macros auparevent... Et encore moins sous Access 2007.

Bon, voici mon probleme :
Je suis en stage dans une entreprise (anglaise... d'ou l'absence d'accent... Clavier QWERTY oblige ^^) et l'on vient de me confier un travail : regler les divers problemes dans les bases de donnee Access dus au passage de Access 2003 a Access 2007.

J'arrive sur un probleme auquel je n'ai pas trouver de reponses dans les precedants Topics (trop specifique... peut-etre) :
On m'a confie une base d'un Help desk (c'est a dire d'aide en ligne) dans laquelle, tous les employes peuvent poser leurs problemes aux differents informaticiens de la "IT Team" (l'equipe informatique, quoi !!!). Pour faciliter leur travail, le concepteur de cette base Access avait cree des boutons correspondant chacun a l'un des informaticiens (ex : un bouton pour l'informaticien No 1, un autre pour le No 2,...). Etait associe a chaque bouton une macro permettant de filtrer la liste des problemes selon l'informaticien desire (ex: en cliquant sur le bouton "informaticien No 1", on obtenait la liste des problemes posait a l'informaticien No 1).
Cette fonction marchait tres bien sur Access 2003 (on m'en a fait la demonstration) mais c'est une autre affaire sur Access 2007.
Lorsque l'on clique sur l'un des boutons, on voit aparaitre une fenetre nommee "Action Failed" (meme si c'est simple, je ne vous traduit... je ne voudrais pas en faire une traduction eronee) avec une description de l'erreur...

Une fois que j'aurai compris comment on fait, je vous envoie une screen complete et claire...

J'aimerai donc savoir, si, parmis vous, certains ont des idees pour regler ce probleme... De ceci depent (entre autre chose) une bonne apreciation pour mon stage, une connaissance supplementaire et bien sur, une grande aide pour cette entreprise...

Si vous avez besoin d'infos supplementaire, demandez les moi... Je n'ai pas fait aparaitre mon adresse Email mais je le ferais si necessaire...

Je vous remercie d'avance, amis (et amies) programmeurs...
Je reviendrai jeter un coup d'oeil tous les jours et rajouter des infos et mes avancees s'il y en a...
(PS: J'ai fait un effort pour l'orthographe mais je ne garantie pas un sans faute...^^)
A voir également:

3 réponses

WildDragon Messages postés 1347 Date d'inscription mercredi 17 octobre 2007 Statut Membre Dernière intervention 28 octobre 2009 34
17 oct. 2007 à 18:43
Rebonjour (A peine 5 minutes apres le message precedant)

Euh... je pensais cela possible mais je n'ai pas reussi... Donc pour ceux qui pense pouvoir m'aider, dites le moi, je vous enverrai le screen de mon probleme...

Voila... Je vous remercie encore d'avance pour vos reponses...
(PS: je vais faire aparaitre mon adresse Email pour plus de simplicite...)
0
WildDragon Messages postés 1347 Date d'inscription mercredi 17 octobre 2007 Statut Membre Dernière intervention 28 octobre 2009 34
18 oct. 2007 à 16:57
Bon, j'ai continue a chercher d'ou pouvait provenir le probleme...

Et j'ai compris (enfin, ca reste a verifier) que le probleme vient bien des macros qui sont utilisees pour chaque bouton... En effet, chaque macro permet d'afficher en cliquant sur le bon bouton (comme je l'ai expliquer au debut) d'obtenir la liste des problemes poses a l'informaticien correspondant... (ca, je vous l'avait deja dit). Mais la deuxieme partie de cette fonction permet de trier un peu plus la liste en n'y laissant que ceux dont la date de resolution est "null".

En clair, ca permet a l'informaticien No1 d'avoir, lorsqu'il clique sur le bouton avec son nom, d'avoir la liste des problemes qui LUI sont poses (1ere fonction) et qu'il n'a pas encore resolu (2eme fonction)... j'espere que vous comprennez deja un peu plus l'utilite de cette macro-filtre...

Donc, meme si mes screen sont plus explicites, voici l'argument de la macro d'origine : (on va appele l'informaticien concerne Paul Johns, pour ne pas divulguer le nom d'un collegue...) :

paul, [tblGenITMaindesk]![AssignedToo]="Paul Johns" And [tblGenITMaindesk]![CompletionDate] Is Null,

Bon, pour explication :

--> "tblGenITMaindesk" est le nom qui apparait en haut du formulaire utilise... j'aurai envi de dire qu'il s'agit surement de la table utilisee mais, contrairement a Access 2003, je n'arrive pas a voir les tables, requetes, formulaire, macro,... Juste en quelque sorte le produit final... donc je ne peux pas vous dire si la table utilisee porte le meme nom...

--> "AssignedToo" correspond au champs (en forme de menu deroulant) dans lequel l'employe qui pose la question choisit l'informaticien qui va lui repondre

Donc, pour la premiere partie, c'est simple, ca veut dire qu'on selectionne tous les enregistrements du formulaire (ou de la table) dans lesquelles AssignedToo corrspond a Paul Jonhs...
(arretez moi si j'ai loupe une info)

Pour la deuxieme partie (c'est a dire apres le "And") :

--> Toujours le meme formulaire selectionne

--> "CompletionDate" correspond a, vous l'aurez compris, la case date d'achevement (traduction un peu moche mais correcte) que l'informaticien remplira lui meme...

Donc, la deuxieme partie permet de ne choisir que les enregistrements de ce formulaire qui n'ont pas de date d'achevement... en gros,tous ceux dont l'informaticien ne s'est pas encore occupe...

Au final, c'est une macro ou Paul Johns pourra voir la liste de tous les problemes qu'on lui a pose et qu'il n'a pas encore resolu...

-------------------------------------------------------------------------------------------------------------------------------------------------------------------

La, je tire un grand trait pour la deuxieme partie...

En effet, apres avoir lu l'aide proposee sur Access 2007 (en anglais ce qui m'a rendu les choses un peu plus difficile) et une aide sur google
dont voici le lien :

http://office.microsoft.com/fr-fr/access/HA012142021036.aspx#createamacro

J'ai appris et j'ai retente de faire la macro...
N'arrivant pas a la modifier directement, j'en ai cree une nouvelle et j'ai remplace le nom de l'ancienne macro utilisee par le bouton par le nom de celle que je venais de creer (euh, c'est clair ?).

Bon, tout d'abord, j'ai alege l'argument :
Je n'y ai laisse que la partie sur la date Null :

IsNull([tblGenITMaindesk]![CompletionDate])

C'est la forme conseillee sur le site (voir lien precedant)
Puis dans la colonne condition (pour ceux qui connaisse pas la partie creation de macro sur Access 2007, regardez le lien precedant), j'ai "dis" que je ne voulais que les enregistrements pour Paul Johns :

[AssignedToo]=Paul Johns

...
...
...

Attendez... J'arrete la mes explication, je me suis peut-etre tromper...

Je vous donne mes solutions si j'y arrive...
0
WildDragon Messages postés 1347 Date d'inscription mercredi 17 octobre 2007 Statut Membre Dernière intervention 28 octobre 2009 34
19 oct. 2007 à 12:11
Bonjour tous le monde (bien que je sois un peu tout seul sur ce sujet) !!!

Et bien je n'ai qu'un mot a vous dire : perceverance !!! (et un peu de tatonnage et de chance ^^).

Apres 2 jours sur le meme probleme, je suis heureux de vous dire que je l'ai resolu... mon collegue anglais semble content... il m'a dit un truc par rapport au serveur mais j'ai encore un peu de mal a tout comprendre en anglais donc... soyons clair... j'ai rien compris... Mais je ne viens pas vous voir pour m'aider sur ca (je me debrouillerai seul sur ce coup-la !!! ^^).

Non, non. Si je viens c'est pour vous donner la reponse a mon probleme que certains peut-etre un jour pourront avoir !!! Et comme je sais que vous m'auriez aide si vous aviez pu, je vous aide en retour.

Donc vous vous souvenez de mon probleme ainsi que de mon message d'erreur ? ( je vous l'ai pas montre mais, comme je vous l'ai deja dit, si ca vous interresse, demandez moi les screen... je suis un pro de paint et je fais de tres jolies screen ^^ !!)

Et bien j'ai fini par comprendre que sous Access 2007, pour faire une macro, il faut remplir un tableau (bon ca, c'est pas nouveau, ca fait un moment que je planche dessus). Et il y avait 3 parties importantes a remplir :
-la colonne d'action (a remplir grace a une combo-liste ou menu deroulant
-la colonne argument... quand on clic dedant, apparait en bas de la page plusieurs champs a remplir
-Justement certains de ces champs :
~ tout d'abord le champ "Where Condition" qu'on peut faire a la main (pour ceux aui se tatte dans l'ecriture des requetes) ou avec le createur (builter) de requete... Je vous apprends pas comment on fait... si vous etes habitue a Access, vous devez connaitre... sinon demandez moi ou regardez des tutos... Il doit surement y en avoir...
~Ensuite le champ "Form Name" (n'oubliez pas, j'ai la version anglaise) grace a un menu deroulant dans lequel vous selectionnez le formulaire dans lequel "va se derouler l'action"... c'est a dire que, dans mon cas, ma macro va selectionne certain probleme du formulaire appele "HelpDeskSolution"... c'est donc le nom de formulaire que je vais choisir dans la liste.

Puisque les macros (du moins, dans mon cas) sont lances en cliquant sur des boutons deja crees, il va me falloir le nom exact de la macro a remplasser... Pour cela, rien de plus simple :

Quittons la page de creation de requetes et retournons sur le formulaire. On le met sous la forme qui permet de le modifier (pour eviter d'activer le bouton en cliquant dessus)... Je viens de verifier en francais, je vous conseille la vue "mode page" !!!

Bon. maintenant on clique sur le bouton appele "Paul Johns" (en utilisant l'exemple d'hier) et on affiche les proprietes (soit avec l'icone dans la barre des taches, soit, plus simplement, clic droit sur le bouton et propriete.). A ce moment, dans la petite fenetre des proprietes, vous selectionnez l'onglet "Event" ("evenement" en francais) et vous cliquez sur le petit carre avec les "..." au bout de la ligne ou il y a un evenement (dans mon cas, c'est la ligne "on click"... c'est a dire l'evenement qui se produit lorsque l'on clique sur ce bouton... ^^).

Et la, ca vous ouvre une page VB avec l'evenement du bouton selectionne en premier... pour ceux qui n'y connaissent rien du tout, c'est un peu chaud... aussi, je vais essaye de vous expliquer le mieux possible :

Dans l'evenement en premier sur votre page (ne touchez pas aux barre de defilement, Access vous a amene direct au bon endroit !!!), qui correspond donc a votre bouton, le but est de recuperer le nom de la macro precedement utilisee... (nous verrons pourquoi juste apres). Eh bien je vous rassure, c'est tres simple...
Je vous montre mon evenement :



Private Sub cmdselpaulw_Click()
On Error GoTo Err_cmdselpaulw_Click

Dim stDocName As String

stDocName = "mcrgenitselectorPaul"
DoCmd.RunMacro stDocName

Exit_cmdselpaulw_Click:
Exit Sub

Err_cmdselpaulw_Click:
MsgBox Err.Description
Resume Exit_cmdselpaulw_Click

End Sub


Bon, les noms choisit par mes predecesseurs laissent a desirer (un peu complexe, il me semble). Mais ce n'est pas grave... voici la ligne qui nous interesse :

stDocName = "mcrgenitselectorPaul"

Cette ligne fait appel a la macro qui s'appelle "mcrgenitselectorPaul"... (traduction de ce nom : macro qui genere la selection pour Paul... un aurait pu faire un peu mieux)

Et donc, vous l'aurez compris, le nom de la macro qui nous interresse, c'est tout simplement :

mcrgenitselectorPaul (Sans les guillements)

Vous faites donc un copier/coller (c'est un conseil) sur un doc word ou (et c'est mieux car ca va plus vite et c'est simplifier) sur un notepad
de ce nom...

NB: Access2007 semble ne pas trop aimer les "." dans ses noms de macro... s'il y en a dans les noms de vos macros precedement crees, je vous conseille de juste enlever le point... Et de faire votre copier/coller de ce nom sans le point...

Bon, retournons a la creation de nos nouvelles macros au normes de Access 2007.
Pour acceder au menu de creation d'une macro, regardez vite fait un tuto...

http://web.hec.ca/virtuose/index.cfm?page=392

Tenez, c'est cadeau !!!

Donc, maintenant, je vais vous explique mon erreur de depart (pour pas la refaire) et ce qu'il faut faire...

Mon erreur de depart a ete de selectionner dans ma nouvelle requete l'action "ApplyFilter" (application de filtre) puisque je voulais creer un filtre... Mais, a force de chercher et d'avoir des messages d'erreur, j'ai compris que je devais choisir une action qui, de maniere invisible a l'utilisateur, reouvre le formulaire avec la liste triee (filtree pour etre plus precis).
Donc, grande revelation, ce qu'il fallait choisir dans la colonne action, c'etait OpenForm (ouvrir un formulaire)... Et la, j'ai de suite plus d'options en bas de ma page...
En effet, je peux choisir le nom du formulaire qui va etre ouvert et donc "filtre" selon les besoins de l'utilisateur. Dans le cas present, j'ai choisis "frmHelpDeskSolution". (Avec la liste deroulante, si vous avez des noms de formulaires explicites, ca ne devrait pas etre trop durs).
Et dans le champ "Where Condition", je prends le createur de requete pour la faire sans erreur... ma requete a fini par donnee ceci (il faut lire quelques tuto et l'aide (avec F1) pour bien la faire, si vous n'y connaissez rien.) :

[tblHelpdesk]![AssignedTo]="Paul Johns" And IsNull([tblHelpdesk]![CompletedDate])

Je ne sais pas si je vous l'ai dit mais le IsNull est passe devant maintenant... un IsNull se fait sous cette forme :

IsNull(ce qu'on veut de Null) (n'oubliez pas les parentheses)

Et donc voila... j'ai rempli les 3 points de ma macro : Action, Where Condition (qui s'est reporte dans la case argument) et Form Name.

Il n'y a plus qu'une derniere etape :

L'enregistrement !!! Tout simple : vous cliquez sur le bouton executer dans votre barre des taches (onglet disign)... la, Access vous dit : "il faut enregistre (c'est pas ca mot a mot... mais c'est l'idee)." Donc vous dites Ok. Et quand il vous demande le nom de votre macro, n'inventez surtout pas (vous iriez tout gacher... ^^). Contentez-vous de coller le nom de l'ancienne macro que je vous avez dit de concerver... comme ca, vous enregistrez la "bonne macro" par dessus la "mauvaise"...

Et la, meme pas besoin de batailler, Access vous reouvre le formulaire avec la selection demandee... et vous pouvez verifie par la meme occasion que, en cliquant sur le bouton, vous obtiendrez d'orenavant le meme resultat... Elle est pas belle la vie ? Vous n'avez plus qu'a reproduire cette demarche pour les autres enregistrements qui bug... enfin, les autres macros...

Et de suite, je me suis rendu compte que certains de mes collegues etaient assez en retard sur leur travail d'aide... lol.

Voila, j'espere qu'un jour, mon sujet en aidera certains... Si vous avez besoin d'un peu plus d'aide, dites le moi... Je ne vous promet rien, mais j'essairai... ^^

A plus tout le monde...
0