Discussion:
[VBA] Recherche de date
(trop ancien pour répondre)
ThierryP
2017-10-19 14:32:28 UTC
Permalink
Bonjour le forum,

Je bute (comme souvent) sur un souci de date.
Dans une cellule nommée "Date_Réf", je rentre une date : 19/10/2017
Je souhaite trouver cette date dans une plage donnée, je tente donc ceci :
With ActiveSheet.Range("B1:BJ1")
Set C = .Find(Range("Date_Réf"), LookIn:=xlValues)
If Not C Is Nothing Then
PremCol = C.Column

Mais VBA m'envoie promener, parce que C reste à Nothing !

Si quelqu'un pouvait m'éviter de m'arracher les cheveux là-dessus, je serais le plus heureux des bidouilleurs Excel !!!

Merci d'avance
ThierryP
MichD
2017-10-19 15:47:39 UTC
Permalink
Bonjour,

2 manières de procéder :

Pour la méthode A, dans le cas où tu as plusieurs cellules qui ont la même
date et que tu veuilles boucler sur ces cellules.
Pour les anciennes versions d'Excel, cela peut-être problématique, car le
format des cellules contenant ces dates doit avoir le format de date par
défaut, c'est-à-dire le format date court muni d'un astérisque dans la
fenêtre des formats de cellules. Les récentes versions ne posent pas ce
problème!

Pour la méthode B, chacune des colonnes de la plage ne peut pas avoir de
doublon de date, car la procédure ne retourne que la première date trouvée
répondant au critère dans la colonne.

A )
'----------------------------------------------------------------
Sub test()
Dim Rg As Range, C As Range
Dim Trouve As Range, Adr As String
Dim D As Date

D = Date
With Feuil1
Set Rg = .Range("A1:E10")
End With

With Rg
Set C = .Find(what:=D, LookIn:=xlValues, _
LookAt:=xlWhole)
If Not C Is Nothing Then
Adr = C.Address
Do
MsgBox C.Address 'ou autre chose
Set C = .FindNext(C)
Loop Until C.Address = Adr
End If
End With
End Sub

B )
'----------------------------------------------------------------
Sub test1()

Dim Rg As Range, C As Range
Dim Trouve As Range, Adr As String
Dim D As Date, X As Variant

D = Date

With Feuil1
Set Rg = .Range("A1:E10")
End With

For Each C In Rg.Columns
X = Application.Match(CLng(D), C, 0)
If IsError(X) Then
Err.Number = 0
Else
MsgBox Cells(X, C.Column).Address
End If
Next
End Sub
'----------------------------------------------------------------

MichD
Jacquouille
2017-10-19 16:15:24 UTC
Permalink
Bonjour Denis

depuis le début, au siècle précédent, on bute sur les dates, qui est un gros
problème d'Excel.
Je me suis très souvent débrouillé en remettant non pas la date, mais le n°
du jour (ici = 43027)
format de date US ou Européen ....
Bonne soirée


Jacques
" Le vin est au repas ce que le parfum est à la femme."
.
"MichD" a écrit dans le message de groupe de discussion :
osahf1$12iu$***@gioia.aioe.org...

Bonjour,

2 manières de procéder :

Pour la méthode A, dans le cas où tu as plusieurs cellules qui ont la même
date et que tu veuilles boucler sur ces cellules.
Pour les anciennes versions d'Excel, cela peut-être problématique, car le
format des cellules contenant ces dates doit avoir le format de date par
défaut, c'est-à-dire le format date court muni d'un astérisque dans la
fenêtre des formats de cellules. Les récentes versions ne posent pas ce
problème!

Pour la méthode B, chacune des colonnes de la plage ne peut pas avoir de
doublon de date, car la procédure ne retourne que la première date trouvée
répondant au critère dans la colonne.

A )
'----------------------------------------------------------------
Sub test()
Dim Rg As Range, C As Range
Dim Trouve As Range, Adr As String
Dim D As Date

D = Date
With Feuil1
Set Rg = .Range("A1:E10")
End With

With Rg
Set C = .Find(what:=D, LookIn:=xlValues, _
LookAt:=xlWhole)
If Not C Is Nothing Then
Adr = C.Address
Do
MsgBox C.Address 'ou autre chose
Set C = .FindNext(C)
Loop Until C.Address = Adr
End If
End With
End Sub

B )
'----------------------------------------------------------------
Sub test1()

Dim Rg As Range, C As Range
Dim Trouve As Range, Adr As String
Dim D As Date, X As Variant

D = Date

With Feuil1
Set Rg = .Range("A1:E10")
End With

For Each C In Rg.Columns
X = Application.Match(CLng(D), C, 0)
If IsError(X) Then
Err.Number = 0
Else
MsgBox Cells(X, C.Column).Address
End If
Next
End Sub
'----------------------------------------------------------------

MichD
MichD
2017-10-19 16:32:03 UTC
Permalink
Bonjour Jacquouille,

Les dernières versions d'Office, la gestion des dates en VBA se sont
grandement améliorées.

MichD
ThierryP
2017-10-20 12:10:21 UTC
Permalink
Bonjour Jacques,

C'est ce que je voulais faire, mais comme je dois boucler sur une plage, je pataugeais dans les formats....
Les dates dans Excel sont un gros problème pour moi également !!!
ThierryP
Post by Jacquouille
Bonjour Denis
depuis le début, au siècle précédent, on bute sur les dates, qui est un gros
problème d'Excel.
Je me suis très souvent débrouillé en remettant non pas la date, mais le n°
du jour (ici = 43027)
format de date US ou Européen ....
Bonne soirée
ThierryP
2017-10-20 12:07:51 UTC
Permalink
Le jeudi 19 octobre 2017 17:47:49 UTC+2, MichD a écrit :

Bonjour Denis, toujours aussi actif à ce que je vois !!!
Et toujours aussi efficace, ta méthode B marche impeccable.

Un grand merci pour le coup de main
ThierryP
Loading...