Correction erreur matrice données
Bonjour à tous,
le tître n'est peut-être pas très explicite ...
J'ai réalisée une suite de macro qui me permettent de synthetiser une base de données avec de nombreux paramètres.
Sauf que pour certains cas, il me faut appliquer une correction .
En effet, je cherche à synthétiser les données sur une année complète, et qui peut-être glissante (07/01/2019 au 07/01/2020 dans l'exemple en copie).
Le but est de vérifier sur le tableau de synthèse si les données prises en compte correspondent à une période de 365 jours.
ETAPE 1 : soustraction entre les cases 33 et 34, et si la valeur et < 365 on déclenche la procédure
ETAPE 2 : on va chercher dans la base de données (feuille ENEDIS) la valeur manquante en balayant l'ensemble des cases via deux boucles (i et j)
ETAPE 3 : si une valeur correspond à la période manquante (soustraction de la date de fin de mesure dans la base de données - la date de début dans la synthèse de données = 365), alors on ajoute la valeur correspondante à la synthèse et on change la valeur de la date par la nouvelle.
Le problème : le code détecte bien les dates ne correspondant pas à une année complète, mais n'ajoute pas les valeurs manquantes et se contente de les effacer ?
Idem dans la base de données, la valeur mesurée n'est pas ajoutée à la valeur actuelle.
Sub Modif_date_si_erreur()
nb_rows = Sheets("ENEDIS").UsedRange.Rows.Count
nb_coldeb = Sheets("ENEDIS").UsedRange.Columns.Count
For i = 1 To nb_rows
For j = 0 To nb_coldeb / 3
On Error Resume Next
'Etape 1
If Sheets("Synthese_Donnees").Cells(i + 2, 34) - Sheets("Synthese_Donnees").Cells(i + 2, 33) < 365 And Sheets("Synthese_Donnees").Cells(i + 2, 34) - Sheets("Synthese_Donnees").Cells(i + 2, 33) <> 0 Then
'Etape 2/3
If Sheets("ENEDIS").Cells(i + 1, 9 + j * 3) - Sheets("Synthese_Donnees").Cells(i + 2, 33) = 365 Then
Sheets("ENEDIS").Cells(i + 1, 102) = Sheets("ENEDIS").Cells(i + 1, 102) + Sheets("ENEDIS").Cells(i + 1, 7 + j * 3)
Sheets("Synthese_Donnees").Cells(i + 2, 34) = Sheets("Synthese_Donnees").Cells(i + 1, 9 + j * 3)
End If
End If
Next
NextEn vous remerciant !
bonne journée
Bonjour,
Le bout de code joint ne produit pas d'erreur... Évidemment avec on error resume Next !
Supprimer cette ligne.
Après il parait difficile d'en dire plus : La macro fait exactement ce que tu lui demandes. Comme le résultat obtenu n'est pas celui espéré on peut imaginer que c'est un problème de débogage. Dès la première erreur accepter le débogage et avec la touche F8 évaluer chaque bribes de code. (avec le survol de la souris) et avec la fenêtre d'exécution.
Pour un étranger à ton métier cela semble difficile de faire à ta place. Cependant ce qui me parait possible c'est de te guider dans le débogage par téléphone. Une fois que tu auras compris le principe tu trouveras surement la clef du problème.
Pour un essai de guidage par téléphone voir mon N° en MP.
A+
Bonjour,
Désolé de ne pas avoir répondu plus tôt ...
J'ai trouvé la solution en complexifiant un peu le code et en déboguant pas à pas comme indiqué .
Concernant le "On error resume next", il est indispensable car le traitement des données peut renvoyer le mot "erreur", de type string. Sans ça , la macro planterait
Merci, bonne journée