begin process at 2010 03 22 06:47:55
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive Visual Basic & VB.NET

 > 

Archives Visual Basic

 > 

VBA

 > 

Dates indomptables sous VBA


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Dates indomptables sous VBA

mardi 21 septembre 2004 à 19:53:29 | Dates indomptables sous VBA

tiberus

Bonjour

Je fais appel à vos lumières, n'ayant rien trouvé sur le forum. J'ai le problème suivant, sous VBA dans Excel. J'aimerais que dans la cellule d'une feuille, l'utilisateur saisisse une date. Seul format accepté: jjmmaaaa (ex: 03072004, sans points, ni tirets ni espaces). La macro présente dans la fonction CHANGE doit évaluer si la date a bien ce format-là (tout autre format doit être refusé). Elle doit aussi vérifier si la date existe (ex 29022003 = invalide) et si elle se situe après 1900 et avant 2050. Lorsque tous ces contrôles sont passés, VBA convertit le format TEXTE de la date au format DATE.

Un informaticien m'a rédigé le code ci-dessous, qui fonctionne? presque! Exemple: si l'utilisateur saisit 04.08.04 (format erroné), Excel réagit. Mais après avoir effacé la valeur, tapé une autre date au format correct, si je retape 04.08.04, cette fois-ci VBA ne détecte plus l'erreur. Si quelqu'un a la clé du mystère ainsi que des modifications à apporter au code, je suis preneur. Casse-tête, en tout cas pour moi. Merci d'avance, folks!

Voici le code:

Private PremierPassage As Boolean

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim ContenuDate
Dim ErreurRencontree As Boolean
ContenuDate = Range("D13").Text
ErreurRencontree = False

If Target.Address = "$D$13" Then
If Range("D13").Text = "" Then
Range("D13").NumberFormat = "@"
'MsgBox ("Aucune donnée")
'ElseIf Len(Range("D13").Text) <> 8 Or Not IsNumeric(Range("D13").Text) Then
'MsgBox ("Pas 8 chiffres ou pas numérique")
Else
If Len(Range("D13").Text) = 8 And IsNumeric(Range("D13").Text) Then
If Mid(ContenuDate, 5, 4) > 1900 And Mid(ContenuDate, 5, 4) < 2050 Then
If IsDate(Mid(ContenuDate, 1, 2) & "/" & Mid(ContenuDate, 3, 2) & "/" & Mid(ContenuDate, 5, 4)) Then
PremierPassage = True
Range("D13").Value = Mid(ContenuDate, 1, 2) & "/" & Mid(ContenuDate, 3, 2) & "/" & Mid(ContenuDate, 5, 4)
Range("D13").NumberFormat = "dd\/mm\/yyyy"
MsgBox ("Date ok"), vbInformation, "Tout va bien !"
Else
ErreurRencontree = True
MsgBox "Date inexistante", vbExclamation, "Erreur"
End If
Else
ErreurRencontree = True
MsgBox "Date pas dans les bornes", vbExclamation, "Erreur"
End If
Else
If Not PremierPassage Then
ErreurRencontree = True
MsgBox ("Saisie invalide"), vbExclamation, "Erreur"
PremierPassage = False
End If
End If
End If
If ErreurRencontree Then
Range("D13").Select
Selection.ClearContents
Range("D13").NumberFormat = "@"
Range("D13").Select
End If
End If

End Sub


tiberus
mardi 21 septembre 2004 à 21:46:09 | Re : Dates indomptables sous VBA

Crash_overide12

Son codes est pas mal !
Moi perso j'aurais plutot essayer d'interdire la frappe des touches "." "/" et tou les caractères spéciaux par des fonction :

Private Sub Worksheet_KeyPress(KeyAscii As Integer)
If Not Chr(KeyAscii) Like "[0123456789]" And KeyAscii = 40 Then KeyAscii = 0
End Sub

voila !
Mais n'ayant pas tester je ne peut pas t'affirmer a 100% ke sa marchera !
mardi 21 septembre 2004 à 23:59:28 | Re : Dates indomptables sous VBA

tiberus

Oui, mais je ne pense pas que ta solution soit utilisable, puisque le contrôle se fait directement sur la cellule d'une feuille (et non un userform, trop capricieux à régler pour mes connaissances approximatives). L'option KEYPRESS n'est donc pas disponible. Où je me trompe? VBA peut-il quand même détecter quelles touches ont été pressées avec la fonction CHANGE? No sé

tiberus
jeudi 23 septembre 2004 à 12:56:30 | Re : Dates indomptables sous VBA

ozar

Pkoi se casser la tête à réécrire des fonctions qui existe déjà sous vba. Il y a une fonction IsDate inclu dans vba qui te retourne un Booléen. Du coup tu fais :
If IsDate(Valeur à tester) then
Action à effectuer si la date est bonne
Else
Action à effectuer si la date est mauvaise
End if

Voilà c tt


Cette discussion est classée dans : date, mid, range, d13, contenudate


Répondre à ce message

Sujets en rapport avec ce message

Avec $ ou sans $ ???? [ par Appil ] Quelle est la diférence entre ces fonctions :Date et Date$Time et Times$Mid et Mid$Left et Left$...Merci d'avance-=-[ Golden-X] -=- date du jour [ par lea75 ] Bonjour à tous,J'aimerais afficher dans 3 textbox la date du jour.Une pour le jour, l'autre pour le mois et pour l'année.J'ai mis dans une variable la listbox jour + date [ par ecthug ] Salut je voudrais remplir ma list box à partir d'une feuille excel en ayant dans ma listbox    "  Mar  05/04/05  "  pour mardi 5 avrilmais  comment fa Déterminer une plage de données [ par apz ] Bonjour,. A l'aide d'une valeur recuperer, j'aimerais pouvoir determiner la plage dans laquelle se trouve la date du jour. <FONT face=Arial c vba - formulaire [ par pitros ] Rép. Reconnaître le format date [ par lenemmasque ] Bonjour à tous !Je travaille sur un petit fichier Excel dans le cadre de mon travail. J'ai programmé une macro pour faire une mise à jour quotidienne. Besoin d'aide pour un code VBA [ par dinky059 ] Bonsoir,En fait, je suis débutant avec le langage VBA et je dois importer des fichiers .txt sur excel. J'arrive à importer un seul fichier à la fois e Month(Date) problème macro [ par bubus33 ] Bonjour,j'ai fait la macro suivante dans workbook pour la lancer à l'ouverture du fichier excel:Sub maj_qtite()Dim j As IntegerDim i As IntegerDim l A Erreur "L'indice n'appartient pas à la sélection" [ par kiligur ] Bonjour,Voilà ça fait un ptit moment que je suis cette fameuse erreur et je n'arrive pas à trouver la solution sur les forums.Voici mon code :Private Erreur execution 1004 [ par chnordiste ] Bonjour à tous, Grâce a une macro, je souhaite rechercher la ligne qui correspond à un "test" effectué à une "date" précise pour modifier la colonne C


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,437 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales