Bonjour,
Je voudrais importer des données d'un tableau excel dans une table en utilisant du vba. Le programme permet de vérifier dans une table si la donnée existe (table historique), si la donnée n'existe pas je l'intègre dans une autre table (table machine), par contre si la donnée existe déja dans la table historique, je met juste a jour la date dans un des champs de ma table historique.
Mon programme plante lors de l'injection des données:
c'est a dire a cette ligne la:
sqlMach = "INSERT INTO Machines (['Hostname'],['Adresse_IP']) VALUES ('" & serveurs_sup.Fields("Hostname") & "','" & serveurs_sup.Fields("Adresse IP") & "');"
Pour info, je vous ai mis le code source du programme entier.
Merci d'avance pour votre aide.![]()
Un étudiant désespéré...![]()
Private Sub Commande5_Click()
'-----------------------
'Attachement de la table
'-----------------------
Dim sqlMach As String
Set BD = DBEngine.Workspaces(0).Databases(0)
Set TableLiee = BD.CreateTableDef("Imp_affe")
TableLiee.SourceTableName = "feuil1$"
TableLiee.Connect = "Excel 5.0;DATABASE=" & fichier
BD.TableDefs.Append TableLiee
BD.TableDefs.Refresh
'##################################################################
'##################################################################
' BY SEB
'##################################################################
'##################################################################
'Début Boucle sur tout les enr de Imp_affe (Excel)
Set serveurs_sup = BD.openrecordset("Imp_affe")
Do Until serveurs_sup.EOF
'################# Création du recordset de Histo #################
'Select histo.Hostname FROM historique AS histo WHERE histo.champ ="Afeediag" AND histo.Hostname = {recordset Excel_Temp en cour};
'##################################################################
sql = "Select histo.Hostname FROM historique AS histo WHERE histo.champ ='Afeediag' AND histo.Hostname = '" & serveurs_sup.Fields("Hostname") & "';"
Set histo = BD.openrecordset(sql)
'################ Création du recordset de Machine ################
'Select mach.Hostname FROM Machines AS mach WHERE mach.champ ="Afeediag" AND mach.Hostname = {recordset Excel_Temp en cour};
'##################################################################
' Si histo ne contient pas de valeur
If histo.RecordCount = 0 Then
'Select mach.Hostname FROM Machines_Afeediag AS mach WHERE mach.Hostname = 'BU73E111';
'Select mach.Hostname FROM Machines AS mach WHERE mach.Afeediag = true AND mach.Hostname = 'BU73E111';
sqlMach = "Select mach.Hostname FROM Machines AS mach WHERE mach.Afeediag = true AND mach.Hostname = '" & serveurs_sup.Fields("Hostname") & "';"
MsgBox (sqlMach)
Set machines = BD.openrecordset(sqlMach)
' Si mach contient une valeur
If machines.RecordCount <> 0 Then
'Update de cette element en fonction de la ligne tempo active
sqlMach = "UPDATE Machines SET Machines.Adresse_IP = '" & serveurs_sup.Fields("Adresse IP") & "' WHERE Machines.Hostname = '" & serveurs_sup.Fields("Hostname") & "' ;"
MsgBox (sqlMach)
machines.Close
'on enlève les mess d'avertissement
DoCmd.SetWarnings False
machines = BD.openrecordset(sqlMach)
'on remet les mess d'avertissement
DoCmd.SetWarnings True
MsgBox ("Update")
' Sinon
Else
'Creation d'un enregistrement dans Machine
sqlMach = "INSERT INTO Machines (['Hostname'],['Adresse_IP']) VALUES ('" & serveurs_sup.Fields("Hostname") & "','" & serveurs_sup.Fields("Adresse IP") & "');"
MsgBox (sqlMach)
DoCmd.SetWarnings False
Set machines = BD.openrecordset(sqlMach)
DoCmd.SetWarnings True
MsgBox ("Create")
' Fin Si Mach
End If
machines.Close
' Fin Si Histo
End If
histo.Close
'Element temp suivant
serveurs_sup.MoveNext
'Fin boucle
Loop
MsgBox ("Fin progression")
'Machines.Close
'##################################################################
'##################################################################
' END BY SEB
'##################################################################
'##################################################################
''-------------------------------
'' Gestion des serveurs supprimés
''-------------------------------
'sql = "SELECT Machines.Hostname,Machines.Afeediag FROM Machines LEFT JOIN Imp_affe ON Machines.Hostname = Imp_affe.hostname WHERE (((Machines.Afeediag)=True));"
'Set serveurs_sup = BD.openrecordset(sql)
'Set histo = BD.openrecordset("historique")
'Do Until serveurs_sup.EOF
' With histo
' .AddNew
' .Fields("hostname") = serveurs_sup.Hostname
' .Fields("champ") = "AfeeDiag"
' .Fields("date_maj") = date_fich
' .Fields("anc_valeur") = True
' .Fields("nou_valeur") = False
' .Update
' End With
' serveurs_sup.MoveNext
'Loop
'serveurs_sup.Close
'histo.Close
'
''---------------------------------
'' Gestion des ajouts de serveurs
''---------------------------------
'sql = "SELECT imp_affe.Hostname, imp_affe.OS, imp_affe.Afeediag FROM Machines INNER JOIN imp_affe ON Machines.Hostname = imp_affe.Hostname WHERE (((Machines.Afeediag)=False));"
'Set serveurs_sup = BD.openrecordset(sql)
'Set histo = BD.openrecordset("historique")
'Do Until serveurs_sup.EOF
' With histo
' .AddNew
' .Fields("hostname") = serveurs_sup.Hostname
' .Fields("champ") = "AfeeDiag"
' .Fields("date_maj") = date_fich
' .Fields("anc_valeur") = False
' .Fields("nou_valeur") = True
' .Update
' End With
' serveurs_sup.MoveNext
'Loop
'serveurs_sup.Close
'histo.Close
'
''---------------------------------
'' Gestion des creations de serveurs
''---------------------------------
'sql = "SELECT imp_affe.Hostname, imp_affe.OS, imp_affe.Afeediag FROM Machines RIGHT JOIN imp_affe ON Machines.Hostname = imp_affe.Hostname WHERE (((Machines.Hostname) Is Null));"
'Set serveurs_sup = BD.openrecordset(sql)
'Set histo = BD.openrecordset("historique")
'Set Machines = BD.openrecordset("machines")
'Do Until serveurs_sup.EOF
' With histo
' .AddNew
' .Fields("hostname") = serveurs_sup.Hostname
' .Fields("champ") = "Creation"
' .Fields("date_maj") = Null
' .Fields("anc_valeur") = Null
' .Fields("nou_valeur") = False
' .Update
' End With
' With Machines
' .AddNew
' .Fields("hostname") = serveurs_sup.Hostname
' .Fields("os") = serveurs_sup.OS
' .Fields("afeediag") = True
' .Update
' End With
' serveurs_sup.MoveNext
'Loop
'serveurs_sup.Close
'histo.Close
'Machines.Close
'---------------------------------
'---------------------------------
' suprimme attachement (la table Imp_affe)
' ferme fenetre
'---------------------------------
DoCmd.DeleteObject acTable, "Imp_affe"
'##############################################DoCmd.Close
End Sub
Partager