Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[VBA] Recherche de date

5 réponses
Avatar
ThierryP
Bonjour le forum,

Je bute (comme souvent) sur un souci de date.
Dans une cellule nomm=C3=A9e "Date_R=C3=A9f", je rentre une date : 19/10/20=
17
Je souhaite trouver cette date dans une plage donn=C3=A9e, je tente donc ce=
ci :
With ActiveSheet.Range("B1:BJ1")
Set C =3D .Find(Range("Date_R=C3=A9f"), LookIn:=3DxlValues)
If Not C Is Nothing Then
PremCol =3D C.Column

Mais VBA m'envoie promener, parce que C reste =C3=A0 Nothing !

Si quelqu'un pouvait m'=C3=A9viter de m'arracher les cheveux l=C3=A0-dessus=
, je serais le plus heureux des bidouilleurs Excel !!!

Merci d'avance
ThierryP

5 réponses

Avatar
MichD
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
Avatar
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
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
Avatar
MichD
Bonjour Jacquouille,
Les dernières versions d'Office, la gestion des dates en VBA se sont
grandement améliorées.
MichD
Avatar
ThierryP
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
Avatar
ThierryP
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