Problème de reconnaissance de date sous VBA Excel 2007
Fermé
tykenta83
Messages postés
4
Date d'inscription
mardi 8 décembre 2015
Statut
Membre
Dernière intervention
10 décembre 2015
-
8 déc. 2015 à 16:32
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 - 12 déc. 2015 à 12:08
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 - 12 déc. 2015 à 12:08
A voir également:
- Problème de reconnaissance de date sous VBA Excel 2007
- Liste déroulante excel - Guide
- Save as pdf office 2007 - Télécharger - Bureautique
- Si et excel - Guide
- Aller à la ligne excel - Guide
- Reconnaissance musique en ligne - Guide
10 réponses
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
8 déc. 2015 à 17:02
8 déc. 2015 à 17:02
Bonjour,
Comme ceci:
Comme ceci:
If Not IsDate(sdate) Then MsgBox "Date non conforme" End If
tykenta83
Messages postés
4
Date d'inscription
mardi 8 décembre 2015
Statut
Membre
Dernière intervention
10 décembre 2015
9 déc. 2015 à 09:00
9 déc. 2015 à 09:00
Bonjour,
Merci de ta réponse, mais c'est effectivement ce que j'avais fait. J'aurais dû faire un copier coller de mon programme au lieu de le recopier "à la main" (oublié le "Is"). Donc cela ne marche toujours pas, as-tu une autre solution?
Merci de ta réponse, mais c'est effectivement ce que j'avais fait. J'aurais dû faire un copier coller de mon programme au lieu de le recopier "à la main" (oublié le "Is"). Donc cela ne marche toujours pas, as-tu une autre solution?
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
9 déc. 2015 à 09:08
9 déc. 2015 à 09:08
Chez moi cela fonctionne très bien!
Pourquoi voudrais tu qu'il te renvoie non conforme pour cette date?
"01/02/1032"
Pourquoi voudrais tu qu'il te renvoie non conforme pour cette date?
"01/02/1032"
tykenta83
Messages postés
4
Date d'inscription
mardi 8 décembre 2015
Statut
Membre
Dernière intervention
10 décembre 2015
9 déc. 2015 à 09:48
9 déc. 2015 à 09:48
Je pensais qu'excel ne prenait en compte que les années à partir de 1900. Comme j'avais un problème sur le test du mois, je voulais voir si'il y avait un problème sur le test de l'année. En ce qui concerne le test sur le mois, cela ne marche pas comme cité dans mon 1er message. c'est d'autant plus surprenant qu'en fait, le mois et l'année sont pris en compte, car si je tape 29/02/2015, il me dit que ce n'est pas conforme et pour 29/02/2106, il ne me le dit pas; il a donc reconnu le mois de février et l'année. D'autre part, si je tape 01/14/2015 dans une cellule excel, il me la cale à gauche, ce qui signifie qu'excel ne la considère pas comme une date, mais comme une chaîne de caractères.
Je suis dans une impasse
Je suis dans une impasse
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
9 déc. 2015 à 10:25
9 déc. 2015 à 10:25
comme ceci:
Dim sdate As String sdate = "29/02/2016" If Not IsDate(sdate) Then MsgBox "Date non conforme" Else Range("A1") = Format(sdate, "dd/mm/yyyy") Selection.NumberFormat = "dd/mm/yyyy;@" End If
tykenta83
Messages postés
4
Date d'inscription
mardi 8 décembre 2015
Statut
Membre
Dernière intervention
10 décembre 2015
10 déc. 2015 à 09:26
10 déc. 2015 à 09:26
Bonjour,
Effectivement avec ce nouveau code , ça marche. Mais 4 interrogations:
1. Je ne comprends pas comment le programme après être arrivé dans "Else", puisse remonter pour afficher le message.
2. Cela ne résous pas complètement mon problème, car je ne veux pas afficher la date dans une cellule; je suis dans une "userbox" et je veux simplement vérifier qu'une date saisie dans une de ses text.box est bien une date effective.
3. Peux-tu me confirmer que le code sans le bloc "Else" marche dans ton excel?
4. Pourquoi, sans le bloc "Else", VBA considère que 29/02/2016 est un bonne date, 01/35/2015 une mauvaise, 35/12/2015,une mauvaise et que 01//14/2015 est une bonne?
Effectivement avec ce nouveau code , ça marche. Mais 4 interrogations:
1. Je ne comprends pas comment le programme après être arrivé dans "Else", puisse remonter pour afficher le message.
2. Cela ne résous pas complètement mon problème, car je ne veux pas afficher la date dans une cellule; je suis dans une "userbox" et je veux simplement vérifier qu'une date saisie dans une de ses text.box est bien une date effective.
3. Peux-tu me confirmer que le code sans le bloc "Else" marche dans ton excel?
4. Pourquoi, sans le bloc "Else", VBA considère que 29/02/2016 est un bonne date, 01/35/2015 une mauvaise, 35/12/2015,une mauvaise et que 01//14/2015 est une bonne?
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
10 déc. 2015 à 15:41
10 déc. 2015 à 15:41
A mettre dans un bouton
Dim sdate As String sdate = TextBox1.Value If Not IsDate(sdate) Then MsgBox "Date non conforme" Else TextBox1.Value = Format(TextBox1.Value, "dd/mm/yyyy") End If
Bonjour
Non cela ne marche pas chez moi. En fait la commande "Format" me transpose ma date 02/14/2015 en 14/02/2015 et bien sûr cette date est valide! A bout d'arguments j'ai opté pour le code suivant :
If Not IsDate(sdate) Or Mid(sdate, 4, 2) > 12 Then
MsgBox "Date non conforme"
End If
Mais je suis frustré, intellectuellement parlant.
Merci beaucoup de m'avoir aidé, en tous cas.
Non cela ne marche pas chez moi. En fait la commande "Format" me transpose ma date 02/14/2015 en 14/02/2015 et bien sûr cette date est valide! A bout d'arguments j'ai opté pour le code suivant :
If Not IsDate(sdate) Or Mid(sdate, 4, 2) > 12 Then
MsgBox "Date non conforme"
End If
Mais je suis frustré, intellectuellement parlant.
Merci beaucoup de m'avoir aidé, en tous cas.
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
12 déc. 2015 à 08:13
12 déc. 2015 à 08:13
Pour être sur que la saisie d'une date est valide, il y a le contrôle datepicker:
http://www.excelabo.net/excel/datepicker_2010
http://www.excelabo.net/excel/datepicker_2010
cs_Le Pivert
Messages postés
7904
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
14 août 2024
729
12 déc. 2015 à 12:08
12 déc. 2015 à 12:08
voici un exemple pour forcer la saisie d'une date dans un TextBox:
Option Explicit Dim Masque, Caractère, Séparateur, St As String Dim ChrsAffichés, Compteur, Longueur, i, Rt As Integer Dim ToucheSupp As Boolean Private Sub CommandButton1_Click() Dim sdate As String sdate = TextBox1.Value If Not IsDate(sdate) Or Mid(sdate, 4, 2) > 12 Then MsgBox "Date non conforme" Else TextBox1.Value = Format(TextBox1.Value, "dd/mm/yyyy") Me.Caption = "La date saisie " & TextBox1.Tag & " est correcte" End If End Sub Private Sub TextBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean) SelectNext End Sub Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) If IsNumeric(Chr(KeyAscii)) = True Then TextBox1.Tag = TextBox1.Tag & Chr(KeyAscii) Formate End If KeyAscii = 0 End Sub Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) If KeyCode = 46 Then Formate ElseIf KeyCode = 8 Then St = TextBox1.Tag If Len(St) > 0 Then St = Replace(St, Séparateur, "") St = Left(St, Len(St) - 1) TextBox1.Tag = St Formate End If End If SelectNext End Sub Private Sub TextBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) SelectNext End Sub Private Sub SelectNext() St = TextBox1.Tag St = Replace(St, Séparateur, "") Compteur = 0 'On sélectionne le prochain emplacement For i = 1 To Len(TextBox1.Text) If Mid(TextBox1.Text, i, 1) <> Séparateur Then Compteur = Compteur + 1 If Compteur > Len(St) Then TextBox1.SetFocus TextBox1.SelStart = i - 1 TextBox1.SelLength = 0 Exit For End If End If Next i 'Le contenu de textbox1.Tag est prêt à être utilisé If Len(TextBox1.Tag) = Len(Masque) Then TextBox1.SelStart = Len(TextBox1.Text) TextBox1.SelLength = 0 End If End Sub Private Sub Formate() i = 0 St = "" 'On supprime les séparateurs TextBox1.Tag = Replace(TextBox1.Tag, Séparateur, "") 'On remet le tout au format pré-défini For Rt = 1 To Len(Masque) If Mid(Masque, Rt, 1) = "#" Then i = i + 1 If i > Len(TextBox1.Tag) Then Exit For St = St & Mid(TextBox1.Tag, i, 1) Else St = St & Séparateur End If Next Rt TextBox1.Tag = St 'Affichage du chiffre à titre d'exemple Me.Caption = "La date saisie est: " & TextBox1.Tag 'On remet le textbox1 au même format mais avec les caractères de 'subtituition et en tenant compte des chiffre qui doivent rester visibles St = "" TextBox1.Text = "" i = 0 For Rt = 1 To Len(TextBox1.Tag) If Mid(TextBox1.Tag, Rt, 1) = Séparateur Then St = St & Séparateur Else i = i + 1 If i > ChrsAffichés Then St = St & Caractère Else St = St & Mid(TextBox1.Tag, Rt, 1) End If End If Next Rt 'On remplit le restant du textbox1 conformément au masque If Len(TextBox1.Tag) < Len(Masque) Then For Rt = Len(TextBox1.Tag) + 1 To Len(Masque) If Mid(Masque, Rt, 1) = Séparateur Then St = St & Séparateur Else St = St & Caractère End If Next Rt End If TextBox1.Text = St End Sub Private Sub CompteChiffres() Longueur = 0 For i = 1 To Len(Masque) If Mid(Masque, i, 1) = "#" Then Longueur = Longueur + 1 Next i End Sub Private Sub UserForm_Initialize() Masque = "##/##/####" ChrsAffichés = "10" Séparateur = "/" CompteChiffres Formate TextBox1.SelStart = 0 TextBox1.SelLength = 0 TextBox1.MaxLength = Len(Masque) TextBox1 = Masque End Sub