Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/02/2011, 10h46   #1
Membre régulier
 
Inscription : novembre 2008
Messages : 219
Détails du profil
Informations personnelles :
Âge : 25
Localisation : Suisse

Informations forums :
Inscription : novembre 2008
Messages : 219
Points : 79
Points : 79
Envoyer un message via MSN à Bobble
Par défaut CDate, comment traiter l'erreur 13 <Incompatibilité de type>

Bonjour,
Je travail avec Access 2003, vba 6.4.

J'utilise la fonction CDate pour parser de string à Date.
Le problème c'est que des fois j'ai des String genre "30.02.2010"...et la fonction retourne "Error 13 <Incompatibilité de type>".

J'ai essayé de récupérer cette erreur avec "On error GoTo"...mais ça ne fonctionne pas.
Quand j'ai cette erreur, la ligne devient jaune et le programme est bloqué...le seul moyen c'est de tout arrêter et recommencer...

Il y a un autre moyen pour récupérer cette erreur et de permettre ainsi à ma boucle de continuer jusqu'à sa fin??
Bobble est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2011, 11h21   #2
Membre habitué
 
Inscription : juillet 2010
Messages : 117
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2010
Messages : 117
Points : 140
Points : 140
Salutations,

Je pense que ton problème vient du fait que le format "DD.MM.YYYY" n'est pas reconu.
Pour le contourner il faudrait que tu remplaces les "." par des "/". Pour ce faire je te propose le code suivant (à adapter bien sûr) :

Code :
1
2
3
4
5
6
7
8
Dim madate as String
Dim madate2 as Date
 
if InStr(madate,".") <> 0 then 'Test la présence du caractère "." dans la date
     Replace(madate,".","/") 'Remplace les "." par des "/"
end if
 
madate2 = CDate(madate)
Cordialement,
__________________
"Je suis capable du meilleur comme du pire, mais dans le pire, c'est moi le meilleur" Coluche.
Manhexter est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2011, 12h10   #3
Membre régulier
 
Inscription : novembre 2008
Messages : 219
Détails du profil
Informations personnelles :
Âge : 25
Localisation : Suisse

Informations forums :
Inscription : novembre 2008
Messages : 219
Points : 79
Points : 79
Envoyer un message via MSN à Bobble
Merci beaucoup pour la réponse!

Malheureusement le format de la date ce n'est pas la cause de l'erreur.
Le souci c'est les dates qui n'existent pas.. 30, 31 février, 31 avril, 31 juin...
Si je met 28 février tout ce passe bien.

J'aimerais récupérer l'erreur, de façon à signaler les champs avec une date inexistante et faire continuer mon code sur les champs qui sont ok.
Bobble est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2011, 12h53   #4
Membre habitué
 
Inscription : juillet 2010
Messages : 117
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2010
Messages : 117
Points : 140
Points : 140
Autant pour moi, je n'avais effectivement pas compris l'origine du problème.

Donc étant donné que parfois c'est ta date d'entrée qui est fausse, on peut imaginer une solution qui consiste à déterminer le dernier jour du mois correspondant à ta date et ensuite comparer les numéros de jour. Si celui que tu as en entrée est plus grand que celui renvoyé par la fonction alors c'est que tu es en erreur.

Je te propose la fonction suivante puor récupérer le dernier jour existant réellement sur le mois :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Function DernierVraiJour(madate as String) as String 'Le paramètre est ta date d'entrée
 
Dim vraidate as Date
 
vraidate = CDate("01/" & Mid(madate,4,2) & "/" & Right(madate,4)) 'On construit une date qui correspond au premier jour de ton mois
vraidate = DateAdd("m", 1, vraidate) 'On ajoute un mois
vraidate = DateAdd("d",-1,vraidate) 'On enlève un jour
 
'A ce stade on a donc le dernier jour du mois de ta date d'entrée dans la variable vraidate
 
DernierVraiJour = Left(vraidate,2) 'La fonction renvoie le numéro du jour
 
End Function
Ce code te permet de traiter les dates incorèctes et les dates correctes de manière distincte via une comparaison entre les numéros de jour. Je trouve que c'est plus propre et plus ouvert que le fait de simplement vouloir sauter les cas d'erreur.

Voilà, j'espère ne pas avoir tapé à côté cette fois.

Cordialement,
__________________
"Je suis capable du meilleur comme du pire, mais dans le pire, c'est moi le meilleur" Coluche.
Manhexter est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/02/2011, 13h04   #5
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 609
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 609
Points : 30 959
Points : 30 959
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
Bonjour

Regardes du coté de la fonction IsDate.

Sinon, pourquoi as-tu des dates erronées ? D'où viennent-elles ? Est-ce qu'il s'agit de mauvaises saisies ? Si oui il y a des solutions pour canaliser celle-ci.

Philippe
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.

Inutile de m'envoyer un MP pour des questions techniques ou de me relancer , je n'y répondrais pas.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 09/02/2011, 07h47   #6
Membre régulier
 
Inscription : novembre 2008
Messages : 219
Détails du profil
Informations personnelles :
Âge : 25
Localisation : Suisse

Informations forums :
Inscription : novembre 2008
Messages : 219
Points : 79
Points : 79
Envoyer un message via MSN à Bobble
Merci pour toutes les réponses!

Les dates erronées sont effectivement des mauvaises saisies...mais pas à cause de vba ou de la bdd. C'est un programme externe java qui a fais ça... bug des mois de 0 à 11... (le 30.02.2010 serais donc le 30 mars 2010...)
De plus, ces dates sont contenues dans un champ texte, et non pas date, je dois les extraire et y ajouter un mois.
Mais seulement pour celles avant une certaine date, car après le programme java a été corrigé... d'où l'utilisation du CDate pour ensuite les comparer.

Les 2 solutions fonctionnent je vais retenir le IsDate, beaucoup plus simple et qui me permet de garder le "vraie" jour du mois

Merci beaucoup!!
Bobble est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2011, 08h22   #7
Membre habitué
 
Inscription : juillet 2010
Messages : 117
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2010
Messages : 117
Points : 140
Points : 140
Je prends note aussi du IsDate que je ne connaissais pas. *s'en va simplifier ses codes *
__________________
"Je suis capable du meilleur comme du pire, mais dans le pire, c'est moi le meilleur" Coluche.
Manhexter est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h49.


 
 
 
 
Partenaires

Hébergement Web