[Excel | VBA] Probleme sur Macro Filtre et absence de valeur

Résolu
AiDuK Messages postés 80 Date d'inscription lundi 22 octobre 2007 Statut Membre Dernière intervention 30 juillet 2008 - 23 juin 2008 à 15:40
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 - 25 juin 2008 à 16:20
Bonjour à toutes et à tous,

Je me trouve actuellement confronté à un problème.
Dans le projet sur lequel je travail, j'importe des informations à partir de requètes d'une BDD Access

Par exemple :

J'ai une BDD sur le vente de matériel informatique ( nous utiliserons écran, souris, clavier pour l'exemple )
Différentes requètes ( nombre d'écran vendus sur 12 mois glissants, séparés par mois, et de même pour les claviers et les souris )

J'importe les différentes requètes, ce qui me donne :

         A                                             B                                                                  C                                       D

<colgroup><col style=\"WIDTH: 120pt; mso-width-source: userset; mso-width-alt: 5851\" width=\"160\" /><col style=\"WIDTH: 75pt; mso-width-source: userset; mso-width-alt: 3657\" width=\"100\" /><col style=\"WIDTH: 116pt; mso-width-source: userset; mso-width-alt: 5668\" width=\"155\" /><col style=\"WIDTH: 120pt; mso-width-source: userset; mso-width-alt: 5851\" width=\"160\" /><col style=\"WIDTH: 178pt; mso-width-source: userset; mso-width-alt: 8667\" width=\"237\" /></colgroup>----
1      MOIS, MOIS PREV, , PRODUIT, Moyenne prix vente, ----
2      janv.-08, 1, , écran, 84,6, ----
3      févr.-08, 2, , écran, 93,3, ----
4      mars-08, 3, , écran, 100,0, ----
5      avr.-08, 4, , écran, 85,7, ----
6      mai-08, 5, , écran, 83,3, ----
7      juin-07, 6, , écran, 100,0, ----
8       juil.-07, 7, , écran, 100,0, ----
9       août-07, 8, , écran, 0,0, ----
10     sept.-07, 9, , écran, 100,0, ----
11     oct.-07, 10, , écran, 80,0, ----
12     nov.-07, 11, , écran, 100,0, ----
13     déc.-07, 12, , écran, 88,9, ----
14     Moy / Average, , , , 84,7

Sur une page se trouve le mois et l'année dont j'aimerais avoir les indicateurs de vente  ( ex : mai-08 )
Ensuite j'applique un filtre qui m'affiche la moyenne des ventes pour le mois choisi ( dans mon exemple mai-08 )
Ce qui me donne :

6      mai-08, 5, , écran, 83,3

Cependant si je n'ai pas vendu d'écran durant le mois de Mai 2008, lorsque j'actualise mes données provenant de ma requète Access, j'obtiens :

        A                                             B                                                                  C                                       D

<colgroup><col style=\"WIDTH: 120pt; mso-width-source: userset; mso-width-alt: 5851\" width=\"160\" /><col style=\"WIDTH: 75pt; mso-width-source: userset; mso-width-alt: 3657\" width=\"100\" /><col style=\"WIDTH: 116pt; mso-width-source: userset; mso-width-alt: 5668\" width=\"155\" /><col style=\"WIDTH: 120pt; mso-width-source: userset; mso-width-alt: 5851\" width=\"160\" /><col style=\"WIDTH: 178pt; mso-width-source: userset; mso-width-alt: 8667\" width=\"237\" /></colgroup>----
1      MOIS, MOIS PREV, , PRODUIT, Moyenne prix vente, ----
2      janv.-08, 1, , écran, 84,6, ----
3      févr.-08, 2, , écran, 93,3, ----
4      mars-08, 3, , écran, 100,0, ----
5      avr.-08, 4, , écran, 85,7, ----
, , , , , ----
7      juin-07, 6, , écran, 100,0, ----
8       juil.-07, 7, , écran, 100,0, ----
9       août-07, 8, , écran, 0,0, ----
10     sept.-07, 9, , écran, 100,0, ----
11     oct.-07, 10, , écran, 80,0, ----
12     nov.-07, 11, , écran, 100,0, ----
13     déc.-07, 12, , écran, 88,9, ----
14     Moy / Average                                  

Le probleme est que lorsque j'applique le filtre en fonction du mois, il ne trouve pas de données et du coup, fait buguer la macro.

De plus cela ne m'affiche plus rien dans le graphique qui dépend de ces données. Alors que je voudrais qu'il me mette Zero
, , , ,

Si quelqu'un pouvait m'aider , cela serait fort appréciable s'il vous plait , car la , je suis un peu perdu et j'ai essayé de nombreuses solutions, mais en vain.

Si vous avez des zones d'ombre sur mon explication, je me tiens à votre disposition pour préciser certaines choses

Merci d'avance,

AiDuK

14 réponses

cs_chapata Messages postés 214 Date d'inscription mercredi 2 février 2005 Statut Membre Dernière intervention 9 avril 2010 5
24 juin 2008 à 13:45
Donc quand tu actualise il ne te mets pas de ligne vide ... alors le passage de la boucle de fera rien. C'est ce que je te disais plus haut, il faut revoir ta requête.

Elle fonnctionne pas la macro ? c'est quoi l'erreur ?

***********  Si cette réponse vous convient, merci de valider ce post  ***********

ChaPaTa
/FONT>
3
cs_chapata Messages postés 214 Date d'inscription mercredi 2 février 2005 Statut Membre Dernière intervention 9 avril 2010 5
23 juin 2008 à 17:47
Hello ,

fait une tite macro qui vérifie que tes lignes ne sont pas vides, si tel est le cas, balance un zéro dans les champs concernés.
Enfin, c'est une piste ... pas une solution.

ChaPaTa
/FONT>
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
23 juin 2008 à 19:00
Salut,
Exact chapata, mais..
le mieux serait que ça soit fait au niveau de la requete.
Table_Mois  ---->Table_Ventes
S' il n' y a pas de correspondance du Mois dans la table ventes "balances un zéro".

<hr />... Y'en a même qui disent qu'ils l'ont vu voler.
0
cs_chapata Messages postés 214 Date d'inscription mercredi 2 février 2005 Statut Membre Dernière intervention 9 avril 2010 5
24 juin 2008 à 09:12
Si mes souvenirs sont bons, il n'est pas posssible dans une requête SELECT d'effectuer des des boucles, tu peux juste utliser le :
CASE WHEN, du style :
   (CASE WHEN [MOIS] IS NULL THEN 'balance des 0 partout'
      ELSE 'balance mes valeurs' END)

Et ceci appliqué pour tes champs ou tu veux des 0.

Comment est récupérer tes données sur Excel , depuis une connection et requête excel ou un export depuis ta base ?
Car si c'est depuis Excel, je craint que cela ne fonctionne pas, sinon ca a des chances de fonctionner.

A la limite du refait ta requête avec des Jointures LEFT OUTER JOIN, comme ca tu auras toujours tes champs clé, et des valeurs vides, a ce moment tes CASE WHEN vont fonctionner.

Sinon, passe une Macro Excel ...

Bon courage.

***********  Si cette réponse vous convient, merci de valider ce post  ***********

ChaPaTa
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
AiDuK Messages postés 80 Date d'inscription lundi 22 octobre 2007 Statut Membre Dernière intervention 30 juillet 2008
24 juin 2008 à 09:24
Pour récupérer mes données Access sous Excel, je vais dans :
Données -> Données Externes -> Importer Données  , puis je choisis ma BDD Access et enfin la requète que je veux importer

Cependant, concernant le problème que je rencontre actuellement , je viens d'identifier la provenance.
Lorsque je faisais des test, j'avais fais une copie de la BDD, sur cette copie la requète m'affiche le mois de mai avec 0 vente
Mais sur la BDD actuelle, cela ne marche pas, elle a subie quelques modifications et la même requète ne m'affiche pas un mois, s'il n'y a pas de vente.

Cependant , je ne peux pas reprendre l'ancienne BDD, du fait du trop grand nombre de modification.
Les modifications ne concernent en aucun cas les propriétés des champs de ma table, c'est pourquoi je ne comprends pas pourquoi cela ne marche pas.
0
cs_chapata Messages postés 214 Date d'inscription mercredi 2 février 2005 Statut Membre Dernière intervention 9 avril 2010 5
24 juin 2008 à 09:53
Tu fais une requête sur 2 tables dans ta BDD, puis tu vas chercher via Excel une importation de cette requête.
Alors si ta requête ne te ramène pas tes lignes à 0, il faut que tu la vérifie.

Essai de faire une jointure externe (LEFT OUTER JOIN) sur tes tables, pour ramener la clé Mois, par défaut et toutes les infos que tu veux apres, souris, clavier, etc ....
Utilise le "Case When" comme énoncé précédemment.
> ceci est plutot un problème de conception de requête. Car excel garde en mémoire les palges des valeurs importées.

Sinon, passe par une petite macro excel, pour mettre des 0 à ou yen a pas.

***********  Si cette réponse vous convient, merci de valider ce post  ***********

ChaPaTa/FONT>
0
AiDuK Messages postés 80 Date d'inscription lundi 22 octobre 2007 Statut Membre Dernière intervention 30 juillet 2008
24 juin 2008 à 11:45
Le truc c'est que je n'utilise qu'une seule table du fait du peu d'informations stockées, donc pas de jointure de table.


 


Bon ,je vais essayer une macro, mais je vais avoir besoin d'aide.


 


Macro de départ :


Sub TriTest()


    Range("A89:H90").Select
    Selection.ClearContents
    Range("A74:H86").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
        "A72:A73"), CopyToRange:=Range("A89"), Unique:=True


End Sub

De A89 à H90 se trouve le résultat de mon filtre. Je séléctionne et je l'éfface pour enlever le filtre précédent.
Puis j'éffecute un filtre sur les plage A74 à H86 en fonction du mois souhaité ( qui se trouve en A89 )

C'est là ou j'ai besoin d'aide, pour rajouter sur la macro que si il ne trouve pas dans la plage de recherche le mois demandé, qu'il me mette à la place du résultat du filtre des 0 partout.

Merci,

AiDuK
0
cs_chapata Messages postés 214 Date d'inscription mercredi 2 février 2005 Statut Membre Dernière intervention 9 avril 2010 5
24 juin 2008 à 12:10
Hello ,
avant ton filtre tu fais un copier/coller:

' Se place sur la cellule au dessus A73
range ("A73").select
dim i as integer
dim j as integerfor i 1 to 13 'i nombre de lignes de A73 à A86 (simple soustraction, que tu peux modifier .... au besoin)   if activecell.offset(i) "" then ' Si la cellule en dessous est à rien alors ....
      for j = 1 to 8   ' pour  j = 1 à 8 (simple sousctraction du nombre de colonne de A à H, que tu peux modifier ... au besion)
         activell.offset(,j) = 0 'inscrit 0 dans la cellule de la colonne déca lé de j
      next ' colonne suivant
   end if ' fin de condition
next 'ligne suivante

Dis moi si ca fonctionne ...

***********  Si cette réponse vous convient, merci de valider ce post  ***********

ChaPaTa/FONT>
0
AiDuK Messages postés 80 Date d'inscription lundi 22 octobre 2007 Statut Membre Dernière intervention 30 juillet 2008
24 juin 2008 à 13:41
Merci de ton aide.

Bon , j'ai testé, mais cela ne fonctionne pas.

Je pense que le plus simple serait de résoudre le probleme directement dans Access ( Table + Requète )
Car c'est la source du problème, de plus lorsque j'actualise, il ne me met pas un blanc, mais il colle le mois de mai, et juste en dessous le moisde juillet.

Dans à mon avis, je vais approfondir de ce coté là

par contre, si tu as une idée ou des conseils pour cela , je suis preneur.

Cordialement,

AiDuK
0
AiDuK Messages postés 80 Date d'inscription lundi 22 octobre 2007 Statut Membre Dernière intervention 30 juillet 2008
24 juin 2008 à 15:05
Je suis en train de revoir chacune de mes requètes.
Ca à l'air de fonctionner, mais du coups je dois tout modifier

Le principale, c'est que ca marche :D

Merci beaucoup pour ton aide.

AiDuK
0
cs_chapata Messages postés 214 Date d'inscription mercredi 2 février 2005 Statut Membre Dernière intervention 9 avril 2010 5
24 juin 2008 à 15:07
Bon courage  !
ChaPaTa
/FONT>
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
25 juin 2008 à 00:41
Salut,
déslé de n' avoir pu poursuivre la discution à temps.
Cependant, je vois que les choses ont évolué.
Pour répondre à chapata:
il n'est pas question de faire des boucles dans
une requête SELECT mais d' établir une correspondance entre une table Mois regroupant les 12 mis de l' année et lea table ou la requete résumant le total des  ventes par mois.
Mais pour que ça puisse marcher, c' est qu' il fautque :
1° -la propriété de la relation soit de type:
"Tous les enregistrements de la table Mois et seules ceux de la table
(ou la requete) Resume_Ventes pour les quels il y a égalité".


2° -La clonne Mois soit tiré de la table Mois


3° -Le champ Yotal_Vente soit généré de la gaçon suivante:
IIf(IsNull(Ventes.Mois),0,Total_Vente)


Ainsi si pour un mois donné il n' y a pas eu de vente , la valeur
de la ligne sera 0.


J' espère avoir réussi à éclaircire mon idée.


Pour le reste, ALDUC?, si tu ne peux pas apporter des modifs à la base,
rien ne t' empêche d' importer la table telle quelle et de créer une requête (dans Excel) une requête qui reprend les points précédement indiqués.


NB: Si ça fonctionnait bien avant et si la base a été modifiée depuis, regardes du côté de la propriété de la relation.






 





<hr />... Y'en a même qui disent qu'ils l'ont vu voler.
0
AiDuK Messages postés 80 Date d'inscription lundi 22 octobre 2007 Statut Membre Dernière intervention 30 juillet 2008
25 juin 2008 à 10:08
Merci à vous deux pour votre aide,
 j'ai réussi à faire marcher le tout en faisant un mixte de l'ancienne BDD et de la nouvelle.
De plus, j'ai du enlever certains champs dans mes requètes qui posaient un problème lors de l'importation, du style :

% de vente ( qui correspondait à VenteReel / Vente Prev * 100 ), et si VentePrev était égal à 0, alors il ne m'affichait pas la ligne
du mois dans la BDD
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
25 juin 2008 à 16:20
Salut,
dans ton Mixte, si tu tiens toujours à ta colonne
% de vente remplaces le champ dans ta requete Selection par:


IIf(Vente Prev =0,0,(VenteReel / Vente Prev * 100 )) As  [% de vente]
                
<hr />
... Y'en a même qui disent qu'ils l'ont vu voler.
0
Rejoignez-nous