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

VBA Access Discussion :

Importation Automatique sous VBA Access [AC-2007]


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Mars 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2015
    Messages : 32
    Points : 23
    Points
    23
    Par défaut Importation Automatique sous VBA Access
    Bonjour à Tous

    Bonjour à tous,
    Je veux importer automatiquement des fichiers Csv dans ACCESS avec un code VBA.
    Les fichiers sont sont enregistrés dans un répertoire sous le format exemple: TACHES_GE_E0D441_D150331_T2055.CSV; quelque soit le fichier la partie TACHES_GE_E0D441 ne change pas, c'est la partie D150331 qui change(Date du 31/03/2015): c'est la date ou le ficher est enregistré dans le répertoire et Bonjour à tous,
    Je veux importer automatiquement des fichiers Csv dans ACCESS avec un code VBA.
    Les fichiers sont sont enregistrés dans un répertoire sous le format exemple: TACHES_GE_E0D441_D150331_T2055.CSV; quelque soit le fichier la partie TACHES_GE_E0D441 ne change pas, c'est la partie D150331 qui change(Date du 31/03/2015): c'est la date ou le ficher est enregistré dans le répertoire et T2055 change aussi en fonction des jour
    Chaque jour je dois importer de manière automatique le dernier fichier, c'est dire le fichier de la veille pour pouvoir automatiser mes tableaux de bord.
    Pour aujourd'hui c'est:TACHES_GE_E0D441_D150409_....csv.(D150409=Date du 09/04/2015).
    Mon code vba pour l'importation automatique:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Public Sub ImportationAutomatique()
      Dim strFichier As String
      'Demander confirmation
       If MsgBox("Confirmez-vous l'importation de la table Tache?", vbQuestion + vbYesNo) = vbNo Then
          Exit Sub
       End If
     
       'Initialisation
       strFichier =Dir( "D:\TACHES_GE_I4D212_D150409_*.CSV")
     
       'Verifier que le fichier existe bien
       If strFichier = "" Then
          MsgBox "le fichier" & strFichier & " est introuvable!", vbExclamation
          Exit Sub
       End If
     
       'Vider la Table temporaire si elle existe
       '(elle est de toute façon crée automatiquement si elle n'existe pas)
       On Error Resume Next
       CurrentDb.Execute "DELETE*FROM[TATA];"
     
       'Importer le fichier csv
       DoCmd.TransferText acImportDelim, "TableModel", "TOTO", strFichier, True
       DoCmd.SetWarnings False
     
       'Tansfert de données vers R1
       DoCmd.OpenQuery "R1"
     
       'Tansfert de données vers R2
       DoCmd.OpenQuery "R2"
     
       'Transfer des données vers R3
       DoCmd.OpenQuery "R3"
     
       'Terminé!
       DoCmd.SetWarnings True
       MsgBox " Importation terminée !", vbInformation
    End Sub
    Ma question c'est comment importer seulement de manière automatiquement le fichier de la veille avec ce code vba (strFichier = Dir("D:\TACHES_GE_I4D212_D150331_*.CSV") ou avec un autre code qui me permettra de lire ce format date( D150409) qui change tous les jours?
    Merci par avance pour vos aides.

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 359
    Points : 23 829
    Points
    23 829
    Par défaut
    Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strFichier =Dir( "D:\TACHES_GE_I4D212_D" & format(DateAdd("d", -1, Date()), "yymmdd") & "_*.CSV") ' Calcule la date d'hier et la met au format AAMMJJ
    A+

  3. #3
    Membre à l'essai
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Mars 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2015
    Messages : 32
    Points : 23
    Points
    23
    Par défaut Importation automatique sous ACCESS
    Bonjour,

    Merci pour votre réponse!

    mon problème se trouve au niveau de l'importation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strFichier = Dir("D:\TACHES_GE_I4D212_D" & MaDate & "_*.CSV")
    Il retrouve bien mon fichier avec la date exacte , mais c'est au niveau de l'importation que ça pose problème:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.TransferText acImportDelim, "TableModel", "TOTO", strFichier, True
    Je demande est-que c'est possible de faire l'importation de manière automatique après avoir utilisé "Dir" ?

    Parce que sur le nom du fichier après ma date ya "T....csv" avec des chiffres qui changent tous les jours aussi.

    Exemple:TACHES_GE_I4D212_D150413_T1433.CSV ( la date et "T1433" changent tous les jours)

    Merci par avance.

    Cdt

  4. #4
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 359
    Points : 23 829
    Points
    23 829
    Par défaut
    Bonjour.

    Je pense qu'en procédant ainsi cela devrait fonctionner :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    const CHEMIN_FICHIER as string = "D:\"
     
    strFichier =Dir(CHEMIN_FICHIER &  "\TACHES_GE_I4D212_D" & format(DateAdd("d", -1, Date()), "yymmdd") & "_*.CSV") ' Calcule la date d'hier et la met au format AAMMJJ
     
    'ici le reste du code
     
    DoCmd.TransferText acImportDelim, "TableModel", "TOTO", CHEMIN_FICHIER & strFichier, True
     
    'ici le reste du code
    A+

  5. #5
    Membre à l'essai
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Mars 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2015
    Messages : 32
    Points : 23
    Points
    23
    Par défaut Importation automatique sous ACCESS
    Bonjour Marot_t,

    Merci beaucoup pour ton aide, ça fonctionne bien, je viens de le tester.

    Juste une dernière question:

    Quel est le code qui me permettra de concaténer mes tables importées?
    Je veux avoir une table historique sur ACCESS où seront rajoutées chaque table importée.
    Remarque: Toutes mes tables que je dois importées ont les mêmes structures( mêmes colonnes et mêmes nombre de colonnes et colonne: date d'extraction).

    Le principe est d'importé chaque jour j'importe une tables dans Access, pour faire le croisement avec une autre table en fin d'obtenir un tableau de bord pour utilisateur.
    Je souhaite avoir une table historique où sera concaténée toutes les tables importées avant écrasement de" la table importée.

    Avec mon code j'écrase la dernière table importée pour pouvoir importer une nouvelle table.

    Merci par avance.

    Ci-dessous mon code complet:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     Public Sub ImportationAutomatique()
     
      'Déclaration de variables
     
      Dim StrFichier As String
     
      Const CHEMIN_FICHIER As String = "D:\"
      Dim MaDate As String
      MaDate = Format(DateAdd("d", -1, Date), "yymmdd")
     
      If MsgBox("Confirmez-vous l'importation de la table Tache?", vbQuestion + vbYesNo) = vbNo Then
         Exit Sub
      End If
     
      'Initialisation
     
      StrFichier = Dir(CHEMIN_FICHIER & "\TACHES_GE_I4D212_D" & Format(DateAdd("d", -1, Date), "yymmdd") & "_*.CSV")
     
      MsgBox ("NOM FICHIER = " & StrFichier)
     
      'Verifier que le fichier existe bien
      If StrFichier = "" Then
         MsgBox "le fichier" & StrFichier & " est introuvable!", vbExclamation
         Exit Sub
      End If
     
      MsgBox "le fichier" & StrFichier & " a bien ete trouvé!", vbExclamation
     
      'Vider la Table temporaire si elle existe
      '(elle est de toute façon crée automatiquement si elle n'existe pas)
      On Error Resume Next
     
      CurrentDb.Execute "DELETE * FROM [TOTO];"
     
      'Importer le fichier csv
      DoCmd.TransferText acImportDelim, "TableModel", "TOTO", CHEMIN_FICHIER & StrFichier, True
     
      DoCmd.SetWarnings False
     
      'Tansfert de données vers R1
     
      DoCmd.OpenQuery "R1"
     
      'Tansfert de données vers R2
     
      DoCmd.OpenQuery "R2"
     
      'Transfer des données vers R3
     
      DoCmd.OpenQuery "R3"
     
      'Terminé!
      DoCmd.SetWarnings True
     
      MsgBox " Importation terminée !", vbInformation
     
    End Sub

  6. #6
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 359
    Points : 23 829
    Points
    23 829
    Par défaut
    Bonjour.

    Selon ce que je comprends de ton processus j'appellerai une requête d'ajout des données de la table d'imporation dans la table d'historique juste avant l'écrasement de la table d'imporation.

    A+

  7. #7
    Membre régulier
    Profil pro
    Ingénieur Industrie
    Inscrit en
    Novembre 2009
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 104
    Points : 100
    Points
    100
    Par défaut Petit conseil
    Bonjour,

    De ce que je comprend de ta problématique, Tu veux comparer plusieurs jeux de données (extraite à différentes date)

    Pourquoi faire plusieurs tables?
    une seule table suffirait avec un champs de type num import qui ferait référence à une table d'histo ou tu garderais la date et heure de mise à jours par exemple. (MAJ via requête d'ajout: [Nom de table Cible],[Nom de fichier source] [Num_d'import] [Date] [durée d’exécution de l'import] ect.

    Et tu n'effaces donc jamais le contenu de ta table principale. c'est plus logique et te permet de faire plus de choses.

    Après chacun sa manière de faire

    A+

    Alex

  8. #8
    Membre à l'essai
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Mars 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2015
    Messages : 32
    Points : 23
    Points
    23
    Par défaut Importation automatique sous ACCESS
    Re Bonjour Marot_r et Alex,

    Comment je peux faire appelle à une requête d'ajout sous ACCESS VBA ,pour que ça soit automatique?
    En fait un code vba qui permettra de l'adapter par rapport à mon code de départ.


    Merci par avance et bon week-end!

  9. #9
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 359
    Points : 23 829
    Points
    23 829
    Par défaut
    Bonjour

    exemple d'appel de requête ajout :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dim db as dao.database:set db=currentdb
    call db.querydefs("NomTaRequete").execute(dbFailOnError)
    db.close:set db=nothing
    Passer par le .execute évite d'avoir à neutraliser les messages d'alerte de Access.

    A+

  10. #10
    Membre régulier
    Profil pro
    Ingénieur Industrie
    Inscrit en
    Novembre 2009
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Industrie

    Informations forums :
    Inscription : Novembre 2009
    Messages : 104
    Points : 100
    Points
    100
    Par défaut
    Hello,

    Autre possibilité plus flexible passer ta query en SQL sous VBA te permet de reprendre des variables de ton code. Je fais souvent ca quand je n'ai pas l'utilité d'avoir la query "en dure" dans access aussi.

    Et l'exécution classique de requête et le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    docmd.openquery "Ta_query"
    A+

    Alex

  11. #11
    Membre à l'essai
    Homme Profil pro
    Conseil en assistance à maîtrise d'ouvrage
    Inscrit en
    Mars 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Conseil en assistance à maîtrise d'ouvrage
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2015
    Messages : 32
    Points : 23
    Points
    23
    Par défaut Importation automatique sous ACCESS
    Bonjour Marot_r, Alex,

    Merci pour vos réponses, ça marche bien.

    Si j'arrive à résoudre cette tâche, c'est grave à vous , Mention spéciale à Marot_t, pour ton aide sur la fonction Dir, j'ai galéré avant d'avoir la réponse.

    Bien des choses à vous.

    Cdt

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

Discussions similaires

  1. [AC-2007] Importer fichier HTML sous vba Access
    Par guycva05 dans le forum Access
    Réponses: 7
    Dernier message: 27/02/2013, 20h36
  2. Supprimer des données Excel sous VBA Access
    Par Sam 069 dans le forum VBA Access
    Réponses: 1
    Dernier message: 09/10/2007, 09h55
  3. accéder un champ de la requette sous vba access
    Par mahboub dans le forum Langage SQL
    Réponses: 1
    Dernier message: 24/04/2007, 22h21
  4. Réponses: 12
    Dernier message: 10/06/2006, 19h07
  5. [Access 2003/VBA]Zorder sous VBA-Access ?
    Par cotmar dans le forum Access
    Réponses: 2
    Dernier message: 05/06/2006, 13h55

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