Valeurs comprises dans un intervalle sur un temps donnée

Bonjour,

Je sollicite encore votre aide pour un petit problème.

Je dispose d'un classeur avec des données horaires, soit 130 087 lignes et 2 colonnes (A : date jj/mm/aaaa hh:mm:ss; B : valeurs flottantes). Sur ces données je dois les trier de la façon suivante :

  1. - Supprimer les valeurs supérieures à 1100
  • - Supprimer les valeurs inférieures à 400
  • - Valeurs comprises entre 400 et 1100 de t1h à t10h

Dans l'idée je souhaite d'abord supprimer les valeurs entre 400 et 1100 afin de réduire la taille du fichier et ensuite réaliser un tri pour la continuité (méthode pas encore totalement défini.

Le premier problème rencontré est le suivant :

Sub France()
Dim I As Single
Dim ligend As Long
Application.ScreenUpdating = False
With ThisWorkbook.Sheets("France")
ligend = .Range("B" & .Rows.Count).End(xlUp).Row
For I = 1 To ligend
If .Range("B" & I).Value > 400 Or .Range("B" & I).Value < 1100 Then .Row(I).Delete
Next I
End With
End Sub

Le message d'erreur est le suivant :

Propriété ou méthode non gérée par cet objet

.

Je suis preneur d'aide et surtout d'informations.

Merci d'avance,

Bonne journée.

(PS : dans l'exemple en PJ j'ai réduis de façon notable la taille du fichier)

P.N

12france.xlsx (689.42 Ko)

Bonjour,

Tu n'as pas dit sur quelle ligne était l'erreur...

Tu peux déjà éviter de commencer par une incohérence : les numéros de ligne sont des entiers, tu choisis un type Long pour déterminer la dernière ligne à atteindre, ta variable compteur doit être de même type !!!

Et on ne ne supprime pas de lignes en parcourant dans le sens croissant, on modifie alors les numéros de ligne non encore testés, à chaque fois qu'on en supprime une, on saute la suivante qui n'est pas testée...

Sub France()
    Dim I As Long, ligend As Long
    Application.ScreenUpdating = False
    With ThisWorkbook.Sheets("France")
        ligend = .Range("B" & .Rows.Count).End(xlUp).Row
        For I = ligend To 1 Step -1
            If .Range("B" & I).Value > 400 Or .Range("B" & I).Value < 1100 Then _
             .Row(I).Delete
        Next I
    End With
End Sub

NB- Et curieusement le code indenté se lit beaucoup plus vite et sans effort !!!!!

Ton propos est aussi contradictoire, tu supprimes les lignes que tu déclarais préalablement devoir garder... mais cela ne change rien à la structure de la procédure...

Bonjour le fil, bonjour le forum,

Même remarques que Môssieur Ferrand, sauf que lui s'exprime tellement mieux que c'est un régal de le lire... Toutefois il n'a pas testé car il se serait aperçu qu'il manque le s fatidique qui provoque l'erreur :

Rows(I).Delete.

Arf ! j'suis tellement content... Que le bon Maître me le pardonne, comme chantait Brassens...

Merci effectivement cela fonctionne bien mieux

J'apprends sur le tas, je m'excuse donc des petits soucis d'incohérences dans mes lignes.

Je garde le sujet ouvert. En effet j'ai réalisé le plus simple pour le moment. Le plus compliqué est à venir ....

Merci encore.

Arff ! Salut ThauThème ! Tu es là heureusement !

C'est encore moi !

J'ai largement avancé sur l'ensemble de mes données (19 classeurs avec 130 000 valeurs minimum) grâce à vos aides.

Le problème suivant est donc :

  1. Valeurs comprises entre 400 et 1100 de t1h à t10h

Pour réaliser cette condition j'avance sur un petit cas test : 1 classeur, 1 colonne remplie de "a" et de "b". Dans l'exemple je ne souhaite conserver les plages de cellules ( à vrai cette plage est fixé c'est 3 cellules) contenant QUE des "a". Pour cela je décide de chercher de la cellule n à n

+2 (ou si on commence par la fin de end à end - 2 ) les cellules ne contenant pas de "a".

Sub suite()
    Dim I As Long, ligend As Long, Valeur_Cherchee As String, Trouve As Range
    Application.ScreenUpdating = False
    With ThisWorkbook.Sheets("Feuil1")
Valeur_Cherchee = "b"
ligend = .Range("A" & .Rows.Count).End(xlUp).Row
        For I = ligend To 1 Step -1
        Trouve = .Range("A" & I & ":A" & I - 2).Find(Valeur_Cherchee) ' Problème sur cette ligne
Next I
End With
End Sub

L'erreur est la suivante

Variable objet ou variable de bloc With non définie

Si je comprends bien, l'erreur ne provient pas de la façon dont j'ai déclaré "Trouve", mais plutôt de la plage que j'ai indiqué :

Trouve = .Range("A" & I & ":A" & I - 2)

Effectivement il va y avoir un problème quand on va arriver à la cellule A1 (et son homologue qui n'existe pas "A-1").

Je vous remercie pour l'aide apporte

5ab.xlsx (9.14 Ko)

Bonjour le fil, bonjour le forum,

Désolé Norsazz, mais je ne vois aucun rapport entre ton premier fichier et ce nouvel exemple. À vrai dire je n'ai toujours pas compris ce qu'était t1h et t10h...

Ce que je te propose, pour que ce soit bien clair pour tout le monde, c'est un fichier exemple avec jusque quelques lignes significatives et réelles de ton problème où, dans le premier onglet tu montrerais les données avant le traitement de la macro et dans le second le résultat désiré après le traitement par la macro. Le tout accompagné d'explication claires...

Bonjour dominical à tous,

Même avis que ThauThème...

Je pensais au départ que t1h et t10h désignait des heures, je n'en suis plus sûr et j'ai un peu perdu le fil...

Bonjour à tous,

Je tiens à m'excuser des imprécisions dont j'ai pu faire preuve.

Je vais être le plus précis possible. J'ai 1 classeur et je dois trouver le nombre de créneau qui respecte les conditions suivantes :

  • France : valeurs horaires comprises entre 400 et 1100 sur 10 heures
  • Russie : valeurs horaires inférieures à 200 sur 6 heures
  • Belgique : valeurs journalières comprises entre 1200 et 5000. Soit 1800 sur 3 jours OU 1200 en gradient positif sur trois jouer (valeur jour 1 < valeur jour 2 < valeur jour 3

L'ensemble de ces condtions doivent être réunis en même temps. L'interêt est de savoir le nombre de créneau qui respecte ces conditions. A terme, bien sur, je vais faire varier ces conditions.

Bien sur je ne vous demande pas de réaliser l'exercice mais juste de me guider.

Merci d'avance


Norsazz a écrit :

Bonjour à tous,

Je tiens à m'excuser des imprécisions dont j'ai pu faire preuve.

Je vais être le plus précis possible. J'ai 1 classeur et je dois trouver le nombre de créneau qui respecte les conditions suivantes :

  • France : valeurs horaires comprises entre 400 et 1100 sur 10 heures
  • Russie : valeurs horaires inférieures à 200 sur 6 heures
  • Belgique : valeurs journalières comprises entre 1200 et 5000. Soit 1800 sur 3 jours OU 1200 en gradient positif sur trois jours (valeur jour 1 < valeur jour 2 < valeur jour 3)

L'ensemble de ces condtions doivent être réunis en même temps. L'interêt est de savoir le nombre de créneau qui respecte ces conditions. A terme, bien sur, je vais faire varier ces conditions.

Bien sur je ne vous demande pas de réaliser l'exercice mais juste de me guider.

Merci d'avance

8creneau.xlsx (0.99 Mo)

Là tu ne facilites pas la compréhension !

Une valeur horaire est dans Excel un nombre inférieur à 1 et s'exprime généralement sous un format h:mm ou hh:mm, de 00:00 à 23:59.

Cordialement.

Rechercher des sujets similaires à "valeurs comprises intervalle temps donnee"