Trouver une date manquante

Douie

XLDnaute Nouveau
Rebonjour!

Décidément, mes macros ne m'aiment pas >__<

Je suis encore là pour demander une petite aide, j'ai une liste de dates, espacées de 5 minutes et je cherche a afficher un message lorsque il y a plus de 5 minutes entre deux dates.

Sur le fichier exemple, il manque 12h40 donc la macro est censée me dire qu'il y a un trou à la ligne 9 ou 10. Je sais que pour avoir la même date, 5 minutes plus tard, il suffit d'ajouter 5/(60*24) donc voici mon code:

Code:
Dim i As Integer

    For i = 4 To 25
        If Worksheets("Feuil1").Cells(i + 1, 1) <> Worksheets("Feuil1").Cells(i, 1) + (5 / (60 * 24)) Then
            MsgBox "The gap is line" & vbLf _
            & i
            Cells(i, 1).Select
            Exit Sub
        End If
    Next i

Mais bon cela me dit que le trou est direct ligne 5. Je sais que pour les dates, il y a quelques difficultés puisqu'elles ne sont pas égales a plusieurs décimales après les minutes près. Du coup pour Excel, mes deux dates sont différentes ?

Et sinon, pour la boucle, au lieu de mettre '25' y a t-il un moyen de dire 'jusqu'à la dernière cellule non vide de la colonne' pour qu'il la détecte lui même ?

Merci!
 

Pièces jointes

  • exemple.xlsm
    15 KB · Affichages: 50
  • exemple.xlsm
    15 KB · Affichages: 48
  • exemple.xlsm
    15 KB · Affichages: 47

Papou-net

XLDnaute Barbatruc
Re : Trouver une date manquante

Bonsoir Douie,

Ta macro modifiée comme suit semble fonctionner comme tu le souhaites :

Code:
Sub gaps()
Dim i As Integer
With Feuil1
  For i = 5 To .Range("B:B").SpecialCells(xlCellTypeLastCell).Row
    If Round(.Cells(i, 1).Value - .Cells(i, 1).Offset(-1, 0).Value, 4) > Round(1 / 24 / 60 * 5, 4) Then
        MsgBox "The gap is line" & vbLf & i
        Cells(i, 1).Select
        Exit Sub
    End If
  Next i
End With
End Sub

De plus, elle s'arrête sur la dernière cellule renseignée s'il n'y a pas d'écart > 5mn.

Espérant avoir résolu.

Cordialement.
 
Dernière édition:

Douie

XLDnaute Nouveau
Re : Trouver une date manquante

Merci pour le code!!

J'ai besoin d'expliquer ce code à quelqu'un mais moi même je ne comprend pas trop la ligne:

Round(.Cells(i, 1).Value - .Cells(i, 1).Offset(-1, 0).Value, 4) > Round(1 / 24 / 60 * 5, 4)

Que signifie offset et le 4 ?
Pour la dernière cellule, n'est ce pas Range(A:A) ? (Colonne A)

En fait la macro marche très bien pour mes quelques dates, mais j'ai 40 000 lignes de dates ... Dans ce cas, j'ai deux erreurs possibles: dépassement de capacité (pour le integer ?) ou 'objet requis'
 
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : Trouver une date manquante

Merci pour le code!!

J'ai besoin d'expliquer ce code à quelqu'un mais moi même je ne comprend pas trop la ligne:

Round(.Cells(i, 1).Value - .Cells(i, 1).Offset(-1, 0).Value, 4) > Round(1 / 24 / 60 * 5, 4)

Que signifie offset et le 4 ?
Pour la dernière cellule, n'est ce pas Range(A:A) ? (Colonne A)

En fait la macro marche très bien pour mes quelques dates, mais j'ai 40 000 lignes de dates ... Dans ce cas, j'ai deux erreurs possibles: dépassement de capacité (pour le integer ?) ou 'objet requis'

RE :

Offset dit qu'excel doit considérer un décalage par rapport à la cellule active.

Par exemple :

ActiveCell.Offset(-1,0) s'adresse à la cellule située sur la ligne du dessus (-1) et sur la même colonne (0). Dans le même raisonnement, ActiveCell.Offset(2,-2) s'adresse à la cellule située 2 lignes en dessous (+2) et 2 colonnes à gauche (-2). Si tu sélectionnes Offset et tu tapes F1, tu auras les explications officielles de B. Gates.

Le 4 se rattache à la fonction Round (Arrondi) et fixe le nombre de décimales à 4 chiffres après la virgule. Il faut effectivement arrondir les heures avant de faire la comparaison.

Effectivement, la dernière cellule se trouve sur la colonne A, il suffit de remplacer B:B par A:A.

Si tu atteins les 40000 lignes, il vaut mieux alors définir i comme Long au lieu de Integer.

Espérant avoir répondu.

Cordialement.
 

Douie

XLDnaute Nouveau
Re : Trouver une date manquante

Merci pour ces explications!

Bon j'ai quelque chose de bizarre, en ayant mes 40 000 lignes sur la colonne A dans un nouveau fichier excel, cela marche très bien en changeant le integer en long.

Par contre, quand je teste mon code sur ma feuille de calcul qui est remplie jusqu'à la colonne Z (mais je ne souhaite tester que les dates en colonne A donc rien ne change à part 'l'environnement'), j'ai l'erreur 404, objet requis sur ma ligne 'for'. Je précise que cette feuille de calcul vient d'un excel anglais mais à part Feuil1 se transformant en Sheet1, y a t-il un autre vocabulaire qui peut bloquer le code ?
 

Papou-net

XLDnaute Barbatruc
Re : Trouver une date manquante

Bonjour Douie, bonjour CC (heureux de te croiser sur sur ce fil !)

@ Douie,

Essaie en modifiant la boucle comme ceci :

Code:
For i = 5 To .Range("A" & Rows.Count).End(xlUp).Row
Sinon, peux-tu joindre ton fichier (une centaine de lignes non confidentielles suffira amplement) ?

Cordialement.
 

Douie

XLDnaute Nouveau
Re : Trouver une date manquante

Merci pour toutes ces explications limpides, j'ai retenu, touche F1!

Le probleme persiste, j'ai joint le fichier.

Merci encore,
 

Pièces jointes

  • example.xlsm
    281.8 KB · Affichages: 44
  • example.xlsm
    281.8 KB · Affichages: 53
  • example.xlsm
    281.8 KB · Affichages: 55

Papou-net

XLDnaute Barbatruc
Re : Trouver une date manquante

Bonsoir Douie,

Ta feuille se nomme "Sheet1" mais son nom système reste "Feuil1". Vois dans l'explorateur de projet :
Feuil1 (Sheet1)

Il faut donc mentionner ce nom système :
With Feuil1
...
End With


sinon il faut écrire :
With Sheets("Sheet1")
...
End With

Bonne soirée.

Cordialement.

PS : pour détecter une différence à la seconde près, il faut remplacer le nombre de décimales (4) par 5 dans les instructions ROUND().
 
Dernière édition:

Discussions similaires

Réponses
7
Affichages
392

Statistiques des forums

Discussions
312 451
Messages
2 088 519
Membres
103 875
dernier inscrit
Farouka