IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Importer données d'Access en fonction d'une date [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 887
    Par défaut Importer données d'Access en fonction d'une date


    Sur Access (2003) j'ai une requête que je voudrais importer sur un fichier Excel en fonction d'une date :

    Dans ma requête Access, j'ai une date qui correspond à une date de règlement.

    Je voudrais, surement en passent par un UserForm avec une TextBox dans laquelle je sais une date, pouvoir récupérer les donnes de ma requête Access dont la date de règlement est supérieure à la date saisie dans la TextBox

    Dans ma requête Access j'ai :
    - Date de règlement
    - Type de règlement
    - Montant
    - Référence

    Je voudrais pouvoir récupérer ces données dont la date de règlement est, par exemple, supérieur au 01/09/09

    Merci d'avance

  2. #2
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Quel code as tu mis?
    parce que dans l'aide, ceci:
    QueryTables.Add(Connection, Destination, Sql)
    Sql Argument de type Variant facultatif. Chaîne de requête SQL à exécuter sur la source de données ODBC
    Définir donc ta Sql en fonction de ta date

  3. #3
    Membre éclairé Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 887
    Par défaut
    Je viens de penser (oui sa arrive) a un truc :

    Le plus simple (pour moi) serrait éventuellement d'importer la totalité de la requête et après je fait la mise en forme en supprimant les enregistrement non nécessaire en VBA sur Excel

  4. #4
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Salut,
    Tu peux le faire directement dans la requête !
    Utilise l'enregistreur de macro pour avoir le code qui correspond à la manipulation suivante:
    Données/Import Données Externes\Nouvelle requête Database (enfin je crois je suis en GB)
    De là tu vas choisir ta BDD, ensuite la table (ou requête) et les colonnes que tu veux. L'écran suivant va te permettre de "filtrer", c'est là que tu vas choisir le champ Date et y mettre plus grand que xx.
    Tu finis ta requête avec l'aide.

    Dans le code obtenu tu devras changer la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .CommandText = Array("SELECT ...
    Il te suffira de remplacer la date qui y apparait en 'dur' par la variable qui récupère la date de ta TextBox.

    En espérant avoir été clair.

    A+

  5. #5
    Membre éclairé Avatar de FCL31
    Profil pro
    Inscrit en
    Août 2007
    Messages
    887
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 887
    Par défaut
    Pour simplifier un peu mon problème, j'ai fait l'importation grâce à l'enregistreur de macro (je ne m'en été jamais servi donc je ne savais même pas comment sa marché ; Merci de m'avoir fait découvrir un truc de plus).

    J'ai fais un UserForm a l'ouverture dans lequel je saisi une date puis je lance l'importation et je supprime les ligne dont la valeur de la colonne K sont inférieure à cette date

    Mais sa marche pas

    J'ai fais ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    For j = 1 To Range("K60000").End(xlUp).Row
        If Range("K" & j).Value < userform1.TextBox1.Value Then
            Rows(j).Delete
        End If
    Next j
    End Sub
    Je pense que j'ai du oublier de faire quelque chose mais je sais pas quoi


    PS - Les cellules de la colonne K sont en format date

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Déjà dans le cas des suppressions tu dois commencer par le dernier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For j = Range("K65536").End(xlUp).Row To 1 Step -1

  7. #7
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Salut,
    Maintenant que tu as découvert l'enregistreur de macro, tu verras qu'il est ton ami

    Ensuite, lorsque tu veux supprimer des lignes il faut faire une boucle inverse, cet à dire commencer par la dernière ligne vers la première sinon tu vas "sauter" des lignes.
    Imagine j=2; tu supprime, la ligne 3 devient la 2 mais comme ton j passe à trois, tu vas pas passer sur l'ancienne ligne 3 (je sais pas si je suis clair sur ce coup là )

    Donc fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For j = Range("K60000").End(xlUp).Row to 1 step-1
    Encore une remarque concernant ceci, n'auras tu jamais plus de 60000 lignes ? voici une manière d'avoir toujours la dernière ligne remplie quelque soit le nombre de ligne (je pense à XL2007)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DerLig = cells(columns(11).cells.count,11).end(xlup).row
    11 pour la colonne K


    Ensuite, étant donné que tu travaille avec des dates il est primordial de voir comment elles sont retournée dans tes variales, pour ça tu peux utiliser les msgbox afin de visualiser ce qu'elle renvoient et donc te mettre sur la piste de l'erreur.
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Msgbox userform1.TextBox1.Value
    A toi de jouer, reviens ici si ça coince encore et n'oublie pas que tu peux supprimer les lignes non voulue directement dans ta procédure d'import...

    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 24/11/2009, 13h28
  2. Importation données depuis ACCESS
    Par stephyugh dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 13/05/2008, 17h22
  3. Importer données de access vers vb
    Par prison_break dans le forum VB 6 et antérieur
    Réponses: 18
    Dernier message: 02/08/2007, 16h17
  4. Réponses: 1
    Dernier message: 06/05/2007, 12h56
  5. importer données de access
    Par nath-0-0 dans le forum WinDev
    Réponses: 10
    Dernier message: 18/12/2006, 14h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo