Méthode Find pour trouver des heures

Oraff

XLDnaute Nouveau
Hello le forum et les forumistes !

Alors voila, je développe un outil de planification sur lequel il y aune grille avec des heures. sur une autre feuille je stocke les différentes plages horaires avec des heures. Là je voudrais avec la méthode "Find", trouver l'heure de début du service dans ma grille ainsi que l'heure de fin afin de déposer sur ma grille ma tâche planifiée. Ci-dessous le morceau de code :

With ActiveWorkbook.Sheets("Bases").Range("A1:A12")
Set Service = .Find(UserForm1.Label4.Caption, LookIn:=xlValues)
End With

HDébut = CDate(Sheets("Bases").Cells(Service.Row, 5).Value)
HFin = CDate(Sheets("Bases").Cells(Service.Row, 6).Value)

If UserForm1.Label4.Caption <> "" Then

With ActiveWorkbook.ActiveSheet.Range("N3:AY3")
Set ColonneHDébut = .Find(HDébut, LookIn:=xlValues)
Set ColonneHFin = .Find(HFin, LookIn:=xlValues)
End With

En fait le souci est le suivant : il ne trouve pas HDébut ni HFin dans ma plage. HDébut et HFin sont au format "hh:mm:ss" et dans ma plage de recherche aussi le format est "hh:mm:ss". Je suis sûr qu'un paramètre me manque dans mon Find...quelqu'un peut m'aider ? Merci d'avance le forum !
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Méthode Find pour trouver des heures

Bonsoir Oraff,

Il faut faire les recherches dans les formules avec xlFormulas.

Testez donc ceci :

Code:
Sub Test()
Dim t$, plage1 As Range, plage2 As Range
Dim Service As Range, HDébut As Range, HFin As Range

t = UserForm1.Label4
If t = "" Then Exit Sub

Set plage1 = ActiveWorkbook.Sheets("Bases").Range("A1:A12")
Set plage2 = ActiveSheet.Range("N3:AY3")

Set Service = plage1.Find(t, , xlFormulas, xlWhole)
If Service Is Nothing Then Exit Sub

t = Service(, 5).Text
If IsDate(t) Then
  Set HDébut = plage2.Find(CDate(t))
  If Not HDébut Is Nothing Then MsgBox "HDébut " & CDate(HDébut) & " en " & HDébut.Address
End If

t = Service(, 6).Text
If IsDate(t) Then
  Set HFin = plage2.Find(CDate(t))
  If Not HFin Is Nothing Then MsgBox "HFin " & CDate(HFin) & " en " & HFin.Address
End If

End Sub
Edit : si les heures sont au format "hh:mm" aucun problème car CDate les renvoie au format "hh:mm:ss".

Bonne nuit.
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Méthode Find pour trouver des heures

Bonjour Oraff, le forum,

Avec On Error Resume Next on évite les If...Then :

Code:
Sub Test()
Dim t$, plage1 As Range, plage2 As Range
Dim Service As Range, HDébut As Range, HFin As Range

t = UserForm1.Label4
If t = "" Then Exit Sub

Set plage1 = ActiveWorkbook.Sheets("Bases").Range("A1:A12")
Set plage2 = ActiveSheet.Range("N3:AY3")
On Error Resume Next

Set Service = plage1.Find(t, , xlFormulas, xlWhole)
Set HDébut = plage2.Find(CDate(Service(, 5).Text))
Set HFin = plage2.Find(CDate(Service(, 6).Text))

'---pour tester---
MsgBox "HDébut " & CDate(HDébut) & " en " & HDébut.Address
MsgBox "HFin " & CDate(HFin) & " en " & HFin.Address

End Sub
Bonne journée.
 

Statistiques des forums

Discussions
312 215
Messages
2 086 316
Membres
103 176
dernier inscrit
jean.yvesjean.yves