recherche dans une feuille, plusieurs résultats

  • Initiateur de la discussion Initiateur de la discussion yadla
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

yadla

XLDnaute Occasionnel
Bonjour le forum,

Je suis de nouveau devant un petit problème, basique je pense encore une fois 😛

Je fais une recherche (en VBA) dans une feuille du classeur correspondant. Mon problème c'est que je cherche une date et qu'il est possible que la date apparaisse plusieurs fois dans la feuille.

En fait, toutes les dates sont dans la meme colonne. Et à chaque date correspond une heure. Donc non n'a qu'une seule fois chaque date complète (date+heure).

J'aimerais trouver la cellule qui correspond à la date d'aujourd'hui et dont l'heure est précédente à celle de maintenant... (utilisation de "Date" et de "Time").

Je sais comment faire une recherche, mais je ne sais pas gérer lorsqu'il y a plusieurs résultats.

Là dans mon exemple, j'ai deux fois la date d'aujourd'hui (17/07) et deux heures différentes, toutes les deux passées à maintenant... Mais une fois qu'il en a trouvé une, il arrête la recherche et donc ne voit pas la seconde, plus récente (c'est elle que je veux).

Quelqu'un peut m'aider ?
 

Pièces jointes

Re : recherche dans une feuille, plusieurs résultats

Bonjour Yadla

regarde peut être le code ci dessous :

Code:
Sub test()
Dim x As Range, z As String, y As Date
Set x = Range("A4:Z1000").Find(Date, LookIn:=xlFormulas)
If Not x Is Nothing Then
Do
    z = x.Address
    y = x.Offset(0, 1).Value
    Set x = Range("A4:Z1000").FindNext(x)
Loop While y > x.Offset(0, 1) And x.Address <> z
End If
MsgBox x.Address
End Sub

bon après midi
@+
 
Re : recherche dans une feuille, plusieurs résultats

Bonjour Pierrot,

Merci pour ton aide. J'ai pris ton code, et ca marche... mais juste quand il n'y a que deux fois la date.

J'ai ajouté des heures dans la meme date : 4 x 17/07 et 4 heures différentes.

Et là, ca ne marche pas 🙁

Aussi, j'aimerais qu'il me prenne la cellule dont l'heure est la plus récente. Cad que si c'est plus tard que le moment présent, il me prend le précédent. Ce qu'il ne fait pas là, dans mon fichier, que je te redonne.

J'ai ajouter des trucs, mais apparemment, ca ne marche pas.
 

Pièces jointes

Re : recherche dans une feuille, plusieurs résultats

Re Yadla

une autre version, renvoie la cellule pour laquelle l'heure est la plus PROCHE, avant ou après !!!

Code:
Sub test()
Dim x As Range, z As String, y As Date, w As Range, t As Date, v As Date
Dim d As Date, e As Date
t = Time
Set x = Range("A4:Z1000").Find(Date, LookIn:=xlFormulas)
Set w = x
z = x.Address
If Not x Is Nothing Then
Do
    y = x.Offset(0, 1).Value
    d = t - y
    Set x = Range("A4:Z1000").FindNext(x)
    v = x.Offset(0, 1).Value
    e = t - v
    If Abs(e) < Abs(d) Then Set w = x
Loop While x.Address <> z
End If
MsgBox w.Address
End Sub

on devrait faire plus court...

bonne soirée
@+
 
Re : recherche dans une feuille, plusieurs résultats

😱 désolée, mais ca marche toujours pas 😱

Pourtant j'essai de voir, je lutte un peu, mais je m'y penche dessus plus sérieusement dans la soirée si j'ai le temps.

Merci pour ton aide.

Bonne soirée à toi Pierro
 
Re : recherche dans une feuille, plusieurs résultats

Bonjour Yadla,

qu'est ce qui ne marche pas, il ne te récupère pas la cellule avec l'heure la plus proche ? Chez cela fonctionne.

bonne journée
@+

edition : ne pas tenir compte de ce message.
 
Dernière édition:
Re : recherche dans une feuille, plusieurs résultats

Re

un nouveau code avec 2 choix possibles (le 2ème en commentaire) :

Code:
Sub test()
Dim x As Range, z As String, w As Range, t As Date
Dim d As Date, e As Date
t = Time
Set x = Range("A4:Z1000").Find(Date, LookIn:=xlFormulas)
Set w = x
If Not x Is Nothing Then
z = x.Address
    Do
        d = t - Abs(w.Offset(0, 1).Value)
        Set x = Range("A4:Z1000").FindNext(x)
        e = t - Abs(x.Offset(0, 1).Value)
        
        'pour l'heure la plus proche(avant ou après)
        If Abs(e) < Abs(d) Then Set w = x
        
        'pour l'heure la plus proche jamais supérieure
        'If Abs(e) < Abs(d) And Abs(x.Offset(0, 1).Value) < Abs(t) Then Set w = x
    Loop While x.Address <> z
MsgBox w.Address
End If
End Sub

testes et dis moi si cela te convient.

@+

Edition : suppression d'une variable inutile
2ème Edition : repositionnement controle, si variable "x" est vide ou pas.
 
Dernière édition:
Re : recherche dans une feuille, plusieurs résultats

Bonjour,

Il y a quelque temps, j'avais reçu l'aide de pierrot.
J'avais récupéré le code. Ca marche. Mais en fait ca dépend... 😱
Je me trouve devant une erreur que je n'arrive pas à résoudre.
Dans la feuille "Prévisions", j'ai 2 boutons : Test2 et Test3.
Test3 marche... OK
Test2... Non 🙁 Et je ne comprends pas pourquoi il y a "Incompatibilité de type"
Donc, voilà, encore une fois besoin d'un peu d'aide.

Je vous remercie d'avance
 

Pièces jointes

Re : recherche dans une feuille, plusieurs résultats

Bonjour Yadla

modifies la ligne de code ci dessous :

Code:
    t = FormatDateTime(heure_livraison, vbLongTime)

par celle ci :

Code:
   t = CDate(heure_livraison)

par contre sur la première ligne du module indique :
Code:
Option Explicit
ce qui oblige à déclarer systèmatiquement toutes les variable, cela évite un certain nombre d'erreurs.

bonne fin d'après midi
@+
 
Re : recherche dans une feuille, plusieurs résultats

Bonsoir Pierrot,

Merci pour ta réponse, c'était vraiment pas compliqué... 😱
Pffff, je pense à faire certains essais, mais jamais les bons je crois 😛
Pourtant c'est bizarre, parce que traduire avec "Cdate(...)" ça me donne le même résultat qu'avec "FormatDateTime(...,vbLongTime)".
Les mistères de l'informatique 😀

Bonne soirée
 
Re : recherche dans une feuille, plusieurs résultats

Re Yalda

en fait "FormatDateTime" renvoie une valeur sous FORMAT heure mais la valeur renvoyée reste du TEXTE fomaté soit, mais du texte tout de même et non une DATE, d'ou aussi l'importance de la déclaration des types de donnée.

bonne soirée
@+
 
Re : recherche dans une feuille, plusieurs résultats

Bonjour Pierrot, le forum,

Merci pour l'info, il est vrai que pour aller plus vite je ne déclare pas les variables que j'utilise... 🙄

Je pense que je vais faire avec déclaration, ca évitera les erreurs dans ce genre.

Encore merci, bonne journée
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
114
Réponses
10
Affichages
134
Retour