Arduino et visual studio

Mais oui biensûr, il faudrait que tu me donnes ton adresse pour que je t'envoie tes 100balles et ton mars

80 cela suffira et plutôt un bounty, je ne voudrais pas abuser... :blush:

Par contre avant d'aller plus loin, j'ai comme tu le disais, vu que je n'ai pas crée de thread dans mon programme, une latence avant que la sortie réagisse à ma commande quand le timer est lancé.
J'ai donc essayé ton programme mais il ne marche pas chez moi, j'ai repris des parties de ton code dans le mien mais c'est pareil, au lancement du timer l'application se fige et ne répond plus.

Pour la base si le type access est le plus pratique pour commencer no problem. A terme elle sera sur un serveur pour être consultée à distance

++

EDIT : Ton prg fonctionne, c'est moi qui bug :~

J'ai donc essayé ton programme mais il ne marche pas chez moi,.....

Quand tu l'ouvre dans vb et que tu l'essaie quelle erreur as -tu ?
Il faut mettre également le Prog dans l'Arduino car je l'ai modifié.

Je pense qu'il faut d'abord faire tourner mon code car chez moi il fonctionne, ensuite tu le modifie a ta sauce.
Car je déclare parfois des choses tout au début du programme et si tu ne les reprends pas cela ne fonctionnera pas.

Ou alors, poste ton code que j'essaie de voir si je remarque quelque chose de bizarre....

Je connais le VB depuis des années (d'abord Turbo Basic, VB3,4,6, VB.net) mais je t'avoue que les Thread sont très récents pour moi, je les ai découvert en commençant mes tests avec l'Arduino. Le code d'ailleurs est parfaitement expliqué dans le fichier PDF (qui n'est pas de moi ...) que j'ai joins a toutes mes archives.

Donc j'évite les acrobatie avec ce type de code car je ne le maitrise pas encore tout a fait :blush:

C'est pour cela que je t'envoie toujours des exemples qui fonctionnent chez moi pour que tu partes sur une base fonctionnelle, si ensuite ça ne marche plus tu es sur comme ça que cela vient de toi.

Tiens moi au courant
@+

...si ensuite ça ne marche plus tu es sur comme ça que cela vient de toi.

Cela vient de moi effectivement.
j'essaye de faire fonctionner tout ça avant de passer à la base de données.
Au passage on peut eviter que les modifications d'un prg vb soient automatiquement sauvegardées ?
C'est ce qui c'est passé avec ton code, j'ai du faire une boulette et hop sauvegardé ! :0

Alors, je viens de me rendre compte que la V3 de mon archive ne contenait pas le bon executable , sinon le projet, lui, est bon.

je te remets le link pour l'archive corrigée (pense a aussi mettre le prog dans l'Arduino). Désolé, hier j'ai voulu aller trop vite.... :blush:
http://perso.numericable.fr/tchonordiste/Arduino/VBetArduinoV3.zip

Pour la sauvegarde automatique, je t'avoue que je n'ai jamais regardé car chez moi cela ne le fait pas. :fearful:

++

Ca avance bien, grâce à ton exemple toutes les X secondes je relève la température du DALLAS 18B20 et je sauvegarde cette donnée dans la base en ajoutant la date et l'heure de la mesure.

J'essaye maintenant de lire les données de la base pour afficher un graphique de la T°.

++

Bonjour ,

Je trouve ça super. :slight_smile:
Tu progresses très bien dans ton projet.

Si je peux t'orienter, je te conseillerai de modifier (si tu ne l'a pas déjà fait) le type des champs Date et Heure et de les séparer.
Autrement dit, au lieu de créer des TEXT (x), en faire des DATETIME. Ceci pour pouvoir extraire les données en choisissant des dates a partir de calendrier

Pour extraire les données (dans la grille) au lieu de faire un :
SQL="SELECT * FROM maTable ORDER BY ID" où le recordset rassemblais tout les enregistrements disponibles dans la table "maTable"

Tu auras 2 variables :
DateRechercheDebut = "xx/xx/xxxx"
DateRechercherFin = "xx/xx/xxxx"
SQL="SELECT * FROM maTable WHERE LeChampDate >#" & DateRechercheDebut & "# AND LeChampDate <#" & DateRechercheFin & "# ORDER BY LeChampDate"

où le recordset rassemblera tout les enregistrements compris entre les 2 dates définies.
Ensuite tu extraits le champs qui contient les mesures pour tracer tes points sur le graphique.(avec une boucle)
DO
i+=1
maMesure(i)=rs.fields("ChampMesure")
rs.movenext
loop ....

C'est juste une orientation, tu es libres bien sûr de faire autrement.

Je reste a ta disposition pour plus d'amples explications si tu en avais besoin.

Pour la base de donnée, si tu as la possibilité d'avoir une table a ta disposition dans une base SQL d'un réseau d'entreprise, ce serait la même manière de procéder sauf pour la ligne de connexion a la base (pas difficile). Moi je préfère toujours mettre ma propre base sur le serveur avec mon programme comme ça je reste indépendant, cependant si beaucoup de personnes doivent accéder a cette base en même temps, il reste préférable de passer par SQL (qui gère efficacement les accès).

Pour le graphique par contre je ne suis pas le plus approprié pour te renseigner.
Si c'était moi, par fainéantise, je me servirai d'une feuille excel (necessite d'avoir excel bien sûr) dans laquelle j'aurai créé un graphique d'après un tableau, que je remplirai automatiquement avec VB et sauvegarderai sous un nom différent afin d'avoir toujours la feuille "Modèle" vierge.
Car le graphisme sous VB n'est pas mon point fort, mais d'autres ont peut être l'expérience dans ce domaine. C'est le moment d'apprendre :fearful:

Bonne continuation en tout cas... :wink:

@++

Bonjour,

Je n'arrive pas trop à faire marcher un graph qui irait chercher les infos de température dans la base de données.

J'essaye de tester cette méthode :

[urlhttp://www.vbfrance.com/tutoriaux/GESTION-DONNE%20ES-VISUAL-BASIC-2008-SQL-SERVER_1133.aspx][/url]

Par contre au début j'importe un élément existant car ma base est déjà créée.

Je te tient au courant si j'arrive à en titrer qq chose :wink:

++

EDIT : Une lien interessant aussi Didacticiel : liaison de données entre un graphique et une base de données | Microsoft Learn

Salut,

J'ai potassé un peu les graphiques comme précisé en mp.
En fait si tu veux que cela fonctionne, il faut tout adresser par code en dynamique et surtout ne pas lier ton graphique a ta base.

J'ai réussi a faire quelques petites choses intéressante, ce soir je modifierai le programme d'exemple pour qu'il affiche un graphique et qu'il le mette a jour automatiquement a chaque nouvelle donnée entrante. (je modifierai aussi les champs "Nom" et "Prenom" en "Date" et "Valeur".

@+

J'ai modifié comme précisé précédemment mon prog pour que tu t'amuses avec.
Il ne faut plus créer la base (j'ai disable le bouton), j'ai mis quelques valeur dedans.

A chaque fois que tu ajoutes une température et une date, la base est mise a jour ainsi que le graphique.
Biensur j'ai prit le graphique de base, on peut tout modifier a souhait.

le lien qui m'a permit de piger : Contrôle Chart voir surtout en bas (le code en dynamique)

L'archive de mon prog est ici : http://perso.numericable.fr/tchonordiste/Arduino/BaseDeDonneesV2.zip

Attention au début du prog j'ai du ajouter une bibliothèque : Imports........ (ne l'oublie pas si tu copie des morceaux de code)
Le reste de la boucle est dans le sub "RemplirGrille".

Il faut savoir qu'en SQL tu envoies les dates sous la forme MM/JJ/YYYY (a l'anglaise quoi) donc quand tu la récupère, faut la remettre a l'endroit (c'est fait dans le programme)

Dis moi si t'as des soucis.

@+

e lien qui m'a permit de piger : Contrôle Chart voir surtout en bas (le code en dynamique)

J'ai testé aussi mais à la différence de toi c'est que je ne suis pas arrivé à rafraichir le graph lors de la modif de la base. Il me falait relancer l'application. Je vais éplucher tout ça pour voir comment tu as fait.

Merci et à très bientôt... :wink:

EDIT : je l'avais peut être mis dans Form1_Load tout simplement au lieu de la sub RemplirGrille. Je n'ai plus mon code pour vérifier :~

La petite amélioration qu'il faudra peut-être faire c'est modifier la boucle pour qu'il affiche en graphique les 5 ou 10 dernières heures seulement des relevés pour éviter a terme d'obtenir un graphique gigantesque.

Et de prévoir un menu qui permettrai de récupérer des "archives" en sélectionnant 2 dates, lorsque le programme n'est pas en réception de données par exemple.

J'attends de voir ce que cela donne, c'est intéressant comme projet. :wink:

A bientôt
++

La petite amélioration qu'il faudra peut-être faire c'est modifier la boucle pour qu'il affiche en graphique les 5 ou 10 dernières heures seulement des relevés pour éviter a terme d'obtenir un graphique gigantesque.

J'ai remis tout ça en ordre, histoire d'avoir quelque chose de fonctionnel. Je vais effectivement modifier comme tu dis et après je poste quelque chose.

Sinon en prévision des améliorations XD , je me suis penché pour la première fois sur le code php et les bases SQL. J'ai installé WampServer et fait quelques essais concluants d'interrogation d'une base avec.
Je suppose qu'il faudra à terme créer une base sql et non access pour une interface avec le net (j'ai bon ?)

++

Oui tu as bon ! :smiley:

En fait sur le net souvent ce sont des bases du type mySql.
Accessible avec des pages en php.

Et administrable via phpAdmin.
Bien sûr cela dépend de la configuration de ton hébergeur. Mais en général ce sera toujours la même chose.
Le site du Zero publie des tutos intéressants sur ce sujet : http://www.siteduzero.com/tutoriel-3-14668-concevez-votre-site-web-avec-php-et-mysql.html

Mais la syntaxe SQL sera toujours plus ou moins identique. Seul changeront les modes de connexion et de gestion.

Bon amusement
++

Bonjour,

J'ai un petit problème : J'ai créé plusieurs feuilles pour mon projet.
Le problème est que si j'ai ouvert la connection à l'arduino sur la form1, je perds la connection dans ma form2.
J'ai essayé de mettre les variables en public pour garder les données (du moins je crois :~) mais cela ne marche pas.

C'est grave docteur ? :grin:

++

EDIT : Problème résolu

Bonsoir,

Tu vois un problème dans ce code ?
Suivant les dates que je mets il y a un plantage.

 Private Sub HistoButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles HistoButton.Click
        Dim SQL As String
        Dim con As ADODB.Connection
        Dim rs As ADODB.Recordset
        'Dim n As Integer
        Dim RecupDateDebut As Date  'Choix utilisateur date début du tracé
        Dim ConvDateDebut As String
        Dim RecupDateFin As Date    'Choix utilisateur date début du tracé
        Dim ConvDateFin As String
       

        RecupDateDebut = DateTimePicker1.Text
        ConvDateDebut = Format(RecupDateDebut, "MM/dd/yyyy")

        RecupDateFin = DateTimePicker2.Text
        ConvDateFin = Format(RecupDateFin, "MM/dd/yyyy")

        'Form1.Grid1.RowCount = 0
        'SQL = "SELECT * FROM Donnees WHERE LeChampDate >#" & ConvDateDebut & "# AND LeChampDate <#" & ConvDateFin & "# ORDER BY LeChampDate"

        'Ouverture de la base de donnée
        con = New ADODB.Connection
        con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & sBaseDeDonnees & ";" & "Persist Security Info=False"
        con.Open()

        'Contrôle si il ya des enregistrements dans la base
        SQL = "SELECT COUNT(*) FROM Donnees"
        rs = con.Execute(SQL)

        'Si oui il les affiche
        If rs.Fields(0).Value <> 0 Then
            SQL = "SELECT * FROM Donnees WHERE Jour >#" & ConvDateDebut & "# AND Jour <#" & ConvDateFin & "# ORDER BY Jour"

            rs = con.Execute(SQL)
            HistoChart.Series.Clear()
            HistoChart.Series.Add("T°")

            Do

                HistoChart.Series(0).Points.AddXY(rs.Fields("Jour").Value, rs.Fields("Température").Value)
                rs.MoveNext()

            Loop While rs.EOF = 0
        End If

        rs = Nothing
        con.Close()
        con = Nothing


    End Sub

Merci de ton aide

Bonsoir,
Désolé de me connecter que maintenant, mais je m'amusais avec.................l'Arduino biensûr !!

Le seul truc que je vois de bizarre, c'est ton champ qui s'appelle "Température", le "e" accent me dérange un peu.
Soit tu as vraiment créé un champ de ce nom (alors ce n'est pas conseillé) soit tu n'as pas mis d'accent et le fait de demander un champ qui n'existe pas crée une erreur.

Pour les dénomination de champs, il faut rester assez strict pour éviter les problèmes : ne pas mettre d'espace par exemple, eviter les mot anglais ou qui ressemble a des syntaxe existante (Date, par exemple). Cela pourrait être la source de problème.

Mais il faut modifier la ligne qui contrôle les enregistrements.
En effet : tu contrôle qu'il y a des enregistrements dans la base, mais il faut contrôler qu'il y ai ce que tu cherche sinon ça plante :

Donc au lieu de :

'Contrôle si il ya des enregistrements dans la base
SQL = "SELECT COUNT(*) FROM Donnees"
rs = con.Execute(SQL)

Il faut mettre:

SQL = "SELECT COUNT(*) FROM Donnees WHERE Jour >#" & ConvDateDebut & "# AND Jour <#" & ConvDateFin & "# ORDER BY Jour"
rs = con.Execute(SQL)

S'il trouve quelque chose alors tu l'affiches, sinon il sort de la boucle et pas d'erreur.

j'espère que mes explications ne sont pas trop brouillons...
Il faut savoir qu'a chaque requête sur ta base , il faut au préalable faire la même requête avec "COUNT(*)" pour être sûr qu'il y ait bien des enregistrements correspondants a ce que tu cherches.
Parce que si tu essayes de lire un recordset (rs) vide, cela génère une erreur. D'où l'obligation de contrôler avant d'afficher et donc il faut contrôler la même chose que ce que l'on va rechercher ! :fearful:

Normalement ensuite cela devrait être bon

@++

Je galère.
Cet affichage est sur une 2e feuille du projet, avec une nouvelle grille et un 2e graph, je ne sais pas si cela a son importance.

Pour faire marcher avec la requette "SQL = "SELECT * FROM Donnees ORDER by ID"" j'ai été obligé de supprimer "Grid2.RowCount = 0"
Alors que sur ma feuille1 cela fonctionne avec.

Par contre si je change les requettes par :

"SQL = "SELECT COUNT(*) FROM Donnees WHERE Jour >#" & ConvDateDebut & "# AND Jour <#" & ConvDateFin & "# ORDER BY Jour"

J'obtient maintenant ceci :

Voici le code complet de la Température.vb :

Imports System.Windows.Forms.DataVisualization.Charting
Public Class Température
    Dim sBaseDeDonnees As String = Application.StartupPath & "\Meteo.mdb" 'Ce sera le nom de notre base


    Private Sub Temperature_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        'initialisation de la grille
        Grid2.ColumnCount = 4

        Grid2.RowHeadersWidth = 5 'ça c'est la toute première colonne (on ne s'en sert pas)
        'Colonne 1
        Grid2.Columns(0).Width = 40
        Grid2.Columns(0).Name = "ID"
        'Colonne 2
        Grid2.Columns(1).Width = 100
        Grid2.Columns(1).Name = "Temperature"
        'Colonne 3
        Grid2.Columns(2).Width = 100
        Grid2.Columns(2).Name = "Jour"
        'Colonne 4
        Grid2.Columns(3).Width = 100
        Grid2.Columns(3).Name = "Heure"

        

    End Sub

    Private Sub HistoButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles HistoButton.Click

        Dim SQL As String
        Dim con As ADODB.Connection
        Dim rs As ADODB.Recordset
        Dim n As Integer
        Dim RecupDateDebut As Date  'Choix utilisateur date début du tracé
        Dim ConvDateDebut As String
        Dim RecupDateFin As Date    'Choix utilisateur date début du tracé
        Dim ConvDateFin As String

        

        RecupDateDebut = DateTimePicker1.Text
        ConvDateDebut = Format(RecupDateDebut, "MM/dd/yyyy")

        RecupDateFin = DateTimePicker2.Text
        ConvDateFin = Format(RecupDateFin, "MM/dd/yyyy")

        'J'ai enlevé ceci sinon cela ne fonctionne pas. Pourquoi ?
        'Grid2.RowCount = 0

        'Ouverture de la base de donnée
        con = New ADODB.Connection
        con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & sBaseDeDonnees & ";" & "Persist Security Info=False"
        con.Open()

        'Contrôle si il ya des enregistrements dans la base

        'Cette requette ne fonctionne pas
        'QL = "SELECT COUNT(*) FROM Donnees WHERE Jour >#" & ConvDateDebut & "# AND Jour <#" & ConvDateFin & "# ORDER BY Jour"

        'Celle çi est ok
        'SQL = "SELECT * FROM Donnees ORDER by ID"
        rs = con.Execute(SQL)
        rs.Fields.Refresh() 'on rafraichis les enregistrements
        
        'Si oui il les affiche
        If rs.Fields(0).Value <> 0 Then


            SQL = "SELECT COUNT(*) FROM Donnees WHERE Jour >#" & ConvDateDebut & "# AND Jour <#" & ConvDateFin & "# ORDER BY Jour"
            'SQL = "SELECT * FROM Donnees ORDER by ID"

            rs = con.Execute(SQL)
            Chart2.Series.Clear()
            Chart2.Series.Add("T°")

            Do
                n = Grid2.Rows.Add()
                Grid2.Rows.Item(n).Cells(0).Value = rs.Fields("ID").Value
                Grid2.Rows.Item(n).Cells(1).Value = rs.Fields("Temperature").Value
                Grid2.Rows.Item(n).Cells(2).Value = Format(rs.Fields("Jour").Value, "dd/MM/yyyy")
                Grid2.Rows.Item(n).Cells(3).Value = rs.Fields("Heure").Value

                'Graphique
                ' Chart1.Series(0).Points.AddXY(Format(rs.Fields("Jour").Value, "dd/MM/yyyy"), rs.Fields("Temperature").Value)

                Chart2.Series(0).Points.AddXY(rs.Fields("Heure").Value, rs.Fields("Temperature").Value)
                rs.MoveNext()

            Loop While rs.EOF = 0
        End If

        rs = Nothing
        con.Close()
        con = Nothing

        Grid2.ClearSelection()

    End Sub

    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged

    End Sub

    Private Sub DateTimePicker1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DateTimePicker1.ValueChanged

        TextBox1.Text = DateTimePicker1.Value

    End Sub
    Public Sub RemplirGrille()
        Dim SQL As String
        Dim con As ADODB.Connection
        Dim rs As ADODB.Recordset
        Dim n As Integer
        'On met a jour la grille (affichage des données, une manière parmis tant d'autre (graphique, liste, grille, combobox...)
        TextBox2.Text = "debut remplir grille"
        TextBox2.Text = "debut remplir grille2"
        'Grid2.RowCount = 0

        'Ouverture de la base de donnée
        '  con = New ADODB.Connection
        ' con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & sBaseDeDonnees & ";" & "Persist Security Info=False"
        '  con.Open()
        TextBox2.Text = "base donnee ouverte"
        'Contrôle si il ya des enregistrements dans la base
        SQL = "SELECT COUNT(*) FROM Donnees"
        rs = con.Execute(SQL)
        TextBox2.Text = "donnees trouvees"
        'Si oui il les affiche
        If rs.Fields(0).Value <> 0 Then

            SQL = "SELECT * FROM Donnees ORDER by ID"


            rs = con.Execute(SQL)
            Chart2.Series.Clear()
            Chart2.Series.Add("T°")

            Do
                n = Grid2.Rows.Add()
                Grid2.Rows.Item(n).Cells(0).Value = rs.Fields("ID").Value
                Grid2.Rows.Item(n).Cells(1).Value = rs.Fields("Temperature").Value
                Grid2.Rows.Item(n).Cells(2).Value = Format(rs.Fields("Jour").Value, "dd/MM/yyyy")
                Grid2.Rows.Item(n).Cells(3).Value = rs.Fields("Heure").Value

                'Graphique
                ' Chart1.Series(0).Points.AddXY(Format(rs.Fields("Jour").Value, "dd/MM/yyyy"), rs.Fields("Temperature").Value)

                Chart2.Series(0).Points.AddXY(rs.Fields("Heure").Value, rs.Fields("Temperature").Value)
                rs.MoveNext()

            Loop While rs.EOF = 0
        End If

        rs = Nothing
        con.Close()
        con = Nothing
        TextBox2.Text = "fin remplir grille"
        Grid2.ClearSelection()

    End Sub
End Class

Bonjour,

Normal que cela ne fonctionne ps ton code contient des erreurs.
Il faut bien distinguer ce que tu fait.

Tu veux extraire des données comprises entre 2 dates.

Alors il faut d'abord contrôler s'il existe bien des données entre ces 2 dates avec
SQL = "SELECT COUNT(*) FROM Donnees WHERE Jour >#" & ConvDateDebut & "# AND Jour <#" & ConvDateFin & "# ORDER BY Jour"
rs=con.execute(SQL)

Il va te repondre combien d'enregistrement il a trouvé, s'il n'y en a pas, tu sors de la boucle

if rs.fields(0).value=0 then exit sub 'tu sors

Dans le cas contraire, tu peux effectuer réellement la recherche et afficher les données :
SQL = "SELECT * FROM Donnees WHERE Jour >#" & ConvDateDebut & "# AND Jour <#" & ConvDateFin & "# ORDER BY Jour"
rs=con.execute(SQL)

Do
...
loop ...

Ne confond surtout pas l'instruction SQL:
1° SELECT COUNT(*)....... : te mets dans le rs (recodset) le nombre d’enregistrements trouvés correspondant a la requete
2° SELECT *....... : te mets dans le recordset tout les champs trouvés correspondant a la requete

c'est vraiment différent !

L'erreur que tu as "Aucun texte de commande...." c'est parceque tu n'as pas remplis correctement la variable SQL (commande)

Si on résume :
1° tu ouvre ta base :

con = New ADODB.Connection
con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & sBaseDeDonnees & ";" & "Persist Security Info=False"
con.Open()

2° Tu controle d'abord que ta requete contient des données (afin d'eviter des erreurs), par exemple :

SQL="SELECT COUNT(*) FROM Donnees WHERE Jour >#" & ConvDateDebut & "# AND Jour <#" & ConvDateFin & "# ORDER BY Jour

3°tu envoie la commande que tu as créé et tu mets le résultat dans un recordset

rs=con.execute(SQL)

4°Si le recordset te répond autre chose que 0, c'est que tu peux récupérer des données (ce n'est plus COUNT(*) mais * seulement)

If rs.fields(0).value=0 then exit sub
SQL="SELECT * FROM Donnees WHERE Jour >#" & ConvDateDebut & "# AND Jour <#" & ConvDateFin & "# ORDER BY Jour

5°tu envoie de noveau la commande que tu as créé et tu mets le résultat dans un recordset

rs=con.execute(SQL)

6° tu affiche les données (Do.....LOOP....)

Voilà, si vraiment tu n'y arrive pas, je te ferai une archive en exemple

@++

Bon courage :wink:

Humm... Ca bug toujours :disappointed_relieved: pourtant il me semble avoir bien compris

Quand le code s'arrette si je mets le curseur sur le 1er recorset il marque :

Le nouveau code :

Dim SQL As String
        Dim con As ADODB.Connection
        Dim rs As ADODB.Recordset
        Dim n As Integer
        Dim RecupDateDebut As Date  'Choix utilisateur date début du tracé
        Dim ConvDateDebut As String
        Dim RecupDateFin As Date    'Choix utilisateur date début du tracé
        Dim ConvDateFin As String

        RecupDateDebut = DateTimePicker1.Text
        ConvDateDebut = Format(RecupDateDebut, "MM/dd/yyyy")

        RecupDateFin = DateTimePicker2.Text
        ConvDateFin = Format(RecupDateFin, "MM/dd/yyyy")

        ' 1° tu ouvres ta base :
        con = New ADODB.Connection
        con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & sBaseDeDonnees & ";" & "Persist Security Info=False"
        con.Open()
      
        ' 2° Tu controle d'abord que ta requete contient des données
        ' (afin d'eviter des erreurs), par exemple :
        SQL = "SELECT COUNT(*) FROM Donnees WHERE Jour >#" & ConvDateDebut & "# AND Jour <#" & ConvDateFin & "# ORDER BY Jour"

        ' 3°tu envoie la commande que tu as créé et
        ' tu mets le résultat dans un recordset

        rs = con.Execute(SQL)


        ' 4°Si le recordset te répond autre chose que 0, c'est que
        ' tu peux récupérer des données (ce n'est plus COUNT(*) mais * seulement)

        If rs.Fields(0).Value = 0 Then Exit Sub
        SQL = "SELECT * FROM Donnees WHERE Jour >#" & ConvDateDebut & "# AND Jour <#" & ConvDateFin & "# ORDER BY Jour"

        ' 5°tu envoie de noveau la commande que tu as créé 
        ' et tu mets le résultat dans un recordset

        rs = con.Execute(SQL)

        'Chart2.Series.Clear()
        'Chart2.Series.Add("T°")

        Do
            n = Grid2.Rows.Add()
            Grid2.Rows.Item(n).Cells(0).Value = rs.Fields("ID").Value
            Grid2.Rows.Item(n).Cells(1).Value = rs.Fields("Temperature").Value
            Grid2.Rows.Item(n).Cells(2).Value = Format(rs.Fields("Jour").Value, "dd/MM/yyyy")
            Grid2.Rows.Item(n).Cells(3).Value = rs.Fields("Heure").Value

            'Graphique
            ' Chart1.Series(0).Points.AddXY(Format(rs.Fields("Jour").Value, "dd/MM/yyyy"), rs.Fields("Temperature").Value)

            '  Chart2.Series(0).Points.AddXY(rs.Fields("Heure").Value, rs.Fields("Temperature").Value)
            '  rs.MoveNext()

        Loop While rs.EOF = 0


        rs = Nothing
        con.Close()
        con = Nothing

        Grid2.ClearSelection()

:~ :~

C'est bizarre que tu ais tant de soucis...

Je vais refaire un exemple et te poster l'archive. Je ne garanti pas que je la poste ce soir mais demain sûr :grin:

@+