SOUSTRACTION DE DEUX DATE importé d'une colonne

Bonjour a tous,

je suis tout nouveau ici ! est je voulais avoir votre avis sur une problématique sur un projet sur le quel je travail! le projet consiste a faire une communication entre une ARDUINO et un fichier excel par cable usb qui stock les information d'un capteur avec la date de mesure ! pour cela j'utilise les fonction " DATE" et " TIME" qui sont envoyé directement par l'arduino en tant que caractère et qui sont transformé en données " DATETIME" pour avoir la date et l'heure de la mesure sur des colonne ! jusqu’à la tout ça je l'ai fait j'ai mes trois colonne " DATE" "HEURE" "MESURE" !

la seconde partie consiste a analysé ces trois colonne pour détecté une anomalie qui consiste au fait qu'il n'y a pas de changement de la valeur de la mesure avec la temps qui passe, et par la suite afficher un messagbox demandant a l'utilisateur de commenter la situation! et donc pour ça j' ai besoin de faire des soustraction entre deux " HEURE" différent pour avoir un intervalle de 10 ou 20 seconde par exemple dans une condition et a l’intérieure de la condition je ferai tout bêtement une soustraction entre les deux valeurs des mesure du capteur correspondant au " HEURE" choisie ! ci dessous une capture d’écrans des colonnes en question ( ne prettez pas attention a la colonne"index" ! voila pouvez vous m'aidez pour faire le code de la soustraction des "HEURE" pour exploité le résulta en seconde ? merci.

capture

Bonsoir,

La différence se fait simplement par soustraction :

différence = (Date2 - Date1) + (Temps2 - Temps1)

Date2-Date1 sera généralement = 0 mais tu dois en tenir compte pour les cas où tu te trouveras à cheval...

Pour avoir cette durée en secondes, tu applique la fonction SECONDE ou bien tu multiplies la différence par 86400.

Cordialement.

Merci pour ta réponse !

Par contre Quel serait le type des variable date 1 date 2 temps 1 temps parce que c'est des Valeurs directement prit des cellules et donc c'est des caractères il ne faut pas les transformer avant?

Cordialement,

Jaja

Ton image ne montre pas le type de données...

Supprime le centrage : si les valeurs des cellules se cadrent à gauche, c'est du texte, si elles se cadrent à droite, c'est des nombres.

Si texte, il faut convertir. Si nombres il faut savoir comment tu opères.

Oui, effectivement c'est de nombre que je manipule ! dans la colonne " HEURE" et du texte dans la colone " DATE", j'ai fait ce petit code pour faire un teste ! c'e code ce trouve sur la feuille en question mais y'a pas de résultat !

  

Private Sub Worksheet_SelectionChange(ByVal Target As Range) ' dans le cas ou une une cellule change de valeur

   If Target.Count = 1 And Not Application.Intersect(Target, Range("$A$12:$A$27")) Is Nothing Then

     For i = 12 To 20

     difference = (Cells(i, 2).Value) - (Cells(i + 1, 2).Value) ' soustraction de la n -  n+1
     resultat = Range("B12").Value - Range("B15").Value ' autre test soutraction directe de deux cellule
     MsgBox difference
     MsgBox resultat

     Next
   End If

End Sub

JAJA en fait des bêtises hein !!!

Bonjour,

Tu as sans doute confondu Change et SelectionChange...

Je ne comprends pas pourquoi .Count=1 alors que tu traites en masse ni pourquoi 12 à 27 d'un côté et 12 à 20 de l'autre.

Tes valeurs étant croissantes, tu établis des différences négatives...

Une procédure normale serait peut-être plus adaptée pour extraire les durées lorsque la valeur du capteur ne varie pas, entre les bornes correspondant à cette valeur.

Il faudrait mettre un fichier pour y voir de près.

salut MFerrand ! désolé pour le délai de réponse j'étais entrain de revoir mon code avec l'ajour d'autre fonctions !

alors j'ai eu le temps de tout revoir , on reste toujours sur le même principe ! j'ai 4 colonne ! "date" "heure" "index" et "capteur" , mon programme doit parcourir les quatre colonne analysé la valeurs de la colonne capteur! dans une grand condition "si le cellule selectionné et vide alors on ne fait rien " et dans le cas contraire, si il voit que la cellule n = cellule n+1 alors il compte le nombre de seconde perdu a partir de colonne "heure" en faisons une soustraction des cellule (n+1) - n et cela ce fait en continu jusqu’à ce qu'on atteint 40 seconde de retard ! et la un messagebox apparaît pour donné l'alerte et juste aprés je réinitialise les variable de calcule pour qui refait le compte.

comme je l'ai expliqué précédemment, j’acquière la valeur du capteur avec une arduino qui communique en serie, du coup sa sert a rien que j'envoi mon fichier puisque ca ne vas pas ce compiler, mes ci-dessous mon code dans la feuille en question.

alors pour l'instant je suis arrivé a faire les soustraction de date traitement de données avec accumulation du temps d'erreur, et quand mon message box apparaît c'est la ou ca bug un peu , car qu'on j'appui sur "ok" la fenêtre réapparaît un certain nombre de fois, je me suis dis que le problème vient du fait que si dans ma grand condition il y'a un bemole, puisque l'acquisition des donnes ce fait en temps réel, on arrive a voir les cellule ce remplir en directe, et donc peut être le programme dépasse les valeur saisie et ce retrouve dans les cellule vide, du que dans la grande condition j'ai ecris que il devrais attendre tant que la cellule est vide avec une boucle while mais ca marche pas et ca bug!

donc voila ! je t'envoi mon programme ainsi qu'un tableau excel juste pour que tu puisse le voir et essai sur lui sans avoir de matériel

j'utilise worksheetchange pour fire appelle a la fonction chaque fois qu'il y'a une cellule qui change, pourrais tu m'aider a trouvé le problème qui faite que le message box s'affiche sans arret ?? ( j'ai mis exprès beaucoup de 0 dans la colonne capteur pour que tu puisse voir le problème)

remarque:

  • les boucles for fonctionne bel est bien !
  • l'intervale de temps entre chaque mesure est de 20s! donc il faut 20 mesure pareil pour afficher le msgbox! mais le vrai problème réside dans mes boucle peut être
Private Sub Worksheet_Change(ByVal Target As Range)

    Dim DerniereLigne As Long
    Dim ligne As Long, col As Long
    Dim resultat As String
    Dim date_reel As String
    Dim heure As String
    Dim heure_2 As String
    Dim temps_perdu As Date
    Dim diff As Date
    Dim index As String
    Dim mesure As String
    Dim le_chiffre As Long

    heure = "00:00:00 "
    heure_2 = "00:00:00 "
    diff = CDate("00:00:00 ")

    DerniereLigne = Range("A11").SpecialCells(xlCellTypeLastCell).Row
  '-------------------------------------- parcour du tableau acquisition ------------------------------------------------------------

    'bien on a maintenant le nombre de lignes  renseignée dans le sheet
    'maintenant on va boucler sur toute les lignes et a chaque ligne boucler sur toute les colonne de la ligne qui sont renseignée

    For ligne = 1 To DerniereLigne

      For col = 1 To 4

      '------------------ verification de la presence de valeur dans la cellule avant tout   ----------------------
        If Cells(ligne, col) <> "" And Cells(ligne + 1, col) <> "" Then

            '-------------------------------------- Traitement cellule DATE ------------------------------------------------------------
            If col = 1 Then
               date_reel = Cells(ligne, col)

           '-------------------------------------- Traitement cellule HEURE ------------------------------------------------------------
            ElseIf col = 2 Then
                  heure = Cells(ligne, col)
                   heure_2 = Cells(ligne + 1, col)

            '-------------------------------------- Traitement cellule INDEX ------------------------------------------------------------
            ElseIf col = 3 Then
                   index = Cells(ligne, col)

             '-------------------------------------- Traitement cellule capteur ------------------------------------------------------------
            ElseIf col = 4 Then
                   mesure = Cells(ligne, col)

                   '-------------------------------------- processus de traitement ------------------------------------------------------------

                   If mesure <> Cells(ligne + 1, col) Then  'on compare la valeur du capteurau moment n et n+1 si ils sont different
                          temps_perdu = CDate("00:00:00 ")

                   ElseIf mesure = Cells(ligne + 1, col) Then 'on compare la valeur du capteur au moment n et n+1 si ils sont egaux
                          diff = CDate(heure_2) - CDate(heure)
                          temps_perdu = CDate(temps_perdu) + CDate(diff)

                          If temps_perdu >= "00:00:40" Then ' on verifie si le retard cumulé a depassé 40seconde
                              ' MsgBox temps_perdu
                              avertissement.Show
                               temps_perdu = CDate("00:00:00 ")

                               ' resultat = InputBox("commenter le problème survenu !", "commentaire operateur")
                          End If

                   End If

            '-------------------------------------  FIN TRAITEMENT CELLULE---------------------------------------------
            End If

      Else
                  heure = "00:00:00 "
                  heure_2 = "00:00:00 "
                  diff = CDate("00:00:00 ")
                  'col = col - 1

      End If

     Next col

    Next ligne

End Sub
16acquisition.xlsm (19.11 Ko)
Rechercher des sujets similaires à "soustraction deux date importe colonne"