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 X fichiers Csv vers 1 ACCESS


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 55
    Points : 32
    Points
    32
    Par défaut Importer X fichiers Csv vers 1 ACCESS
    Bonjour,

    Ce sujet comporte deux logiciels, je ne sais pas si je dois le créer sur celui d'Excel ou sur Access? au besoin je le changerais de place.
    Je suis sur Excel et Access 2007.

    Je chercher à automatiser l'import de fichier .csv dans une table Access.

    La DSI de ma société, met dans un répertoire chaque semaine un fichier de statistique.
    Je souhaite faire un suivi des statistiques grâce à ces fichiers CSV.

    J'ai deux problématiques pour les faire :

    _ Récupérer d'un biais tous les fichiers(20) qui sont déjà présent(même nom_date du jour; mêmes colonnes)

    _ Automatiser la récupération des futurs fichiers qui arriveront chaque semaines.

    Auriez vous une piste pour mon problème?

    En vous remerciant par avance de votre aide.

    Bonne journée

    Anthooooony

  2. #2
    Membre émérite 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 : 48
    Localisation : Belgique

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Salut,

    Il y a plusieurs pistes, la meilleures selon moi est de faire en sorte que tes dossiers soient logiques et prévisibles en utilisant le N° de semaine par exemple.
    Du genre
    C:\Extraction_33\tes 20 fichiers
    C:\Extraction_34\tes 20 fichiers

    Dès lors tu peux définir ton chemain d'accès de manière automatique:
    MyPath = "C:\Extraction_" & Format(Date, "ww") & "\"

    Tu n'as plus qu'à boucler sur les fichier du répertoire (tu devrais trouver des exemple sur le forum grace au moteur de recherche)
    Il faut toutefois prévoir un système de tag qui t'indique si les données on déjà été importées ou non, sans quoi c'est les doublons quasiment assuré (je parle par expérience)

    Le même moteur de recherche devrait te donner des exemples pour importer tes CSV.

    Voilà un début de la piste, à toi de bosser et quand tu es coincé, tu reviens...

    A+

    P.S. pour Access, si tu crées une requête d'ajout sur base de tables liées vers tes CSV, ce Post devrait t'inspirer:
    http://www.developpez.net/forums/d96...hemin-relatif/
    N'oubliez pas le si votre problème est solutionné.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 55
    Points : 32
    Points
    32
    Par défaut
    Bonjour

    Merci de ton retour Fvandermeulen.

    J'ai avancé sur le sujet j'ai un code qui récupère tous les fichiers d'un dossier et qui les rajoutes dans une table donnée.

    Est ce que tu serais comment recuperer dans une derniere colonne les trois derniers chiffres du fichier excel recuperé?
    c'est pour historiser les stats.
    "extract_S30"

    Ci dessous le code pour ceux qui pourraient en avoir besoin.

    Attention de bien rajouter les compléments




    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    Sub tranfertFeuilleClasseursFermes_VersAccess_V02()
    'Nécessite d'activer la référence Microsoft ActiveX Data Objects x.x Library
    'Nécessite d'activer la référence Microsoft ADO ext x.x for DLL and Security
    '
    Dim Cn As New ADODB.Connection
    Dim oProdRS As New ADODB.Recordset, oRS As ADODB.Recordset
    Dim oConn As ADODB.Connection
    Dim j As Integer
    Dim Fichier As String, Repertoire As String, Feuille As String
    Dim oCat As ADOX.Catalog
     
    '------------------------------------------------------
    'Connection à la Base Access
    Set oConn = New ADODB.Connection
    oConn.Open "Provider='Microsoft.Jet.OLEDB.4.0';" & _
    "Data Source= 'C:\Documents and Settings\RC1194\Desktop\Test appli\maBase.mdb';"
     
    'les données seront placés dans Table1
    Set oRS = New ADODB.Recordset
    oRS.Open "Select * from Table1", oConn, adOpenKeyset, adLockOptimistic
    '------------------------------------------------------
     
    'Boucle sur les classeurs Excel du répertoire cible
    Repertoire = "C:\Documents and Settings\RC1194\Desktop\Test appli\sauvegarde\"
    Fichier = Dir(Repertoire & "\*.xls")
     
    Do While Fichier <> ""
        'Connection au classeur Excel
        Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & Repertoire & "\" & Fichier & ";" & _
        "Extended Properties=""Excel 8.0;"""
     
     
        '-------------------------
        Set oCat = New ADOX.Catalog
        Set oCat.ActiveConnection = Cn
        'Récupére le nom de la Feuille:
           'Attention: l'index correspond à un ordre alphabétique croissant
           'et les plages de cellules nommées sont intégrées.
        Feuille = oCat.Tables(0).Name
        '-------------------------
     
     
        'requête pour extraire les données de la Feuil1
        oProdRS.Open "SELECT * FROM [" & Feuille & "]", Cn, adOpenStatic
     
        ' --- Transfert les données dans la base ---
        Do While Not (oProdRS.EOF)
            oRS.addNew
               For j = 0 To oRS.Fields.Count - 1
                oRS.Fields(j) = oProdRS.Fields(j).Value
                Next j
            oRS.Update
            oProdRS.moveNext
        Loop
        '-------------------------------------------
     
     
        Set oCat = Nothing
        oProdRS.Close
        'Fermeture de la connection au classeur Excel
        Cn.Close
    Fichier = Dir
    Loop
     
    'oRS.Close
    Set oRS = Nothing
    'Fermeture de la connection Access
    oConn.Close
    Set oConn = Nothing
    End Sub

  4. #4
    Membre émérite 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 : 48
    Localisation : Belgique

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Re,

    A la volée (pas le temps de tester), je dirais pour extraire le N° de semaine:
    NoWeek=left(right(Fichier,7),3)
    Quoi que, avec les semaine <10 tu n'auras que 2 caractères...

    Sinon, tu reprends le principe
    NoWeek=Format(Date, "ww")

    A priori à placer dans ta boucle d'écriture, du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    '...
    Do While Not (oProdRS.EOF)
            oRS.addNew
            For j = 0 To oRS.Fields.Count - 1
                oRS.Fields(j) = oProdRS.Fields(j).Value
            Next j
            oRS.Fields(oRs.Fields.count)=format(date,"ww")
            oRS.Update
            oProdRS.moveNext
        Loop
    '...
    N'oubliez pas le si votre problème est solutionné.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 55
    Points : 32
    Points
    32
    Par défaut
    re

    Ca n'a pas marché, en tout cas merci de pour tes retours c'est gentil!

  6. #6
    Membre émérite 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 : 48
    Localisation : Belgique

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Et qu'est ce qui n'a pas marché ?
    Le numéro de semaine, l'écriture, y a-t-il eu un message d'erreur ?
    N'oubliez pas le si votre problème est solutionné.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 55
    Points : 32
    Points
    32
    Par défaut
    J'ai une erreur d'éxécution '3265'

    Item Cannot be found in the collection corresponding to the requested name or ordinal.

    J'ai ce message d'erreur lorsque je lance la macro avec les lignes renseignées dans ton precedent post.

    ca me met en jaune

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oRS.Fields(oRS.Fields.Count) = Format(Date, "ww")

  8. #8
    Membre émérite 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 : 48
    Localisation : Belgique

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    oRS est bien ta table cible ?
    Si oui, j'ai supposé que la colonne où tu indique la semaine serait la dernière, d'autant que dans ta boucle tu défini la fin par Fields.count-1
    Mais j'ai un sérieux doute...Est-ce que le -1 ne fait pas que corrigé le fait que les fields commence à 0 ?
    Si oui, c'est que tu n'as pas encore la colonne pour ton N° de semaine, dès lors crée la et modifie ton code avec -2 au lieu de -1
    Désolé, c'est un peu brouillon, je devrais prendre le temps de tester mais figure toi que ça me tracasse...
    N'oubliez pas le si votre problème est solutionné.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 55
    Points : 32
    Points
    32
    Par défaut
    Re bonjour,

    J'ai rajouté dans la table access la colonne semaine. et j'ai rajouté -2 comme tu me l'as dit, mais j'ai toujours le même problème, le meme message d erreur.
    Par contre pour te dire si oRS est bien ma table cible je ne pourrais te dire.
    J'ai regardé sur un post, ou le probleme était similaire au mien, apres quelques changements il s'est averé qu'il correspondait en presque tout point à ma problématique; probleme de format csv, et rajouté à chaque ligne la semaine qui se trouve sur le fichier.

    Je ne pense pas t'avoir beaucoup aidé.

    Sinon, je pourrais créer une macro qui au lieu de rajouter une colonne dans access.
    Rajouterait à chaque fichier xls ou csv avant l'integration dans access. comme ça lorsqu'il s'importe dans access l'info est déja présente..

    je vais voir ça

    merci encore

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 55
    Points : 32
    Points
    32
    Par défaut
    Bonjour à tous

    Personne n'aurait un piste supplémentaire?


    Merci d'avance

    Anthooooony

Discussions similaires

  1. [AC-2010] Importation de fichier csv vers access sans limite de caractères
    Par fabien59280 dans le forum VBA Access
    Réponses: 1
    Dernier message: 08/11/2012, 01h12
  2. [AC-2003] importation automatique fichiers csv vers access
    Par biquet52 dans le forum VBA Access
    Réponses: 3
    Dernier message: 24/03/2010, 17h32
  3. Import de fichier CSV automatique dans Access
    Par Jmar dans le forum Access
    Réponses: 4
    Dernier message: 20/01/2006, 11h48
  4. [Conseil] Import de fichier CSV vers MySQL
    Par ShinJava dans le forum JDBC
    Réponses: 6
    Dernier message: 15/03/2005, 20h14
  5. Importation de fichier CSV vers une base Interbase
    Par PrinceMaster77 dans le forum ASP
    Réponses: 3
    Dernier message: 15/03/2005, 16h18

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