[VBA] Recherche de date

Le
ThierryP
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/20=
17
Je souhaite trouver cette date dans une plage donnée, je tente donc ce=
ci :
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
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
MichD
Le #26448389
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
Le #26448394
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$
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
Le #26448400
Bonjour Jacquouille,
Les dernières versions d'Office, la gestion des dates en VBA se sont
grandement améliorées.
MichD
ThierryP
Le #26448512
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
ThierryP
Le #26448511
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
Le jeudi 19 octobre 2017 18:15:28 UTC+2, Jacquouille a écrit :
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
Publicité
Poster une réponse
Anonyme