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 :

Lenteurs Insert Into depuis excel vers access


Sujet :

VBA Access

  1. #1
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut Lenteurs Insert Into depuis excel vers access
    Bonjour,
    J'ai une macro sous excel qui récupéré le contenu de plusieurs fichiers excel. Je dois réaliser plusieurs contrôle/modification/compilation des données sur ces fichiers pour ensuite les insérer dans Access.
    Je ne peu donc pas insérer directement les fichiers dans Access.

    J'utilises une boucle sur le recordset de mon classeur pour faire un Insert Into vers access.
    Lorsque la base access est sur mon disque local tout vas bien, ça met moins de 30 secondes pour insérer 100 000 lignes.

    Dès que je place la base de données sur un disque réseau de l'entreprise, le temps est ingérable. (Plusieurs heures)
    Le temps d'accès au réseau est très lent. Savez-vous s'il existe une méthode d'importation plus rapide que de faire du ligne à ligne?

    J'avais lu un jour qu'il existait une méthode pour importer un classeur en entier dans access et que c'était très rapide. Je n'ai pas retrouvé cette méthode.
    Mon idée serait de modifier/compiler mes données, de générer un classeur et d'insérer ce classeur dans access avec une autre méthode que celle du ligne à ligne...


    Merci d'avance pour vos idées.

    Jojo

  2. #2

  3. #3
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    Salut merci de ta visite.
    Par contre, je ne pige pas comment l’exploiter car je suis sous excel et je veux insérer dans access depuis excel.

    Dans le lien que tu m’as donné, le code s’execute depuis access.

    Est-ce que ca va fonctionner si depuis excel je fais un insert de cette manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Insert Into MyTableAccess (champ1, champ2, etc...) select * from  (Select * from [Feuil1$] in 'C:\rep\Classeur1.xls' 'Excel 12.0;HDR=Yes')
    Je testerai ca demain.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Oui bien sur! TU prépares ta requête dans Access comme dans le petit film du lien; ensuite tu copie colle le script sql dans Excel. Dans Excel tu fais une connexion Adodb sur ta base Access!

    Après tu pourras modifier dynamiquement les fichiers sources dans Excel vba.

  5. #5
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    Oui bien sur! TU prépares ta requête dans Access comme dans le petit film du lien; ensuite tu copie colle le script sql dans Excel. Dans Excel tu fais une connexion Adodb sur ta base Access!

    Après tu pourras modifier dynamiquement les fichiers sources dans Excel vba.
    Super c'est exactement ce que je souhaitais faire !!!
    Je dois juste adapter mon code pour ne plus envoyer directement les données dans access, mais les stocker dans une feuille excel temporaire.
    Merci beaucoup de ton aide.

  6. #6
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut
    Salut, j'ai un message d'erreur depuis excel lors de l'ajout dans ma table access.

    J'ai bien respecté cette formulation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Connexion.Execute "Insert Into Table ([Champ1], [Champ2]) Select * from (Select distinct [ChampExcel1] as Champ1, [ChampExcel2] as Champ2 from [FeuilExcel$] In 'Chemin\Complet\Vers\Fichier.xls' 'Excel 12.0;HDR=Yes')"
    J'ai le message : "La méthode 'Execute' de l'objet _Connection' a échoué

    J'ai du louper un truc mais je ne sais pas quoi...

  7. #7
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut
    Non en fait c'est bon, j'avais juste oublié de mettre entre crochets les noms de champs access lors du changement de nom

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ChampExcel as [ChampAccess]
    C'est hallucinant la rapidité du truc pour l'ajout de donnée ! Je retombe sur des temps beaucoup plus cohérents, moins d'une minute !!!

    Merci beaucoup !

  8. #8
    Invité
    Invité(e)
    Par défaut
    Code Pour la culture! : 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
    Public Connexion As Object
    Private Sub test()
    Const BaseAccess = "C:\Users\xxx\Documents\Base de données6.accdb"
    Const Xls = "C:\MyRepertoire2\MyFichier.xlsx"
    Set Connexion = CreateObject("Adodb.connection")
    With Connexion
      .Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & BaseAccess & ";"
      MsgBox "toto Existe " & TableExiste("toto")
      If TableExiste("toto") Then
        .Execute "Insert into [toto] select * from (select * from [Feuil1$] in '" & Xls & "' 'Excel 12.0;HDR=Yes')"
      Else
          .Execute "select * into [toto] from (select * from [Feuil1$] in '" & Xls & "' 'Excel 12.0;HDR=Yes')"
      End If
      ThisWorkbook.Sheets("BD").Range("A2").CopyFromRecordset .Execute("Select * from [toto]")
     MsgBox "toto Existe " & TableExiste("toto")
      .Execute "Drop table [toto]"
      MsgBox "toto Existe " & TableExiste("toto")
         .Close
    End With
     
     
     
     
    End Sub
     
     
    Public Property Get TableExiste(TableName As String) As Boolean
    With Connexion.OpenSchema(20)
        If Not .EOF Then
          .Filter = "TABLE_NAME ='" & TableName & "'"
           TableExiste = Not .EOF
        End If
        .Close
    End With
    End Property


    dans ta méthode précédant tu sollicitais énormément le réseau c'est comme si tu envoyais 100 000 fichier de 1 Ko! dans ma méthode tu envois 1 fichier de 1 Ko et c'est Access qui gère!
    Dernière modification par Invité ; 24/11/2017 à 10h04.

  9. #9
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 144
    Points : 337
    Points
    337
    Par défaut
    C'est vraiment une super méthode, je n'étais jamais tombé dessus sur le net, pourtant j'en ai parcouru des forums...
    Cette méthode est bien plus rapide, je vais en profiter pour reprendre des macros déjà existantes pour optimiser les temps de réponse.

    Merci beaucoup !

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

Discussions similaires

  1. Problème exportation heure depuis Excel vers Access
    Par AstroZelda dans le forum Général VBA
    Réponses: 0
    Dernier message: 10/06/2015, 15h13
  2. insert into depuis feuille excel vers table sous sql server 2005
    Par enstein8 dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 09/12/2011, 16h21
  3. [XL-2003] requete ADO INSERT depuis Excel vers Access
    Par MaxAttila dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/05/2011, 14h26
  4. Réponses: 1
    Dernier message: 26/10/2010, 15h25
  5. NULL depuis Excel vers Access
    Par ToutEnInox dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 16/05/2007, 21h20

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