Rechercher une date dans une feuille

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 !

zephir94

XLDnaute Impliqué
Bonsoir à tous,

Je voudrais trouver une date dans une feuille, je pense que j'ai un problème déjà dans l'affectation de ma variable !
En pas à pas il affecte bien dans textbox1 01/01/2014 mais le résultat de la recherche reste infructueux malgré la présence de la date dans la feuille , j'ai cru comprendre que la recherche et la manipulation de date n'est pas chose facile !

Voici mon code :

Code:
Dim che As String

Dim Cel As Range
 che = CDate(TextBox1)
If che = " " Then
    MsgBox "Vous n'avez pas saisi de Date !!!", "", vbExclamation
    Exit Sub
End If
With Sheets("base1").Cells
Set Cell = Sheets("base1").Columns(2).Find(Format(che, "d/m/yyyy"), LookIn:=xlValues, lookat:=xlWhole)
If Cell Is Nothing Then MsgBox (" La date " & " " & che & " " & "n'a pas été trouvée"), vbExclamation: Exit Sub
Cell.EntireRow.Select

End With
Unload Me
Je cherche une date au format jour/mois/2014
Merci par avance
 
Dernière édition:
Re : Rechercher une date dans une feuille

Bonsoir zephir94,

j'ai cru comprendre que la recherche et la manipulation de date n'est pas chose facile !

Il suffit de faire les choses correctement :

Code:
Dim c As Range
If Not IsDate(TextBox1) Then
  MsgBox "Date non valide !", 48
  TextBox1.SetFocus: TextBox1.SelStart = 0: TextBox1.SelLength = Len(TextBox1)
  Exit Sub
End If
Set c = Sheets("base1").[B:B].Find(CDate(TextBox1), , xlValues, xlWhole)
If c Is Nothing Then MsgBox " La date " & TextBox1 & " n'a pas été trouvée !", 48: Exit Sub
Application.Goto c.EntireRow
Unload Me
Notez qu'on peut aussi utiliser Application.Match (EQUIV) :

Code:
Dim i As Variant
If Not IsDate(TextBox1) Then
  MsgBox "Date non valide !", 48
  TextBox1.SetFocus: TextBox1.SelStart = 0: TextBox1.SelLength = Len(TextBox1)
  Exit Sub
End If
With Sheets("base1")
  i = Application.Match(CDbl(CDate(TextBox1)), .[B:B], 0)
  If IsError(i) Then MsgBox " La date " & TextBox1 & " n'a pas été trouvée !", 48: Exit Sub
  Application.Goto .Rows(i)
End With
Unload Me
A+
 
Dernière édition:
Re : Rechercher une date dans une feuille

Re,

Ben oui ça vient de Venise, il y a de la perte en ligne 🙄

Sur mon ordi avec Excel 2007 les 2 codes fonctionnent, désolé pour vous.

Bien sûr il faut qu'en colonne B ce soient des dates (donc des nombres) et non pas des textes.

A+
 
Re : Rechercher une date dans une feuille

Bonjour zephir94; job75

En fait, trouver une date avec FIND et xlValues est facile mais pas évident. Car a) il faut que la largeur de la colonne soit suffisante pour que la date soit correctement affichée sinon on ne trouve rien; b) la valeur affichée doit être identique à la valeur recherchée; c) la propriété FormatNumber de la cellule doit être adaptée au type (String ou Date) de la valeur recherchée.

Une solution : Rechercher une valeur de type DATE après avoir modifié temporairement en m/d/yyyy le format des cellules du champ de recherche et avoir utilisé SHRINKTOFIT= True sur le champ afin d'afficher entièrement la véritable valeur de chaque cellule. Voir démo ci-joint.

Dans ce démo, cliquez sur le bouton ColumnWidth=2 puis alternativement sur "Trouver cette date avec XlValues ShrinkToFit = True" et "ShrinkToFit = False" pour constater que rien n'est trouvé avec "ShrinkToFit = False" si la largeur de la colonne est insuffisante.

Note : Le format de date m/d/yyyy est un format spécial dans Excel qui affiche le même format de date que celui obtenu par la commande CDate, et ce quels que soient les paramètres linguistiques et régionaux de Windows. Ce format spécial est reconnaissable au fait que la date suggérée est précédée d'un astérisque quand on appelle le sous-menu Format de Cellule en cliquant sur une cellule ou un champ d'une feuille Excel.

Cordialement

Docmarti
 

Pièces jointes

Re : Rechercher une date dans une feuille

Bonjour zephir94, Docmarti, le forum,

Une solution pour le cas où les "dates" en colonne B sont soit des nombres soit des textes :

Code:
Private Sub CommandButton1_Click()
Dim dat As Date, c As Range
If Not IsDate(TextBox1) Then
  MsgBox "Date non valide !", 48
  TextBox1.SetFocus: TextBox1.SelStart = 0: TextBox1.SelLength = Len(TextBox1)
  Exit Sub
End If
dat = CDate(TextBox1)
With Sheets("base1")
  For Each c In Intersect(.[B:B], .UsedRange)
    If IsDate(c) Then If CDate(c) = dat Then GoTo 1
  Next
End With
MsgBox " La date " & TextBox1 & " n'a pas été trouvée !", 48: Exit Sub
1 Application.Goto c.EntireRow
Unload Me
End Sub
Les cellules sont analysées une par une.

Il faut bien sûr que les dates soient reconnaissables par VBA.

A+
 
Dernière édition:
Re : Rechercher une date dans une feuille

Bonjour à tous

On peut aussi vérifier dans une plage que l'on sélectionne pour rechercher une date précise avec cette macro qui supprimera les valeurs Date:

Code:
Sub Vérifie_Date()
On Error Resume Next
For Each cell In Selection
If CDate(cell.Text) = "03/01/2014" Then cell.Clear
Next
End Sub
 
Re : Rechercher une date dans une feuille

Re

Un autre exemple pour mettre en gras les dates supposées dans une feuille, j'ai repris les données de la feuille de Docmarti 🙂.

Code:
Sub Vérifie_Date_Zone()
Application.Goto Reference:="Zone"
 For Each cell In Selection
 cell.Select
  If IsDate(cell.Text) = True Then cell.Font.Bold = True
 Next
End Sub
 

Pièces jointes

Re : Rechercher une date dans une feuille

Bonjour à tous


La même que MJ13 mais un chouia plus court 😉
Code:
Sub Vérifie_Date_Zone()
Application.Goto Reference:="Zone"
For Each cell In Selection
cell.Font.Bold = IsDate(cell.Text)
Next
End Sub

NB: C'est juste une histoire de préférence d'écriture, les deux codes faisant au final la même chose 😉
 
Re : Rechercher une date dans une feuille

Bonjour à tous,

Un essai que j'avais commencé à élaborer il y a quelque temps et que j'ai complété.

Le but est de construire une fonction qui renvoie toutes les cellules d'une plage contenant une date donnée.
Cette fonction s'appuie sur la propriété "Value2" des cellules.

Cette fonction est déclarée par : Function TrouverDate(xrg As Range, d) As String
Les paramètres d'entrée sont la plage de cellules où rechercher la date souhaitée et la date recherchée.

En sortie est renvoyée une chaine de caractères qui contient toutes les références des cellules répondant aux critères (les cellules sont des dates possibles et ces dates sont égales à la date recherchée). Ces références sont séparées par une virgule.
ex: si les cellules contenant la date recherchée sont les cellules A20,C7,B10,A7,B2", alors la chaine retournée est:
"a20,c7,b10,a7,b2". Si aucune cellule ne vérifie les conditions, la chaine "vide" est renvoyée.

Il y a une autre fonction déclarée par : Function TrierStringCellule(xs$) As String.
La chaine xs est une chaine de références de cellules de type A1 séparées par des virgules.
la fonction renvoie la même chaine ordonnée par numéro de ligne croissant (et pour une même ligne -> ordonnée par numéro de colonne croissant)
ex: TrierStringCellule("a20,c7,b10,a7,b2") renvoie "B2,A7,C7,B10,A20"

Si x est la chaine renvoyée par TrouverDate, on pourrait être tenté d'utiliser xrg.Parent.range(x) pour avoir le range de toutes les cellules résultats.
Il semble bien que range(x) soit limité au niveau de la taille de la chaine x. Une chaine x très longue provoque une erreur de type 400.

Il vaut mieux passer par un tableau auxiliaire pour parcourir les cellules résultats:
VB:
dim x as string, tablo, elem
x=TrouverDate(plage,celluleDate)
tablo=split(x,",")
for each elem in tablo
   'faire ce qu'on a à faire avec la cellule. Ex:
    plage.parent.range(elem).bold=true
next elem
erase tablo

ou bien si on ne veut que la Nieme (>=1) cellule :
VB:
dim x as string, tablo, cellule as range
x=TrierStringCelluleTrouverDate(plage,celluleDate))
tablo=split(x,",")
set cellule = nothing
if Nieme <= ubound(tablo)+1 then set cellule=plage.parent.range(tablo(Nieme-1))


nota 1: c'est à cause du temps de traitement long de l'opérateur UNION que la fonction renvoie une chaine de caractères et non un range.
nota 2: l'onglet Feuil2 montre une utilisation en tant que fonction personnalisée.
 

Pièces jointes

- 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

  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
250
Réponses
4
Affichages
362
Réponses
4
Affichages
146
Retour