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 23/05/2011, 23h22   #1
Futur Membre du Club
 
Louise Pelletier
Inscription : août 2010
Messages : 49
Détails du profil
Informations personnelles :
Nom : Louise Pelletier

Informations forums :
Inscription : août 2010
Messages : 49
Points : 17
Points : 17
Par défaut Utilisation de Variable TempVars

Bonjour,

J'ai une marco de recherche qui fonction bien et que je désire transformer en code VBA.
En enregistrant la macro en VBA, Access a créé une variable temporaire pour gérer le filtre. Mon problème est que la variable doit entrer dans toutes les conditions associées au formulaire en cours d'utilisation et permetrre de chercher dans plusieurs champs la valeur saisie dans une boîte de texte.

Voici une partie du code:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 ' Build the Filter for the formulaire ForProjetList
      If (.Form.Name = "ForProjetLst") Then
            TempVars.Add "strFilter", """([pNoServ] Like """"*"" & [TempVars]![strSearch] & ""*"""")"""
        End If
        If (.Form.Name = "ForProjetLst") Then
            TempVars.Add "strFilter", "[TempVars]![strFilter] & "" OR ([pNoPro] Like """"*"" & [TempVars]![strSearch] & ""*"""")"""
        End If
...
 
       ' Build the Filter for the formulaire ForDossierLst
        If (.Form.Name = "ForDossierLst") Then
            TempVars.Add "strFilter", """([NoidDos] Like """"*"" & [TempVars]![strSearch] & ""*"""")"""
        End If
        If (.Form.Name = "ForDossierLst") Then
            TempVars.Add "strFilter", "[TempVars]![strFilter] & "" OR ([NoIdProj] Like """"*"" & [TempVars]![strSearch] & ""*"""")"""
        End If
        If (.Form.Name = "ForDossierLst") Then
            TempVars.Add "strFilter", "[TempVars]![strFilter] & "" OR ([pNoServ] Like """"*"" & [TempVars]![strSearch] & ""*"""")"""
        End If
        If (.Form.Name = "ForDossierLst") Then
            TempVars.Add "strFilter", "[TempVars]![strFilter] & "" OR ([pNoPro] Like """"*"" & [TempVars]![strSearch] & ""*"""")"""
        End If
        DoCmd.ApplyFilter "", TempVars!strFilter
        TempVars.Remove "strFilter"
        TempVars.Remove "strSearch"
        TempVars.RemoveAll
Lorsque je fais ma recherche dans le formulaire ForDossierLst, le contenu de la variable TempVars!strFilter me donne toujours la dernière valeur dans le dernier IF, soit
Code :
 TempVars.Add "strFilter", "[TempVars]![strFilter] & "" OR ([pNoPro] Like """"*"" & [TempVars]![strSearch] & ""*"""")"""
Pourquoi?

Merci!
marycaLou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 09h59   #2
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonjour,

Il faut sortir les variables [TempVars]![strFilter] et [TempVars]![strSearch] de la chaîne de caractères, afin de les concaténer.

Si je prends le début :
Code :
1
2
3
4
5
6
7
 ' Build the Filter for the formulaire ForProjetList
      If (.Form.Name = "ForProjetLst") Then
            TempVars.Add "strFilter", "([pNoServ] Like ""*" & [TempVars]![strSearch] & "*"")"
        End If
        If (.Form.Name = "ForProjetLst") Then
            TempVars.Add "strFilter", [TempVars]![strFilter] & " OR ([pNoPro] Like ""*" & [TempVars]![strSearch] & "*"")"
        End If
En VBA on peut utiliser des variables VBA.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
' Déclaration variables
Dim strSearch As String
Dim strFilter As String
 '  On récupère la valeur cherchée
 strSearch = Nz(Forms!ForProjetList!NomDuControle, "")
 
 ' Build the Filter for the formulaire ForProjetList
      If (.Form.Name = "ForProjetLst") Then
            strFilter = "([pNoServ] Like ""*" & strSearch & "*"")"
        End If
        If (.Form.Name = "ForProjetLst") Then
            strFilter = strFilter & " OR ([pNoPro] Like ""*" & strSearch & "*"")"
        End If
A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/05/2011, 16h42   #3
Futur Membre du Club
 
Louise Pelletier
Inscription : août 2010
Messages : 49
Détails du profil
Informations personnelles :
Nom : Louise Pelletier

Informations forums :
Inscription : août 2010
Messages : 49
Points : 17
Points : 17
Par défaut Problème résolu

Ouif! Ca fonctionne bien.

Comme l'utilisation des variables temporaires était possible avec Access 2007 et que lors de la conversion de la macro, c'était ce qui avait été utilisé, je croyais que c'était préférable à la façon habituelle.

Merci et bonne journée.
marycaLou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2011, 22h49   #4
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonsoir,
Citation:
Envoyé par marycaLou Voir le message
Comme l'utilisation des variables temporaires était possible avec Access 2007 et que lors de la conversion de la macro, c'était ce qui avait été utilisé, je croyais que c'était préférable à la façon habituelle
Je ne pense pas que l'utilisation des variables temporaires apporte quelque chose en VBA.
Par contre dans les macro, oui.

Concernant la traduction automatique Macro -> VBA, ça me fait penser à une traduction mot-à-mot.
Ça ne doit pas être très pointu. Il vaut mieux retravailler le résultat.

A+
LedZeppII 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 14h03.


 
 
 
 
Partenaires

Hébergement Web