Export Excel vers Access à l'aide de VBA

Export Excel vers Access à l'aide de VBA - VB/VBA/VBS - Programmation

Marsh Posté le 17-06-2009 à 17:05:23    


 
Bonjour,
Je vous expose brièvement mon problème.
Je dois exporter un fichier excel dans un table de ma base Access.
Dans ce fichier excel, je dois exporter 3 feuilles.
J'ai fait une première boucle qui permet de parcourir l'ensemble des feuilles.
A l'intérieur, il y a une autre boucle qui permet de parcourir les lignes de la feuille excel courante.
Quand je compile le code, ça marche très bien pour la première ligne, mais dès qu'il aurait fini de traiter toutes les lignes de la première feuille, il m'affiche le message d'erreur suivant :
'Un index ou une cle primaire ne peut pas contenir une valeur nulle'
L'erreur intervient sur le .Update, à mon avis lorsqu'il crée le dernier enregistrement corrspondant à la dernière ligne, comme il y a un rs.update après, il pointe sur le recordset suivant ( l'a t'il créé? ), et on ne met rien dedans, dans ce cas là c'est normal d'avoir cette erreur. Il faut peut être désactiver juste le dernier rs.update, et ça j'arrive pas à le faire, déjà je ne sais pas si on peut le faire, puis si l'erreur provient vraiment de là.
Je vous remercie d'avance pour votre aide.
 
Voici mon code
 
 

Citation :


Function ExportRabih() As Integer
 
 
 
Dim Db As DAO.Database
Dim rs As DAO.Recordset
 
 
Dim appExcel As Object
Dim Xlwb As Object
Dim ws As Object
 
 
Dim deb As Integer
Dim var As Integer
Dim sh As Integer
Dim str As String
Dim Comp As String
Dim Dom As String
Dim temp As Integer
 
MsgBox "Bonjour"
Set appExcel = CreateObject("Excel.Application" )
appExcel.Visible = True
Set Xlwb = appExcel.Workbooks.Open("C:\Users\rmahfouz\Desktop\stage\Docs Laurent\TechnicienSysteme.xlsx" )
'Set ws = Xlwb.Sheets(3)
'MsgBox ws.Cells(3, 1)
 
Set Db = CurrentDb
'MsgBox ws.Cells(1, 1)
 
Set rs = Db.OpenRecordset("Activites", dbOpenTable)
'MsgBox rs.Fields("Activite" ).Value = ws.Cells(3, 2)
 
Do While (sh <= 5)
sh = 3
MsgBox sh
 
 
Select Case sh
    Case 3
        Comp = "Compétences techniques"
        Set ws = Xlwb.Sheets(sh)
        MsgBox ws.Cells(3, 1)
    Case 4
        Comp = "Compétences Métiers"
        Set ws = Xlwb.Sheets(sh)
        MsgBox ws.Cells(3, 1)
    Case 5
        Comp = "Aptitudes Comportementales"
        Set ws = Xlwb.Sheets(sh)
        MsgBox ws.Cells(3, 1)
End Select
 
deb = 3
temp = deb
 
'Recupère le domaine et avance vers la case contenant le domaine suivant
'Dom = ws.Cells(deb, 1)
'MsgBox Dom
 
Dom = ws.Cells(deb, 1)
Do While Not (IsNull(ws.Cells(deb, 2)))
 
MsgBox deb
MsgBox ws.Cells(deb, 2)
 
With rs
.AddNew
.Fields("Activite" ).Value = ws.Cells(deb, 2)
.Fields("Domaine" ).Value = ws.Cells(deb, 1)
.Fields("Métier" ).Value = "Techniciens Systèmes"
.Fields("NoteCible" ).Value = ws.Cells(deb, 6)
.Fields("TypeCompetences" ) = Comp
.Update
End With
 
deb = deb + 1
 
 
Loop
 
sh = sh + 1
Loop
 
 
 
rs.Close
Set rs = Nothing
Db.Close
Set Db = Nothing
End Function

Reply

Marsh Posté le 17-06-2009 à 17:05:23   

Reply

Marsh Posté le 18-06-2009 à 08:50:29    

Bonjour,
 
Plutôt que de vouloir exporter, mieux vaut dans ce cas importer. Je m'explique: il faut aller dans Access où il y a dans le menu une fonction "import" très simple à utiliser. On peut aussi utiliser "lier..." si le fichier Excel a vocation à être modifié. S'il faut rajouter les lignes d'Excel dans une table Access, le mieux est d'avoir une table dans access "Excel_source" liée au fichier Excel, puis une requête SQL "INSERT INTO"

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed