[Résolu] PB pour exporter des données excel dans une base de données access ....

Makina

XLDnaute Junior
Bonjour à tous,

J'ai créer un fichier qui me sert de template sous excel. Pour l'instant avec ma macro je le rempli, le sauvegarde et efface toutes les données pour recommencer (il s enregistre avec un nom different chaque fois)

Maintenant j'aimerais en plus avant de le fermer/vider exporter le contenu de certaines cellules pour remplir une ligne dans une base de données. J ai ecris ce code en m'appuyant sur des forums :

Code:
Dim cn As ADODB.Connection
    Dim Rst As ADODB.Recordset
    Dim cmdCommand As ADODB.Command

    ' Open the connection.
    Set cn = New ADODB.Connection
    With cn
        .ConnectionString = _
            "Provider=Microsoft.Jet.OLEDB.4.0"
        .Open "C:\Users\Portable\Desktop\cartonette\Base_cartonette.accdb"
    End With

    ' Set the command text.
    Set cmdCommand = New ADODB.Command
    Set cmdCommand.ActiveConnection = cn
    With cmdCommand
        .CommandText = "xxxxxxx"
        .CommandType = adCmdText
        .Execute
    End With

    ' Open the recordset.
    Set Rst = New ADODB.Recordset
    Set Rst.ActiveConnection = cn
        Rst.Open cmdCommand

Problème, dès que je compile il me dit "Type defini par l'utilisateur non défini" en poitnant la premiere ligne : Dim cn As ADODB.Connection.

Je pense pourtant avoir activer les bon activeX depuis le menu outils/references de VB .

Merci d'avance pour vos réponses.

Cordialement !
 
Dernière édition:

Makina

XLDnaute Junior
Re : Exporter des données excel dans une base de données access ....

Re,

Je cherche désepérement une réponse. J'ai fait un nouveau code :
Code:
Sub ajoutdb()
    
    Dim cn As ADODB.Connection


    ' Open the connection.
    Set cn = New ADODB.Connection
    
    With cn
        .ConnectionString = _
            "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Portable\Desktop\cartonette\Base_cartonette.accdb;Persist Security Info=False"
        .Open '"C:\Users\Portable\Desktop\cartonette\Base_cartonette.accdb"
    End With
    
    
    With ActiveWorkbook.Sheets(1)
    p = 1
    Do Until Cells(p, 2) = ""
        p = p + 1
    Loop
    Cells(p, 2) = A
    Cells(p, 3) = b
    Cells(p, 4) = c
    Cells(p, 5) = Workbooks("Cartonette.xlsm").Sheets("Feuil1").Cells(2, 22)
    Cells(p, 6) = Workbooks("Cartonette.xlsm").Sheets("Feuil1").Cells(18, 5)
    Cells(p, 7) = Workbooks("Cartonette.xlsm").Sheets("Feuil1").Cells(5, 12)
    Cells(p, 8) = Workbooks("Cartonette.xlsm").Sheets("Feuil1").Cells(5, 3)
    End With
    
    ' Close the connections and clean up.
    cn.Close
    Set cn = Nothing

End Sub

Maintenant plus de bug, mais rien ne s ecrit dans mon fichier acces ....
Help please.

Merci
 

tototiti2008

XLDnaute Barbatruc
Re : PB pour exporter des données excel dans une base de données access ....

Bonjour Makina,

Les messages privés sont censés être ... privés
Je n'ai pas énormément de temps aujourd'hui, donc je risque d'être là en pointillés
Pourquoi ton code ne contient-il pas de SQL avec la commande INSERT pour écrire dans ta table Access ?
Sans le SQL INSERT, il ne pourra pas écrire dans la table
 

Makina

XLDnaute Junior
Re : PB pour exporter des données excel dans une base de données access ....

Bonjour tototiti2008,

J ai completement changé mon code par rapport à mes 2 premiers posts, mon code maintenant est une copie de l'exemple que tu avais donné dans un autre topic en 2010 :
Code:
Sub ConnectionBase()
Dim Cnx As ADODB.Connection
Set Cnx = New ADODB.Connection
On Error GoTo Err1
Cnx.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Portable\Desktop\cartonette\Base_cartonette.mdb;Persist Security Info=False"
Exit Sub
Err1:
DeconnexionBase
End Sub

Sub DeconnexionBase()
On Error Resume Next
Cnx.Close
End Sub

Sub ajoutdb()
Dim NcmdT As String, NcmdE As String, nbrobjcmdag As String, SQLText As String
Dim Nag As String, nbrobjag As String, Nom As String, NomF As String

m = 9
    For m = 9 To 17
        If Cells(m, 1) <> "" Then
    
        Nag = Range("V2").Value
        nbrobjag = Range("E18").Value
        Nom = Range("L5").Value
        NomF = Range("C5").Value
        
        NcmdT = Workbooks("Cartonette.xlsm").Sheets("Feuil1").Cells(m, 1).Value
        NcmdE = Workbooks("Cartonette.xlsm").Sheets("Feuil1").Cells(m, 2).Value
        nbrobjcmdag = Workbooks("Cartonette.xlsm").Sheets("Feuil1").Cells(m, 23).Value
    
        SQLText = "INSERT INTO Donnees (N° de commande Technifen, N° de commande easywin, Nombre d'objet de la commande sur l'agrès, N° de l'agrès, Nombre d'objet sur l'agrès, Nom client Technifen et adresse, Nom client final) VALUES ('" & NcmdT & "', '" & NcmdE & "', '" & nbrobjcmdag & "', '" & Nag & "', '" & nbrobjag & "', '" & Nom & "', '" & NomF & "')"
        ConnectionBase
        Cnx.Execute SQLText
        DeconnexionBase
        MsgBox "ligne ajoutée"
        End If
        
    Next m
    
End Sub

Il y a une ligne insert dans celui ci ! mais dès que la macro arrive sur exit sub de Sub ConnectionBase() mon fichier temp .laccdb se ferme .... et du coup erreur vu que plus rien est ouvert !

Merci de ton aide, et si tu n as pas le temps j'espere que quelqun d autre pourra m'aider, c est deja sympa de repondre.

A++
 

tototiti2008

XLDnaute Barbatruc
Re : PB pour exporter des données excel dans une base de données access ....

Re,

Déclare ta connexion comme variable publique (c'est à dure au-dessus des Sub) car tu fais appel à elle dans plusieurs procédures
Ceci dit, il m'étonnerais que Access apprécie les noms de champs avec des espaces dans le SQL, il faudra surement les entourer de crochets

Peut-être un truc comme ça

Code:
Dim Cnx As ADODB.Connection

Sub ConnectionBase()
Set Cnx = New ADODB.Connection
On Error GoTo Err1
Cnx.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data  Source=C:\Users\Portable\Desktop\cartonette\Base_cartonette.mdb;Persist  Security Info=False"
Exit Sub
Err1:
DeconnexionBase
End Sub

Sub DeconnexionBase()
On Error Resume Next
Cnx.Close
End Sub

Sub ajoutdb()
Dim NcmdT As String, NcmdE As String, nbrobjcmdag As String, SQLText As String
Dim Nag As String, nbrobjag As String, Nom As String, NomF As String

m = 9
    For m = 9 To 17
        If Cells(m, 1) <> "" Then
    
        Nag = Range("V2").Value
        nbrobjag = Range("E18").Value
        Nom = Range("L5").Value
        NomF = Range("C5").Value
        
        NcmdT = Workbooks("Cartonette.xlsm").Sheets("Feuil1").Cells(m, 1).Value
        NcmdE = Workbooks("Cartonette.xlsm").Sheets("Feuil1").Cells(m, 2).Value
        nbrobjcmdag = Workbooks("Cartonette.xlsm").Sheets("Feuil1").Cells(m, 23).Value
    
        SQLText = "INSERT INTO Donnees ([N° de commande Technifen], [N° de  commande easywin], [Nombre d'objet de la commande sur l'agrès], [N° de  l'agrès], [Nombre d'objet sur l'agrès], [Nom client Technifen et adresse],  [Nom client final]) VALUES ('" & NcmdT & "', '" & NcmdE &  "', '" & nbrobjcmdag & "', '" & Nag & "', '" &  nbrobjag & "', '" & Nom & "', '" & NomF & "')"
        ConnectionBase
        Cnx.Execute SQLText
        DeconnexionBase
        MsgBox "ligne ajoutée"
        End If
        
    Next m
    
End Sub

Edit : à noter que si les champs "nombre de ..." sont vraiment des nombres (de type numérique dans Access), il vaudrait mieux enlever les apostrophes autour de ces champs dans la commande INSERT
 
Dernière édition:

Makina

XLDnaute Junior
Re : PB pour exporter des données excel dans une base de données access ....

Alors la .... C est meme plus un Merci que je te dois tototiti2008 ! ! ! Deux jour que je bloquais la dessus et ca fonctionne parfaitement ! ! Merci d'avoir utilisé un peu de ton temps pour m'aider !

@+
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 196
Messages
2 086 101
Membres
103 116
dernier inscrit
kutobi87