Excel/Access : meilleures méthodes pour un INSERT INTO ?

  • Initiateur de la discussion Initiateur de la discussion nougitch
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

nougitch

XLDnaute Occasionnel
Bonjour,

Je souhaite insérer des données d'Excel vers Access.
J'utilise actuellement la méthode suivante :

Code:
Sub MyMacro()

    Dim MyConnection        As Object
    Dim MyADO               As Object
    Dim Size                As Long:            Size = 0
    Dim i                   As Long:            i = 0
    Dim t                   As Long:            t = 0

    Size = Cells(65536, 1).End(xlUp).Row - 28
    t = Timer

    Set MyConnection = New Connection
    With MyConnection
        .Provider = "Microsoft.Jet.OLEDB.4.0"
        .ConnectionString = "F:\My Documents\Sophis\DB\DB.mdb"
        .Open
    End With

    Set MyADO = New Recordset
    With MyADO
        .CursorLocation = adUseClient
        .ActiveConnection = MyConnection
        .CursorType = adOpenStatic
        .LockType = adLockOptimistic
        For i = 0 To Size - 28
            .Source = "INSERT INTO Test (fLevel) VALUES ('" & Cells(i + 29, 1) & "')"
            .Open
        Next i
    End With
    
    MsgBox Timer - t

End Sub

Je la trouve un peu longue. Sachant que dans mon exemple réel, j'ai environ 1600 lignes sur 40 colonnes.

Je me demandais donc s'il existe une méthode plus performante plutôt que faire 1600 fois un INSERT INTO.

Merci par avance pour votre aide.
Cdt,
 
Re : Excel/Access : meilleures méthodes pour un INSERT INTO ?

Bonjour,

1 - Je te conseille de faire deux fonctions dans un module une pour la connection et l'autre pour la deconnexion à ta base. Ainsi tu auras juste à appeller la fonction qui va bien.

Je te conseille aussi de mettre ces fonctions dans un module seul, comme ca tu peux l'importer à volonté dans tes autres projets, tu as juste à modifier le nom de base.

Déclare y aussi tes variables recordset en public et ta variable chaine SQL. Comme ca zouuu tu te prends pas la têtes. Tu importes ton module dans un autre projet et tu n'a plus qu'à l'utiliser !

Voici un exemple. C'est pour du Mysql mais le principe est le même !

Code:
Option Private Module
Public gConnect As New ADODB.Connection
Public RecT As Recordset
Public RecT2 As Recordset
Public TmpSQL As String
Sub ConnectBDD()
With gConnect
   If .State = 0 Then
      .ConnectionString = "DRIVER={MySQL ODBC 3.51 Driver};" & _
                         " SERVER=ws_t2; DATABASE=test;" & _
                         " UID=xxxxx;PWD=xxxxx;" & _
                         " OPTION=16427"
      .Open
   End If
End With
Set RecT = New ADODB.Recordset
With RecT
   .CursorLocation = adUseClient
   .CursorType = adOpenForwardOnly
   .LockType = adLockReadOnly
End With
Set RecT2 = New ADODB.Recordset
With RecT2
   .CursorLocation = adUseClient
   .CursorType = adOpenForwardOnly
   .LockType = adLockReadOnly
End With
End Sub
Sub DisconnectBDD()
If gConnect.State = 1 Then gConnect.Close
If RecT.State = 1 Then RecT.Close
If RecT2.State = 1 Then RecT2.Close
Set gConnect = Nothing
Set RecT = Nothing
Set RecT2 = Nothing
End Sub

2 - Pour ta requêtes, tu peux mettre les champs les un après les autres, voici un exemple

Code:
TmpSQL = "INSERT INTO Prestation (CD_PROD,num_FI,num_destinataire,numformat,numsupport,nbexemplaire)"
TmpSQL = TmpSQL & " VALUES (" & LsvProd.SelectedItem.ListSubItems(1).Text & "," & Num_FI & "," & Txtnumdestinataire.Text & "," & ListFormatSupport.ListItems.Item(Boucle).Text & "," & ListFormatSupport.ListItems.Item(Boucle).ListSubItems(1).Text & "," &

@+

Creepy
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
1 K
Réponses
1
Affichages
2 K
Retour