Correction d'erreur base de données + incrémentation de lign

Bonjour,

Je dois traiter des données météo relevées toutes les 10 minutes des 8 dernières années, ce qui fait énormément de données.

Mon problème est que cela peut arriver qu'il n'est pas de relevé de données durant 1 ou 2 voir 3 ou 4 heures, la valeur de l'heure passe donc de 04:00:00 a 07:00:00 directement par exemple.

Ce que je souhaiterai faire c'est lorsqu'il manque des données: ajouter une ligne ou plusieurs selon la quantité de données qu'il manque en incrémentant l'heure et en copiant la donnée météo précédente.

Je voudrais que cela se fasse automatiquement.

Si quelqu'un peut m'aider, mon fichier est en copie.

Merci beaucoup

Bonjour,

Allège ton fichier à moins de 300 Ko pour joindre au message.

Voila le fichier, je pensais l'avoir mi dans le précédent mail.

Désolé.

5donnees-meteo.xlsx (272.50 Ko)

Bonjour,

Une solution :

Sub galopin()
Dim i&, ii&, k&, kk&, HF As Date, HD As Date, Diff As Date
Application.ScreenUpdating = False
ii = [A1].CurrentRegion.Rows.Count
For i = ii To 3 Step -1
   k = Cells(i, 2).Value * 24 - Cells(i - 1, 2).Value * 24
   If k > 1 Then
      For kk = 1 To k - 1
         Rows(i).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
         Cells(i, 2).Value = Cells(i - 1, 2).Value: Cells(i, 3).Value = Cells(i - 1, 3).Value
      Next
   End If
Next
End Sub

A+

Merci beaucoup Galopin,

Ça marche vraiment bien, il manque juste un petit point pour que ce soit parfait, c'est que lorsque la ou les lignes sont ajoutées, la valeur de l'humidité précédente est bien copiée, mais la date ne s’incrémente pas, elle est simplement copiée. Mais ce n'est pas un problème en réalité.

Par contre, j’étudie un autre format de donnée. Il s'agit de données météo qui sont relevées toutes les 10 minutes, le format est un peu différent du précédent:

. format précédent (données horaires) : 00:00:00

01:00:00

02:00:00

. nouveau format (données toutes les 10 minutes): 00:00:00

00:10:00

00:20:00

Avec le nouveau format les erreurs ne sont pas corrigées. J'imagine qu'il doit avoir un petit truc a changer dans la macro, mais j'ai un niveau proche du néant en VBA.

A l'aide

PS: j'ai mi en copie le fichier avec le nouveau format.

bonsoir,

A tester...

Sub galopin2()
Dim i&, ii&, k%, kk%
Application.ScreenUpdating = False
ii = [A1].CurrentRegion.Rows.Count
For i = ii To 3 Step -1
If Cells(i, 2).Value = Cells(i - 1, 2).Value Then
   MsgBox "Données incohérentes !"
   End
End If
Next
For i = ii To 3 Step -1
   k = CInt((Cells(i, 2).Value - Cells(i - 1, 2).Value) * 1440)
   If k > 10 Then
      For kk = 10 To k - 10 Step 10
         Rows(i).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
         Cells(i, 2).Value = Cells(i - 1, 2).Value
         Cells(i, 3).Value = Cells(i - 1, 3).Value
         Cells(i, 4).Value = Cells(i - 1, 4).Value
      Next
   End If
Next
End Sub

Attention cette macro ne doit être lancé qu'une seule fois ! Sinon elle s'interrompt avec un message d'erreur.

[Nota] Il faudrait sans doute modifier aussi la première macro pour empêcher aussi un double traitement.

En fait il s'agit de rajouter ( après ii = [A1].CurrentRegion.Rows.Count ) :

For i = ii To 3 Step -1
If Cells(i, 2).Value = Cells(i - 1, 2).Value Then
   MsgBox "Données incohérentes !"
   End
End If
Next

A+

Merci encore Galopin,

Les deux fonctionnent, mais parce que encore un dernier "mais", lorsqu'il manque une valeur entre 23:00:00 et 01:00:00 (qu'il manque donc le 00:00:00), l'erreur n'est pas corrigée. J'imagine qu'il y a une ligne de code a rajouter pour ce cas précis.

Pour le fichier de relevés toutes les 10 minutes, l'erreur ce produit également lorsqu'il manque une valeur après le 23:50:00 (qu'il manque donc le 00:00:00 également).

Merci par avance, je pense que c'est le dernier beug, après quoi tu m'auras fait gagner environ 1 a 2 ans de recherche d'erreur et ça je t'en remercie infiniment.

bonjour,

J'avais en effet un peu perdu de vue ce détail !

Je dois pas être loin du compte maintenant.

Option Explicit
Sub galopin()
Dim i&, ii&, k&, kk&, x%
Application.ScreenUpdating = False
ii = [A1].CurrentRegion.Rows.Count
For i = ii To 3 Step -1
If Cells(i, 2).Value = Cells(i - 1, 2).Value Then
   MsgBox "Données incohérentes !"
   End
End If
Next
For i = ii To 3 Step -1
   k = (Cells(i, 2).Value - Cells(i - 1, 2).Value) * 24
   x = IIf(k < 0, 1, 0)
   k = (Cells(i, 2).Value - Cells(i - 1, 2).Value + x) * 24
   If k > 1 Then
      For kk = 1 To k - 1
         Rows(i).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
         Cells(i, 2).Value = Cells(i - 1, 2).Value: Cells(i, 3).Value = Cells(i - 1, 3).Value
      Next
   End If
Next
End Sub

Sub galopin2()
Dim i&, ii&, k%, kk%, x%
Application.ScreenUpdating = False
ii = [A1].CurrentRegion.Rows.Count
For i = ii To 3 Step -1
If Cells(i, 2).Value = Cells(i - 1, 2).Value Then
   MsgBox "Données incohérentes !"
   End
End If
Next
For i = ii To 3 Step -1
   k = CInt((Cells(i, 2).Value - Cells(i - 1, 2).Value) * 1440)
   x = IIf(k > 0, 0, 1)
   k = CInt((Cells(i, 2).Value - Cells(i - 1, 2).Value + x) * 1440)
   If k > 10 Then
      For kk = 10 To k - 10 Step 10
         Rows(i).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
         Cells(i, 2).Value = Cells(i - 1, 2).Value
         Cells(i, 3).Value = Cells(i - 1, 3).Value
         Cells(i, 4).Value = Cells(i - 1, 4).Value
      Next
   End If
Next
End Sub

A+

Alors la, c'est parfait !

Merci beaucoup beaucoup beaucoup, tu m'as enlevé une énorme épine du pied.

Merci pour la réactivité.

Je vais pouvoir triller mes 640.000 données en deux clics. C'est juste genial.

Bonne continuation

C'est bon !

Merci encore et bonne continuation.

Seb

Rechercher des sujets similaires à "correction erreur base donnees incrementation lign"