Boucle while Boucle While

Bonjour, je suis nouvelle sur le forum. J'aimerai bien avoir de l'aide svp sur cette macro que j'essaie de créer.

Je veux que ma macro extraie l'heure qui se trouve une cellule dans laquelle on trouve une date et une heure. Et tant que l'heure est inférieure à 17:30:00 la boucle tourne (sans rien faire d'autre) et à la fin il sera inscrit dans une cellule, "Jour n°..."

Voici ce que j'ai tentée

Sub Det_1er_jour()

Dim k As Integer
Dim i As Integer

k = 2
i = 1

Do While TimeValue(Cells(k, 1)) < TimeValue(Range("J2"))

i = i + 1

Loop

Range("K4") = "Jour 1"
End Sub

Bonsoir Batourouciss et bienvenue, bonsoir le forum,

À quoi sert la variable i ? Tu la déclares, l'incrémente mais ne t'en sert pas... Je pense que Cells(k, 1) devrait être Cells(k, i)...

Je te conseille de toujours mettre une majuscule dans le nom de tes variables parce que quand tu codes en minuscule, la variable prend obligatoirement la majuscule. Ça permet visuellement de repérer d'éventuelles erreurs...

Bonjour

Do While TimeValue(Cells(k, 1)) < TimeValue(Range("J2"))

Peut-être, à première vue, remplacer k,1 par k,i

Bonne soirée

Bonjour Thautheme

Je suis arrivée juste derrière toi.

Bonne soirée aussi

Bonne soirée Patty...

ThauThème Merci pour ta réponse rapide. Le i sert à faire avancer la boucle (i = i + 1 ).
J'ai mis cells(k,1) parce que la boucle ne porte que sur la colonne 1.

Alors k = k + 1 ??

Bonjour à tou(te)s,

avant de chercher à faire fonctionner ton bouzin, tu devrais expliquer quel est ton but.
Parce que là ta macro va monopoliser toutes les ressources tant que la fin de boucle n'est pas atteinte
Mets au moins un DoEvents dedans pour pouvoir reprendre la main en cas de pb, et pas être obligé d'arrêter excel sauvagement sans sauvegarde possible. Attention, c'est assez chronophage, le faire toutes les 1000 boucles par exemple.

Si le but est de faire une action à une heure précise regarde plutôt du coté de Application.OnTime.
eric

@Patty5046 J'ai rajouté k = k + 1 mais pour le moment le blocage se trouve vraiment au niveau de : Do While TimeValue(Cells(k, 1)) < TimeValue(Range("J2"))

Le message d'erreur affiche "incompatibilité de type"

@eriiic merci pour le Doevents, je penserai à le rajouter. Le "Application.Ontime" ne réponds pas à mon besoin ici;

Tu m'as demandé quel était mon but: Je veux que ma macro extraie l'heure qui se trouve une cellule dans laquelle sont inscrits une date et une heure. Et tant que l'heure est inférieure à 17:30:00 la boucle tourne (sans rien faire d'autre) et à la fin il sera inscrit dans une cellule, "Jour n°...". L'heure de départ est 09:00:00. Et l'heure avance d'une minute.

Je travaille sur un historique que j'ai télécharger sur bloomberg. Avec des dates, des prix etc...

Merci.

Bonjour à tous

Tu pourrais peut-être nous mettre un petit extrait de ton fichier, car là , il nous manque trop de données.

Comment se présente ta colonne 1, entre autre...

Merci

Salut Batourouciss,
Salut l'équipe,

L'heure de départ est 09:00:00. Et l'heure avance d'une minute.

Est-ce à dire que ta BDD commence à 9:00:00 et s'incrémente avec une constante de 1 minute à chaque ligne ?
Dans ce cas, 17:31:00 se trouve 511 lignes plus bas...

Mais, comme le dit si bien Patty


A+

Bonjour,

et qu'est-ce qui fait changer l'heure de cette cellule ?
C'est à ce niveau qu'il faut que tu contrôles l'heure obtenue plutôt que de boucler sans fin.
Si c'est une saisie utiliser l'événement Change, si formule utiliser Change sur ses antécédents, si macro agir dedans.
eric

Et comme disent les collègues, un fichier ! tu as sans aucun doute des cellules avec des textes que tu prends pour des nombre (dates, heures etc)
Sans parler des variables qui actuellement ne servent à rien...

Bonjour, ma macro ne servira pas à faire avancer les minutes. Je vous met le fichier excel ça vous permettra peut être de mieux comprendre.

Merci pour vos réponses.

23classeur1.xlsm (168.14 Ko)

Salut Batourouciss,
Salut l'équipe,

c'est bien ce que je pensais : les dates + heures commencent en ligne 4 + 511 lignes = ligne 515 = 12/10/2021 17:31:00.

Tu cherches bien la ligne dont l'heure est supérieure à 17h30 ?


A+

Bonjour @curulis57 je veux que ma boucle parcours les données de la colonne 1, à partir de 09:00:00 du 12/10/2021 et qu'il s'arrête à 17:30:00 et qu'il écrive dans une autre cellule "Jour 1"

Ensuite il reprendra la même chose pour le 13/10/2021... "Jour 2 " et ainsi de suite.

J'ai l'impression que je ne suis pas très claire vu toutes les précisions que vous me demandé

Merci encore

Salut Batourouciss,

et qu'il écrive dans une autre cellule "Jour 1"

Où, en [A1], [BV45], [XFD1000], sur un petit papier ?


A+

Bonjour,

non, pas claire du tout.
En fait tu veux qu'elle recherche tous les 17:30 et marque sur la même ligne "Jour x" ?
eric

Bon, allez, assez tergiversé là-dessus, on se lance...

Un double-clic sur la feuille démarre la macro.
- celle-ci détecte la première date commençant à 9:00:00;
- elle boucle par Step de 525 puisque les journées sont calculées jusqu'à 17:44:00;
- elle inscrit alors "JOUR" en [G:G] et le n° du jour en [H:H].

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Cancel = True
'
Application.ScreenUpdating = False
'
Columns(8).ClearContents
iRow = Columns(1).Find(what:=TimeValue("09:00:00"), lookat:=xlPart, LookIn:=xlFormulas, searchdirection:=xlNext).Row
For x = iRow To Range("A" & Rows.Count).End(xlUp).Row Step 525
    If x > 15 Then _
        Cells(x - 15, 7) = "JOUR": _
        Cells(x - 15, 8) = WorksheetFunction.Max(Columns(8)) + 1
Next
'
Application.ScreenUpdating = True
'
End Sub
14batourouciss.xlsm (175.55 Ko)


A+

@eriiic non ce n'est pas ça

@curulis57 je vais essayer ça merci, ça me parle et je vous dirai bien sûr si ça fonctionne

Merci

@curulis57 j'ai essayée ta macro mais ça ne fonctionne pas , du coup j'ai fait ce qui suit et quand je débogue rien ne bloque mais rien ne s'affiche sur excel. Donc ça ne fonction pas.

Je pense que c'est au niveau des "cells"

Je sais que d'habitude c'est la formule "range("Ai") = ...." qu'on utilise mais là je veux que les lignes soit variables.

Sub Nombres_de_jours2_()

Dim ligne As Double
Dim i As Double
Dim n As Double

n = 0
ligne = 2
i = 2

For ligne = Sheets(1).Range("A1048576").End(xlUp).Row To 2 Step -514

n = n + 1
Sheets(1).Cells(ligne, 7) = "Jour"

For i = Sheets(1).Range("A1048576").End(xlUp).Row To 2 Step -514

Sheets(1).Cells(ligne, 8) = n

Next
Next

End Sub

Rechercher des sujets similaires à "boucle while"