The reason of your error is probably the presence of a single quote in one or more of your strings values. Concatenated together with the rest of the sql text, the single quote breaks the sql syntax.
As suggested you should use a parameterized query where this problem is handled for you by the framework code
Dim sql As String = "select * from traitementprix where ( region =@rgn and " & _
"Datvente = @dt and speculation = @spec)"
dscmd = New SqlDataAdapter(sql, cnn)
dscmd.SelectCommand.Parameters.AddWithValue("@rgn", _region)
dscmd.SelectCommand.Parameters.AddWithValue("@dt", _datvente)
dscmd.SelectCommand.Parameters.AddWithValue("@spec", _speculation)
ds = New DataSet()
dscmd.Fill(ds, "traitementprix")
An important thing to note: I don't know the exact data type for fields listed above. When you use the AddWithValue method you need to pass exactly a value of the corresponding datatype expected by the field. So, for example, if the field region
is a number and the variable _region is a string, then a conversion is required
dscmd.SelectCommand.Parameters.AddWithValue("@rgn", Convert.ToInt32(_region))