Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > IHM
IHM Ce forum est dédié aux questions relatives à la création de formulaires et d'états, avec ou sans code VBA, et macros.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/06/2011, 14h04   #1
Invité de passage
 
Femme Cécile Van cappel
Inscription : juin 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Femme Cécile Van cappel
Localisation : Belgique

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : juin 2011
Messages : 3
Points : 0
Points : 0
Par défaut Imprimer un état à partir d'une zone liste d'un formulaire multicritère

Bonjour,

Je suis toute nouvelle sur ce site même si je le consulte assez régulièrement pour trouver une solution lorsque j'ai un problème.
Mais hélas aujourd'hui je suis dans une impasse.

Cela fait 15 jours que j'essaye de créer un état à partir d'un formulaire multicritère et je désespère.

Je me suis inspirée du Formulaire de recherche prêt à l'emploi 1-2 et 3ème partie (j'ai récupéré uniquement les fonctionnalités qui m'interressaient)

Tout se passe superbien pour la recherche multicritère (=> un grand merci).
Mais pour l'état dur dur....

En fait je voudrais imprimer les données que me donne la recherche multicritère .Ceux-ci sont dans une zone de liste.

Descriptif du problème:

Si je click sur le bouton imprimé qui se trouve dans mon formulaire , je reçois le message suivant Erreur de compilation: Utilisation incorrecte du mot clé Me.
(Function lf_GetSqlWhere() insérée à la fin du module recherche: strSQL = Me.lst_resultat.RowSource ). Hors ma zone de liste est bien nommée lst_resultat dans mon formulaire.

Voici la programmation:
Mon formulaire est basé sur une seule table (Archives).
J'ai un formulaire (frm_Recherche) ou je récupère tous les champs de la table à partir de la recherche multicritère.
et un état (Archives_par_équipement) où je vais rechercher tous les champs de la table
________________________________________________________________
J'ai créé la table tbl_TempLstRpt
Nom du champ Type Longueur
Table -Texte - 250 (donnée introduite: Archives)
Etat - Texte - 250 (donnée introduite: Archives_par_équipement)

La source (propriété RowSource) de l'état doit être la même que l'item de la liste cbo_table :tbl_TempLstTbl

Sur le formulaire , j'ai inséré le bouton de commande "imprime" pour ouvrir l'état.
Nom cmd_imprime
(Evènement) Sur clic [Procédure Evènementielle]
Légende de l'étiquette Imprime

Le Code
Dans l'événement Sur Clic du bouton de commande cmd_imprime Private Sub
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
cmd_imprime_Click()
    Dim rst As Recordset
    Dim strCriteria As String
 
    Set rst = CurrentDb.OpenRecordset("tbl_TempLstRpt", dbOpenSnapshot)
    ' recherche les informations de la table
    rst.FindFirst ("Table='" & Me.cbo_table & "'")
 
    If rst.NoMatch Then     ' non trouvé
        MsgBox "Cette table ne possède pas d'état. " & _
               "Veuillez renseigner la table des paramètres.", _
               vbCritical + vbOKOnly, "formulaire de Recherche"
        Exit Sub
    Else    ' trouvé
       DoCmd.OpenReport rst.Fields("Etat"), acViewPreview, , lf_GetSqlWhere
    End If
 
    Set rst = Nothing
 
End Sub
J'ai inséré le code suivant dans le module "Recherche" du formulaire.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Function lf_GetSqlWhere()
Dim strWhere As String
Dim strSQL As String
 
	strSQL = Me.lst_resultat.RowSource
	' récupère à partir des doubles paranthèses
	strWhere = Right(strSQL, Len(strSQL) - InStrRev(strSQL, "(("))
	' supprime les caractères inutile de la fin
	strWhere = Left(strWhere, Len(strWhere) - 2)
 
	'on renvoi le résultat
	lf_GetSqlWhere = strWhere
End Function
Si quelqu'un peut m'aider ce serait super,

Merci d'avance
débutant1968 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/06/2011, 20h50   #2
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 085
Détails du profil
Informations personnelles :
Nom : Homme Fabrice CONSTANS
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : avril 2005
Messages : 7 085
Points : 11 622
Points : 11 622
Bonjour,

D'abord merci d'apprécier ma contribution.

Le message que tu reçois (Utilisation incorrecte du mot clé Me.) indique que tu as placé le code en dehors du formulaire.

Me ne doit être utiliser que dans un module de formulaire, d'état ou de classe.

Soit tu déplaces le code dans le module du formulaire (frm_recherche), soit tu transmets le contenu à la function soit le controle.
1)
on transmet le contenu du rowsource

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
'appel
      DoCmd.OpenReport rst.Fields("Etat"), acViewPreview, , lf_GetSqlWhere(Me.lst_resultat.RowSource)
'function
Function lf_GetSqlWhere(strSQL as string) as string
Dim strWhere As String
 
	strWhere = Right(strSQL, Len(strSQL) - InStrRev(strSQL, "(("))
	' supprime les caractères inutile de la fin
	strWhere = Left(strWhere, Len(strWhere) - 2)
 
	'on renvoi le résultat
	lf_GetSqlWhere = strWhere
End Function
2)
on transmet le controle

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
'appel
      DoCmd.OpenReport rst.Fields("Etat"), acViewPreview, , lf_GetSqlWhere(Me.lst_resultat)
'function
Function lf_GetSqlWhere(ctrl as control) as string
Dim strWhere As String
dim strSQL as string
             strSql = ctrl.rowsource
	strWhere = Right(strSQL, Len(strSQL) - InStrRev(strSQL, "(("))
	' supprime les caractères inutile de la fin
	strWhere = Left(strWhere, Len(strWhere) - 2)
 
	'on renvoi le résultat
	lf_GetSqlWhere = strWhere
End Function
Par contre met bien les paranthèses dans l'appel pour que la fonction renvoi quelque chose.

Code :
DoCmd.OpenReport rst.Fields("Etat"), acViewPreview, , lf_GetSqlWhere()
Cordialement,
__________________
Classe MELA(CRUD) Opérateur IN et zone de liste
MsGraph et VBA - 1e Partie 2e partie
Entête d'états-Opérateur LIKE-Evénements formulaires-Cours 2010
Complément :Générateur de msgbox
Visitez mon Blog
Les questions techniques par MP ne sont pas lues et je ne pratique pas l'extispicine
loufab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/06/2011, 20h06   #3
Invité de passage
 
Femme Cécile Van cappel
Inscription : juin 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Femme Cécile Van cappel
Localisation : Belgique

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : juin 2011
Messages : 3
Points : 0
Points : 0
Bonsoir Loufab,

Tout d'abord merci pour ce formulaire qui pour ma part est géant.
En second je te remercie pour avoir pris en considération mon problème aussi vite.
et enfin,
Je viens de mettre en application tes recommandations et..............

oHHHHHHHHHHHH!

Ca marche



PS: je n'en doutais pas.

Bref encore merci
débutant1968 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h58.


 
 
 
 
Partenaires

Hébergement Web