Inconvénient sur la fonction isdate

  • Initiateur de la discussion Initiateur de la discussion atlas
  • Date de début Date de début

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 !

atlas

XLDnaute Occasionnel
Bonjour je voudrais tester si une cellule contient une date .Pour cela j'aie fait une tentative avec isdate .Cependant la fonction a un ecueil , elle laisse passer le test si la donnée est convertible en date .
Ex si une cellule contient le nombre 9 , isdate considère que c'est une date parce que 9 est convertible en date .Ce qui est un peu abberrant ...
Comment faire ? Quel raisonnement en bon français dois-je tenir avant de taper du code .

Code:
Sub test()						
						
Dim daterecherchee As String						
daterecherchee = ThisWorkbook.Worksheets("Test").Cells(6, 1).Value 
						
If IsDate(daterecherchee) = True Then 						
MsgBox "Ceci est une vrai date"						
Else						
MsgBox ("Cela peut etre convertie en date mais ce n'est pas une date")						
End If						
						
End Sub

NB : je ne fais pas trop confiance à excel pour les calculs parce qu'il y a souvent des petits pieges du genre : dans une base de donnée quelques chiffres sont en format string du coup la somme qui suit est fausse ...Des trucs un peu lourds et tordus .On croit avoir traité le problème des doublons et hop un jour des doublons sortent de nul part .Bref ...Pas si facile que ça excel , je ne sais pas trop sécuriser mes saisies !
 

Pièces jointes

Re : Inconvénient sur la fonction isdate

Bonsoir Atlas 🙂,
Sachant que, par exemple, le 1er janvier 2010 est en date Excel équivalent à 40179, il te suffit de vérifier si daterecherchee > 40179 pour vérifier qu'elle est supérieure à 01/01/10 😛...
Bonne soirée 😎
 
Re : Inconvénient sur la fonction isdate

Bonsoir atlas, JNP,

Malheureusement, je crois qu'il n'y pas (à ma connaissance du moins) de solution fiable pour définir si la cellule contient une date. En effet, les dates étant gérées par excel comme des nombres, n'importe quelle valeur, même négative, sera considérée comme un numéro de série se rapportant à une date.

La seule alternative envisageable est d'éviter de mélanger nombres et dates dans une même colonne (ou ligne) de cellules. La solution de considérer des bornes de valeurs pour les dates empêcherait de saisir des nombres correspondants aux numéros de série de ces dates.

Espérant avoir été clair.

Cordialement.
 
Re : Inconvénient sur la fonction isdate

Hélas papou–net mes données mélangent date et valeur numériques sur la même colonne

J’aie trouvé cette solution et vos avis m’intéressent pour continuer de boucher les trous .
Je me suis demandé aussi si je ne devais pas caler la variable dans un tableau (tant pis un tableau à un seule donnée et une seule dimension puis jouer avec le type de la variable) .Cette solution est adaptée au nouveau fichier joint .

Code:
Sub test1()

Dim daterecherchee As Variant
daterecherchee = CVar(ThisWorkbook.Worksheets("Test").Cells(6, 1).Value) 

If TypeName(daterecherchee) = "Date" And TypeName(daterecherchee) <> "Empty" Then 
MsgBox "Ceci est une vraie date" & ThisWorkbook.Worksheets("Test").Cells(6, 1).Value
End If

If TypeName(daterecherchee) = "Double" Then
MsgBox "ceci est une valeur numérique" & ThisWorkbook.Worksheets("Test").Cells(6, 1).Value
End If

Call test2

End Sub

Sub test2()

Dim daterecherchee As Variant
daterecherchee = CVar(ThisWorkbook.Worksheets("Test").Cells(13, 2).Value) 

If TypeName(daterecherchee) = "Date" And TypeName(daterecherchee) <> "Empty" Then 
MsgBox "Ceci est une vraie date" & ThisWorkbook.Worksheets("Test").Cells(13, 2).Value
End If

If TypeName(daterecherchee) = "Double" Then
MsgBox "ceci est une valeur numérique" & ThisWorkbook.Worksheets("Test").Cells(13, 2).Value
End If

Call test3

End Sub

Sub test3()

Dim daterecherchee As Variant
daterecherchee = CVar(ThisWorkbook.Worksheets("Test").Cells(1, 6).Value) 

If TypeName(daterecherchee) = "Date" And TypeName(daterecherchee) <> "Empty" Then
MsgBox "Ceci est une vraie date" & ThisWorkbook.Worksheets("Test").Cells(1, 6).Value
End If

If TypeName(daterecherchee) = "Empty" Then
MsgBox "La cellule est vide" & ThisWorkbook.Worksheets("Test").Cells(1, 6).Value
End If


End Sub
 

Pièces jointes

Dernière édition:
Re : Inconvénient sur la fonction isdate

Re 🙂,
Comme ceci peut-être 😛
Code:
[COLOR=blue]Sub[/COLOR] TestJNP()
[COLOR=blue]Dim[/COLOR] Cellule [COLOR=blue]As[/COLOR] Range, Message [COLOR=blue]As String[/COLOR]
[COLOR=blue]For Each[/COLOR] Cellule [COLOR=blue]In[/COLOR] Range("A1:E30").SpecialCells(xlCellTypeConstants)
[COLOR=blue]If[/COLOR] Len(Cellule.Text) = 10 [COLOR=blue]And[/COLOR] Len(Replace(Cellule.Text, "/", "")) = 8 [COLOR=blue]Then[/COLOR]
Message = Message & vbCrLf & Cellule.Text
[COLOR=blue]End If[/COLOR]
[COLOR=blue]Next[/COLOR]
MsgBox "Les seules dates sont  : " & Message
[COLOR=blue]End Sub[/COLOR]
Bonne journée 😎
 
- 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

Réponses
22
Affichages
3 K
Retour