Bonjour,

Je fais appel à ce forum pour un problème qui me bloque depuis plusieurs semaines :
C'est la première fois que développe une application de gestion de données en utilisant OleDB pour gérer des contacts pour une association (pas trop le choix car j'ai + de 3000 lignes de contacts à gérer).

Ce que je cherche à faire, c'est :
- de charger les données Excel dans l'appli,
- de pouvoir faire des modifs directement par le datagridview,
- puis de sauvegarder les modifications faites dans le datagridview dans le fichier Excel.

Pour l'instant, et malgré beaucoup de temps passé , voici où j'en suis :

Chargement des données Excel dans le datagridview (en datasource) => OK
Code : 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
 
	Private Sub ReadExcelFile(DGV As DataGridView, cheminXL As String)
		ds = New DataSet()
		If System.IO.Path.GetExtension(XLfilepath) = "xls" Then _
			connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & cheminXL & "; Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;""" _
		Else connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & cheminXL & "; Extended Properties=""Excel 12.0 XML;HDR=YES;IMEX=1;"""
		Using conn As OleDbConnection = New OleDbConnection(connectionString)
			conn.Open()
			Dim cmd As OleDbCommand = New OleDbCommand()
			cmd.Connection = conn
 
			'Get all Sheets in Excel File
			Dim dtSheets As DataTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing)
 
			'Loop through all Sheets to get data
			For Each dr As DataRow In dtSheets.Rows
				Dim sheetName As String = dr("TABLE_NAME").ToString()
				If Not sheetName.EndsWith("$") Then Continue For
				'Get all rows from the Sheet
				cmd.CommandText = "SELECT * FROM [" & sheetName & "]"
				Dim dt As DataTable = New DataTable()
				dt.TableName = sheetName
				da = New OleDbDataAdapter(cmd)
				Dim cb = New OleDbCommandBuilder(da)
				da.Fill(dt)
				ds.Tables.Add(dt)
			Next
 
			cmd = Nothing
			conn.Close()
		End Using
 
	End Sub
=> Par contre, pas moyen de sauvegarder les modifs que j'apporte à la datagridview !!

Voici le code actuel que j'utilise :
Code : 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
 
	Sub Button2Click(sender As Object, e As EventArgs) Handles button2.Click 'boutn sauvegarde
		connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & XLfilepath & "; Extended Properties=""Excel 12.0 XML;HDR=YES;IMEX=1;"""
		conn = New OleDbConnection(connectionString)
		conn.Open()
 
		ds.Tables(0).PrimaryKey = New DataColumn() {ds.Tables(0).Columns("id")}
		da = New OleDbDataAdapter("Select * from [contacts$]", conn)   'contacts est le nom de l'onglet excel, et donc de la table
		Dim cb = New OleDbCommandBuilder(da)
		cb.QuotePrefix = "["
		cb.QuoteSuffix = "]"
		da.Update(ds.Tables(0))
		Me.ds.AcceptChanges()
 
		conn.Close()
	End Sub
Au final, ce code semble fonctionner (dataset rempli, table remplie avec le bon nom, etc...), mais il bloque à chaque fois sur :
"La génération SQL dynamique de UpdateCommand n'est pas prise en charge pour un SelectCommand qui ne retourne pas des informations de colonne clé."

Avez-vous une idée, car j'ai épuisé toutes les solutions que j'ai pu trouver...