Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
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 11/01/2011, 13h10   #1
Invité de passage
 
Maxime
Inscription : janvier 2011
Messages : 7
Détails du profil
Informations personnelles :
Nom : Maxime
Âge : 25

Informations forums :
Inscription : janvier 2011
Messages : 7
Points : 1
Points : 1
Par défaut Problème filtres multiples - Erreur 2001

Bonjour a tous!,

je suis en train de développer un petit outil sous Access pour le boulot et je rencontre un problème à l'éxécution de la macro suivante.

Pour résumer ce code me sert à filtrer les données de mon formulaire (en mode tabulaire) selon 3 items: "ZTC" / "Année" / "Mois" que l'utilisateur pourra spécifier dans 3 listes déroulantes.

Pour "ZTC" et "Année" le filtre s'éxécute sans aucun problème, cependant dès que je spécifie un mois à filtrer la macro bug et s'arrête sur la dernière ligne avec le message : erreur 2001 opération annulée pourtant f me renvoie bien f = "Mois = "Avril""

________________________________
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
Me.FilterOn = False
 
f = ""
 
If Not IsNull(Me.Modifiable8) And Me.Modifiable8 <> "" Then
f = "ZTC" & " = """ & Me.Modifiable8 & """"
End If
 
If Not IsNull(Me.Modifiable14) And Me.Modifiable14 <> "" Then
If f <> "" Then
f = f & " AND Année = """ & Me.Modifiable14 & """"
Else
f = "Année = """ & Me.Modifiable14 & """"
End If
End If
 
If Not IsNull(Me.Modifiable16) And Me.Modifiable16 <> "" Then
If f <> "" Then
f = f & " AND Mois = """ & Me.Modifiable16 & """"
Else
f = "Mois = """ & Me.Modifiable16 & """"
End If
End If
 
Me.Filter = f
Me.FilterOn = True
____________________________________________

J'ai lu sur d'autres forum que ce genre d'erreur provenait d'une incompatibilité entre un format de donnée "texte" et un format "numérique" cependant la valeur de l'item Mois est écrit en toute lettre et provient d'un calcul de type
Mois : Monthname(Mois(Date saisie dans une table))

Quelqu'un a t'il déja rencontré cet erreur ?
Merci de votre aide...

The masked Duck
themaskedduck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2011, 14h21   #2
Candidat au titre de Membre du Club
 
Gabriel Freitas
Inscription : décembre 2010
Messages : 30
Détails du profil
Informations personnelles :
Nom : Gabriel Freitas

Informations forums :
Inscription : décembre 2010
Messages : 30
Points : 12
Points : 12
Citation:
pourtant f me renvoie bien f = "Mois = "Avril""
Faute de frappe surement en écrivant ce message

Je ne suis pas un professionnel, mais de ce que je sais, je te conseille de faire bien attention à l'utilisation des guillemets et des apostrophes.

En effet (du moins pour l'affichage en tout cas ), un guillemet double sert à l'affichage d'un guillemet simple. Cependant, je ne sais pas comment les guillemets doubles sont gérés hors affichage (pour un filtre par exemple )

Je te recommande vivement d'utiliser des apostrophes pour le texte de ton filtre, et les guillemets pour ta chaine entière

exemple
Code :
f = "Année = '" & Me.Modifiable14 & "'"
J'espère avoir pu t'être utile
Gibra est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2011, 12h38   #3
Membre Expert
 
Homme Pierre ANTOINE
Inscription : février 2008
Messages : 650
Détails du profil
Informations personnelles :
Nom : Homme Pierre ANTOINE
Âge : 43
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : février 2008
Messages : 650
Points : 1 302
Points : 1 302
Bonjour

Il est fort possible que le problème soit lié à une mauvaise utilisation des guillemets.


Leur remplacement par des apostrophes (quotes) n'est pas satisfaisant, car on ne peut pas gérer la présence d'apostrophe dans les chaîne de caractère.

AUssi, la solution qui me semble la plus clair (mais peut-être un peu lourd) c'est l'utilisation de chr(34) pour inclure des guillemets.

Conclusion :
Tous les éléments fixes de ma chaîne de caractères doivent être entourés de guillemets que je mets en dure : c'est ce qui permet qu'il s'agit d'éléments fixes.

Code :
 resultat = "Vous avez gagné"
Dans le cas où des guillemets doivent être intégrés à la chaîne, en particulier pour gérer les variable string, je code par chr(34)

Code :
crit = "Nom like  " & chr(34) & me.txtNom & chr(34)

Dernière chose :
ne pas hésiter à afficher la chaîne créée dans la fenêtre d'exécution (par un debug.print), et la récupérer dans une requête pour voir si tout va bien.


Pierre
pier.antoine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 11h32   #4
Invité de passage
 
Maxime
Inscription : janvier 2011
Messages : 7
Détails du profil
Informations personnelles :
Nom : Maxime
Âge : 25

Informations forums :
Inscription : janvier 2011
Messages : 7
Points : 1
Points : 1
Hello et merci Pierre et Gibra pour vos réponses


En replacant :


Code :
f = "Mois = """ & Me.Modifiable16 & """"
par

Code :
f = "Mois = " & Chr(34) & Me.Modifiable16 & Chr(34)

J'obtient la même erreur.
f me renvoie la valeur "avril" alors que mois est avril (sans guillemet)
idem avec la solution de gibra, f me renvoie 'avril'

en remplacant par

Code :
f = "Mois = " & Me.Modifiable16
A l'éxécution de la macro Access me demande la valeur de avril...

Avez vous une idée?
Dois-je faire en sorte que la valeur de Mois soit "avril" en mettant des guillement ou des chr(34) dans ma requete de calcul?

Merci de votre aide.
themaskedduck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 12h03   #5
Membre Expert
 
Homme Pierre ANTOINE
Inscription : février 2008
Messages : 650
Détails du profil
Informations personnelles :
Nom : Homme Pierre ANTOINE
Âge : 43
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : février 2008
Messages : 650
Points : 1 302
Points : 1 302
Bonjour

Attention !

Pour les critère comportant du texte, le signe encadrant est certes le double quote (geuillemet chr(34)) mais l'opérateur n'est pas le égal(=) mais "like".

Essayez ceci :

Code :
f = "Mois like" & Chr(34) & Me.Modifiable16 & Chr(34)
Pierre
pier.antoine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 12h33   #6
Invité de passage
 
Maxime
Inscription : janvier 2011
Messages : 7
Détails du profil
Informations personnelles :
Nom : Maxime
Âge : 25

Informations forums :
Inscription : janvier 2011
Messages : 7
Points : 1
Points : 1
cela donne f = "Mois like "avril""

J'ai ajouté une ligne MsgBox (f & " " & Mois.value)
qui me revoie

Mois like "avril" avril


Mais la macro ne fonctionne pas : Erreur 2001...
themaskedduck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 13h22   #7
Invité de passage
 
Maxime
Inscription : janvier 2011
Messages : 7
Détails du profil
Informations personnelles :
Nom : Maxime
Âge : 25

Informations forums :
Inscription : janvier 2011
Messages : 7
Points : 1
Points : 1
Ce qui m'étonne le plus c'est que le premier filtre fonctionne très bien

Code :
f = "ZTC" & " = """ & Me.Modifiable8 & """"
avec un f qui me renvoie f = "ZTC = "tartanpion""
Le filtre s'éxécute sans problème, idem avec le filtre sur l'année...

Je pense réellement que le problème est ailleurs...
themaskedduck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 13h55   #8
Membre Expert
 
Homme Pierre ANTOINE
Inscription : février 2008
Messages : 650
Détails du profil
Informations personnelles :
Nom : Homme Pierre ANTOINE
Âge : 43
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : février 2008
Messages : 650
Points : 1 302
Points : 1 302
Re

Après relecture de tout le poste, pourriez vous nous indiquer quelle est le contenu du contrôle Modifiable8, ainsi que le nombre de colonne, leur taille, et le numéro de la colonne liée.

Question annexe : avez-vous bien essayez le filtre uniquement sur le mois?


merci d'avance.

Pierre
pier.antoine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 15h21   #9
Invité de passage
 
Maxime
Inscription : janvier 2011
Messages : 7
Détails du profil
Informations personnelles :
Nom : Maxime
Âge : 25

Informations forums :
Inscription : janvier 2011
Messages : 7
Points : 1
Points : 1
hi,
______________________________
Modifiable8 : (choix de la ZTC)
- 1 colonne
- contenu : SELECT [qry_gains/entité].ZTC FROM [qry_gains/entité] GROUP BY [qry_gains/entité].ZTC;
- colonne liée : 1
______________________________
Modifiable14 : (choix de l'année)
- 1 colonne
- Contenu : SELECT [qry_gains/entité].Année FROM [qry_gains/entité] GROUP BY [qry_gains/entité].Année;
- colonne liée : 1
_______________________________
Modifiable16 : (choix du mois)
- 1 colonne
- Contenu : SELECT [qry_gains/entité].Mois FROM [qry_gains/entité] GROUP BY [qry_gains/entité].Mois;
- colonne liée : 1



Pour la question annexe oui, en effet si je fait un filtre uniquement sur le mois ou si je fait un mix en spécifiant un mois, la macro bug...
Souhaitez vous que j'upload une version simplifiée de mon fichier?
themaskedduck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/01/2011, 15h58   #10
Invité de passage
 
Maxime
Inscription : janvier 2011
Messages : 7
Détails du profil
Informations personnelles :
Nom : Maxime
Âge : 25

Informations forums :
Inscription : janvier 2011
Messages : 7
Points : 1
Points : 1
Je le met quand même au cas ou...
Fichiers attachés
Type de fichier : zip BDD Access_1.1.mdb.zip (236,4 Ko, 3 affichages)
themaskedduck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2011, 09h20   #11
Membre Expert
 
Homme Pierre ANTOINE
Inscription : février 2008
Messages : 650
Détails du profil
Informations personnelles :
Nom : Homme Pierre ANTOINE
Âge : 43
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Secteur : Enseignement

Informations forums :
Inscription : février 2008
Messages : 650
Points : 1 302
Points : 1 302
Bonjour;

Je ne comprends pas pourquoi ça ne fonctionne pas avec le libellé des mois.

Pour ma part j'ai un peu changé deux ou trois trucs, et maintenant cela fonctionne.

Pour la requête "qry_gains/entité", ajouter un champ :

Code :
 (Month(tb_etudes![date de solde (si DIS/DRIA])) AS MoisNbre
Modifier le contenu du contrôle modifiable 16 en

Code :
1
2
3
SELECT [qry_gains/entité].MoisNbre, [qry_gains/entité].Mois
FROM [qry_gains/entité]
GROUP BY [qry_gains/entité].MoisNbre, [qry_gains/entité].Mois;

Modifier le code du filtre pour le controle Modifiable16:

Code :
1
2
3
4
5
6
7
8
 
If Not IsNull(Me.Modifiable16) And Me.Modifiable16 <> "" Then
     If f <> "" Then
          f = f & " AND [MoisNbre] = " & Me.Modifiable16 & ""
     Else
          f = "[MoisNbre] = " & Me.Modifiable16 & ""
     End If
End If
En fais, au lieu de passer par du texte, je filtre sur un nombre, équivalent au numéro du mois.


PS : essayer de mieux nommer vos contrôle. Modifiable8, Modifiable16, ce n'est pas de tout explicite, donc source de confusion, et de perte de temps.

PPS : dans votre code, pour raison de clarté, essayer de faire des décalage.


Pierre
pier.antoine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2011, 10h06   #12
Invité de passage
 
Maxime
Inscription : janvier 2011
Messages : 7
Détails du profil
Informations personnelles :
Nom : Maxime
Âge : 25

Informations forums :
Inscription : janvier 2011
Messages : 7
Points : 1
Points : 1
Bonjour et merci beaucoup pour cette solution qui me conviens très bien.

Je vais faire un effort sur l'organisation de mes formulaires et de mes macros!
(j'ai appris sur le tas et je manque encore d'organisation!)

A bientot !!
themaskedduck 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 19h28.


 
 
 
 
Partenaires

Hébergement Web