Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 10 sur 10
  1. #1
    Invité régulier
    Inscrit en
    décembre 2011
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : décembre 2011
    Messages : 55
    Points : 7
    Points
    7

    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 Expert Avatar de Fvandermeulen
    Profil pro Frédéric Vandermeulen
    Inscrit en
    juillet 2007
    Messages
    1 846
    Détails du profil
    Informations personnelles :
    Nom : Frédéric Vandermeulen
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : juillet 2007
    Messages : 1 846
    Points : 2 183
    Points
    2 183

    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
    Invité régulier
    Inscrit en
    décembre 2011
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : décembre 2011
    Messages : 55
    Points : 7
    Points
    7

    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 :
    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 Expert Avatar de Fvandermeulen
    Profil pro Frédéric Vandermeulen
    Inscrit en
    juillet 2007
    Messages
    1 846
    Détails du profil
    Informations personnelles :
    Nom : Frédéric Vandermeulen
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : juillet 2007
    Messages : 1 846
    Points : 2 183
    Points
    2 183

    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 :
    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
    Invité régulier
    Inscrit en
    décembre 2011
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : décembre 2011
    Messages : 55
    Points : 7
    Points
    7

    Par défaut

    re

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

  6. #6
    Membre Expert Avatar de Fvandermeulen
    Profil pro Frédéric Vandermeulen
    Inscrit en
    juillet 2007
    Messages
    1 846
    Détails du profil
    Informations personnelles :
    Nom : Frédéric Vandermeulen
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : juillet 2007
    Messages : 1 846
    Points : 2 183
    Points
    2 183

    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
    Invité régulier
    Inscrit en
    décembre 2011
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : décembre 2011
    Messages : 55
    Points : 7
    Points
    7

    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 :
    oRS.Fields(oRS.Fields.Count) = Format(Date, "ww")

  8. #8
    Membre Expert Avatar de Fvandermeulen
    Profil pro Frédéric Vandermeulen
    Inscrit en
    juillet 2007
    Messages
    1 846
    Détails du profil
    Informations personnelles :
    Nom : Frédéric Vandermeulen
    Âge : 38
    Localisation : Belgique

    Informations forums :
    Inscription : juillet 2007
    Messages : 1 846
    Points : 2 183
    Points
    2 183

    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
    Invité régulier
    Inscrit en
    décembre 2011
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : décembre 2011
    Messages : 55
    Points : 7
    Points
    7

    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
    Invité régulier
    Inscrit en
    décembre 2011
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : décembre 2011
    Messages : 55
    Points : 7
    Points
    7

    Par défaut

    Bonjour à tous

    Personne n'aurait un piste supplémentaire?


    Merci d'avance

    Anthooooony

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •