[Access] Ligne vide

Résolu
Bonjour,

j'aimerais savoir comment faire pour filtrer les lignes vides dans une requête. Je m'explique!

Je possède plusieurs requête, avec aucun code behind, qui permet de faire la conversion de mes données d'un table. Cependant, lors de l'importation, mon fichier CSV peut contenir des lignes vides. Lors de l'exécution de ma première requête, il se produit un erreur d'incompatibilité sur les lignes vides. J'ai tenté de filtrer les lignes vides avec la fonction IsEmpty(), mais cela ne fonctionne pas.

Avez-vous une solution pour moi? Je vous rappelle que je ne touche aucunement au VBA, seulement par Query Access 2007.

Merci :)
Configuration: Windows XP
Firefox 3.0.11

31 réponses

Résumé de la discussion

Le fil porte sur le filtrage des lignes vides lors de l'importation d'un CSV vers une base Access 2007 et sur les erreurs de type causées par des valeurs numériques manquantes dans les requêtes. Des solutions préconisent de supprimer les lignes vides à l'importation ou d'utiliser une table temporaire pour filtrer les enregistrements non vides avant traitement des données. Enfin, l'exemple SQL montre comment importer dans une table temporaire puis copier les lignes non vides vers la table de travail, solution efficace lorsque des valeurs numériques manquantes provoquent des messages d'incompatibilité.

Bobot (l’IA à votre service)
  1. Merci SilverM-A,
    Eh oui, j'ai de l'avance .... et cela fait juste 45 fois une différence ... à une prochaine peut-être !
    Excellente semaine.
    0
    1. La requête de suppression marche très bien ! Excellent, merci ! Pas besoin de me battre pour une table temporaire :D !!!

      Merci !!! Quand vais-je devenir un dieu comme toi ? haha :P Si j'ai besoin d'avoir ton âge, j'y suis pas tout de suite haha :P 60+ et moi j'en ai 20 ... haha :P

      Je me permet une petite rigolade ;) Merci 1000 fois encore !
      0
      1. Bonjour,
        Regardez le poste 27, les messages se croisent !
        0
        1. Je sais, mais ... il est vraiment contre les tables temporaires! Je ne sais pas pourquoi, il semble avoir eu une mauvaise relation dans le passé avec une d'en elle haha !!!! :P

          Je lui en parle! Sinon la solution est d'enlever les entêtes à la main!

          Ce que "boss" veux! :) haha :P
          0
          1. Bonjour,
            Mais vous la créez uniquement pour l'importation ensuite vous pouvez la supprimer dès que vous avez les données en place.
            Ou une autre solution:
            Vous importez sans la ligne des titres et ensuite créer une requête suppression pour supprimer les lignes vides.
            Voici la requête suppression:
            DELETE DonneesBrutes.Date
            FROM DonneesBrutes
            WHERE (((DonneesBrutes.Date) Is Null));

            0
            1. Bien, alors merci!

              Mon boss ne voulait pas de table temporaire, donc je vais voir avec lui !!! haha :P

              Merci énormément!!!
              0
              1. Bonjour,
                Oui la requête existe, et j'ai bien précisé que c'est la table qui sert de base qui manque.
                Pour l’importation, et je le répète, dans votre cas vous devez importer les données dans une table temporaire et ensuite avec une requête ajout vous filtrez les données qui vous désirez et qui seront ajouter directement à votre table de travail [DonneesBrutes]. Vous ne devez pas laisser des données incompatibles dans cette table sous peine d’erreur à répétitions.
                Note: votre première requête filtre bien les données mais les lignes indésirables restes dans votre table.
                0
                1. [001-Filtre Entête] n'existe pas ?? Bien sur que cette requête existe !

                  Mon but que lors de l'importation, des lignes d'entête de fichier, comme les 5 premières lignes de la table DonneesBrutes, ce retrouve parmi mes données. Donc la première requête, soit [001-Filtre Entête], permet de retirer ses lignes, ce qui fonctionne relativement bien.

                  Par la suite, je désire faire mes formules pour ma conversion de données.
                  0
                  1. Bonjour,
                    Oui je l'ai.
                    Alors là, s’est impossible que cela fonctionne, les 5 premières lignes de la table [DonneesBrutes] ne correspondent pas au type de données attendu dans la table.
                    De plus la requête [01-Conversion 1] est basée sur la table [001-Filtre Entête] qui n’existe pas d’ou message d’erreur : [Type de données incompatible dans l’expression du critère].
                    Je pense qu’une explication claire de se que vous voulez réaliser est nécessaire et aussi le but exact des 2 requêtes.
                    0
                    1. D'accord, celui-ci est correct ou pas ??
                      0
                      1. Bonjour,
                        Les messages se sont croisés.
                        Un petit conseil : lorsque l'on travail en mode création sur une base de données il faut de temps à temps la compacter, se qui peut contribuer à éviter et corriger deux problèmes qui se produisent parfois avec les bases de données : les fichiers deviennent de plus en plus volumineux ou sont corrompus.
                        La compression en ZIP ou RAR se fait sur n'importe qu'el fichier dans le but de diminuer sa taille pour un envoi.
                        0
                        1. J'avais déjà essayé de zipper mon fichier mais la limite était encore peu élevé pour mon fichier. Le compact à marcher cependant ;)

                          https://www.cjoint.com/?ifpAA2Wiil

                          J'espère que le tout à bien fonctionné et que vous pourrez m'aider.
                          0
                          1. Bonjour,
                            Point 1, vous ouvrez votre base et la compacter puis fermer.
                            Point 2, vous compresser le fichier en ZIP ou RAR

                            Mais je me demandais pourquoi tu n'utiliserais pas le fichier que tu m'avais envoyé dans le post 13 ???
                            Eh bien tout simplement parce ce que mon fichier n'est pas la réplique exacte du votre sur lequel se produit la faute.
                            ---

                            Salutations.
                            Jean-Pierre
                            0
                            1. Désoler du retard pour la réponse!

                              Mon fichier semble beaucoup plus volumineux que la limite de 1024ko de cjoint. Il m'est donc impossible de l'envoyer :S Je vais essayer un autre moyen!

                              Mais je me demandais pourquoi tu n'utiliserais pas le fichier que tu m'avais envoyé dans le post 13 ???

                              Merci encore !
                              0
                              1. Bonjour,
                                Vous est-il possible de mettre votre travail (selon poste 16) directement sur ma base exemple [SilverM-A_ccm.accdb] que je vous ai envoyé et mettre le tout sur www.cjoint.com se qui m'évitera de reconstruire vos requêtes.
                                Ce sera plus facile de vous aider.
                                Merci pour le MP.

                                Note : merci de mentionner le libellé du message d'erreur.
                                0
                                1. Salut Jean-Pierre le pingou,

                                  j'ai tenté de régler mon problème à nouveau. J'ai fais une requête préalable à ma conversion. Celle-ci est parfaite, elle retire tout les lignes vides et les lignes d'entête de fichier. Génial !!

                                  Cependant le problème est que je rencontre la même erreur lorsque j'exécute ma requête de conversion. Pourtant, j'ai belle et bien tout mis mes références vers ma nouvelle requête plutôt que vers ma table de données.

                                  Voici le code sql de mes requêtes:

                                  001-Filtre Entête:
                                  SELECT DonneesBrutes.Date, DonneesBrutes.Heure, DonneesBrutes.DigIn2, DonneesBrutes.DigIn3, DonneesBrutes.AnlgIn1, DonneesBrutes.FreqIn1, DonneesBrutes.FreqIn3, DonneesBrutes.FreqIn4, DonneesBrutes.FreqDiff2
                                  FROM DonneesBrutes
                                  WHERE (((IsDate([DonneesBrutes]![Heure]))=-1) AND ((IsDate([DonneesBrutes]![Date]))=-1) AND ((IsEmpty([DonneesBrutes]![DigIn2]))=False) AND ((IsEmpty([DonneesBrutes]![DigIn3]))=False) AND ((IsEmpty([DonneesBrutes]![AnlgIn1]))=False) AND ((IsEmpty([DonneesBrutes]![FreqIn4]))=False) AND ((IsEmpty([DonneesBrutes]![FreqIn3]))=False));


                                  01-Conversion 1:
                                  SELECT [001-Filtre Entête].Date, [001-Filtre Entête].Heure, 117*(10*Val([001-Filtre Entête]![AnlgIn1])/100)^2 AS Puissance, [001-Filtre Entête].FreqIn3, IIf(Val([001-Filtre Entête]![FreqIn3])=0,0,IIf(Val([001-Filtre Entête]![FreqIn3])<3.229,(-0.1095*(Val([001-Filtre Entête]![FreqIn3])^2)+2.9318*Val([001-Filtre Entête]![FreqIn3])-0.1412)*0.48037,IIf(Val([001-Filtre Entête]![FreqIn3])<54.362,(0.0052*(Val([001-Filtre Entête]![FreqIn3])^2)+2.198*Val([001-Filtre Entête]![FreqIn3])+1.1091)*0.48037,0))) AS VitesseVent, [001-Filtre Entête].FreqIn1
                                  FROM [001-Filtre Entête]
                                  WHERE (((Val([001-Filtre Entête]![FreqDiff2])) Between 0 And 360) AND ((Val([001-Filtre Entête]![DigIn2])) Between 0 And 1) AND ((Val([001-Filtre Entête]![DigIn3])) Between 0 And 1) AND ((Val([001-Filtre Entête]![AnlgIn1])) Between 0 And 100))
                                  GROUP BY [001-Filtre Entête].Date, [001-Filtre Entête].Heure, 117*(10*Val([001-Filtre Entête]![AnlgIn1])/100)^2, [001-Filtre Entête].FreqIn3, IIf(Val([001-Filtre Entête]![FreqIn3])=0,0,IIf(Val([001-Filtre Entête]![FreqIn3])<3.229,(-0.1095*(Val([001-Filtre Entête]![FreqIn3])^2)+2.9318*Val([001-Filtre Entête]![FreqIn3])-0.1412)*0.48037,IIf(Val([001-Filtre Entête]![FreqIn3])<54.362,(0.0052*(Val([001-Filtre Entête]![FreqIn3])^2)+2.198*Val([001-Filtre Entête]![FreqIn3])+1.1091)*0.48037,0))), [001-Filtre Entête].FreqIn1, [001-Filtre Entête].AnlgIn1
                                  HAVING (((Val([001-Filtre Entête]![FreqIn3]))>="0") AND ((Val([001-Filtre Entête]![FreqIn1]))>="0"));


                                  Merci !!!
                                  0
                                  1. Haha :P Quelques minutes après mon "post", je me suis justement dit: " Je pourrais faire une autre requête pour filtrer les lignes vides"

                                    Ton exemple reviens pas mal au même.

                                    Encore une fois, merci infiniment !!! Merci d'avoir pris le temps de reconstruire le problème. Tu es génial ! merci encore :)
                                    0
                                    1. Merci beaucoup!!! Infiniment!

                                      Maintenant y a-t-il une façon de retirer les lignes vides dans Access sans l'usage de code VBA ? Mon importation se fait via Access. Existe-t-il une option qui permet de faire cette opération ?

                                      À moins qu'il me soit possible lors du "merge" de mes nombreux fichiers, mais je ne crois pas. L'assemblage se fait via un fichier BAT avec la simple commande :

                                      copy *.csv Global.csv

                                      Donc je ne crois pas possible la suppression de ligne vide via commande BAT.
                                      0
                                      • 1
                                      • 2