Importation Excel/Access Problème de date

Selune6666 Messages postés 59 Date d'inscription mardi 23 janvier 2007 Statut Membre Dernière intervention 14 janvier 2008 - 7 mai 2007 à 15:56
Selune6666 Messages postés 59 Date d'inscription mardi 23 janvier 2007 Statut Membre Dernière intervention 14 janvier 2008 - 23 mai 2007 à 09:38
Bonjour,

Voila j'ai un petit problème et je ne sais pas comment le résoudre
J'importe un fichier excel dans ma base de donnée access et j'ai un problème avec les colonnes qui ont des dates.

Sous excel j'ai une colonne dans laquelle est inscrit des dates sous cette forme :
2006-11-13 11:00 AM soit (aaa-mm-jj hh:mm AM/PM)

Donc le champ auquel cette cellule correspond dans ma base de donnée est de type date/heure au format  Date,général

Dans mon code basic j'utilise ceci:
Private sub blablabla
Dim iDe as Date
blablabla
iDe = ClasseurXLS.cells(i,9)

Il me dit que c'est une incompatibilité de type.
Je ne sais pas comment je peux résoudre cela je me doute que cela ne doit pas etre bien compliquer cependant je ne sais pas comment faire et je sollicite donc votre aide. Merci d'avance

65 réponses

cs_Maroxye Messages postés 177 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 16 octobre 2012
7 mai 2007 à 22:43
C'est parce que Access ne prend pas le paramètre AM/PM, mais plutôt ce format:


2007-05-07 16:41:06

Alors, sois tu change la format de la cellule dans Excel pour un qui est compatible avec Access

Ou

Tu va convertir le format dans le code, dans le genre



iDe year(ClasseurXLS.cells(i,9)) &"-" &month(iDe ClasseurXLS.cells(i,9)) &"-" &Day(iDe = ClasseurXLS.cells(i,9))


ou bien, tu peux y aller aussi avec formatdatetime,

iDe = formatdatetime(ClasseurXLS.cells(i,9),2)
(je l'écris de mémoire peut-être n'est-ce pas tout-à-fait exact)



 Maroxye
0
cavo789 Messages postés 168 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 28 juillet 2009 1
8 mai 2007 à 12:31
Bonjour.

Le sujet du topic est importation et pourtant je ne vois pas d'importation mais plutôt de lien direct. 

Pourquoi ne pas réellement faire un import ?   Va voir du côté de DoCMD.TransfertSpreadsheet.

Je travaille tous les jours avec Excel et Access.   Je préfère ne jamais importer un fichier XLS mais d'abord le convertir en TXT avant importation.   Ainsi, je peux définir un layout d'importation, renommer les champs, en skipper certains, ...

Christophe
0
Selune6666 Messages postés 59 Date d'inscription mardi 23 janvier 2007 Statut Membre Dernière intervention 14 janvier 2008
9 mai 2007 à 09:58
Bonjour, désolé du délais de réponse c'était jour férié ^^

Maroxye
Je te remercie cependant cela ne marche pas >_< il me dit toujours qu'il y a une incompatibilité de type. Et sinon oui c'était écris correctement ta mémoire marche bien ^^ (enfin je crois)
Je ne pense pas pouvoir changer le fichier excel pour la simple raison que mes futurs utilisateurs ne pourront pas le faire donc je dois gérer cela par mon code basic.

Cavo789
Si je le convertit en txt avant importation pourrais je le remettre dans le format initial par la suite?
Il est evident que j'aurais passer cela en string mais je dois faire des calculs par la suite avec ces dates et je ne sais pas comment faire si je le fait passer en string pour le refaire passer au format date/heure.
Qu'est ce qu'un layout d'importation? Qu'est ce que skipper?
Désolé pour toutes ces questions mais je débute alors ^^.....

merci a vous je continu de chercher avec les pistes que vous m'avez donné. Si vous avez d'autres idées n'hésitez pas à poster ^^
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
9 mai 2007 à 10:16
Salut,

je ne sais pas si la fonction Format() est disponible en .net mais c'est de cette manière que tu pourrais remettre le bon format apres le passage en string
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Selune6666 Messages postés 59 Date d'inscription mardi 23 janvier 2007 Statut Membre Dernière intervention 14 janvier 2008
9 mai 2007 à 10:34
Je ne travaille pas en .net mais en VBA
merci de ta réponse je vais regarder ce que fais la fonction format()
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
9 mai 2007 à 10:46
je pense donc que format(ta_chaine, "dd/mmmm/yyyy hh:mm:ss") devrait fonctionner
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
9 mai 2007 à 10:48
Au fait, la prochaine fois, vérifie bien le theme de ton post car tu l'as mis en vb.net (d'où ma méprise) et pas en VB6/langage dérivé/VBA
0
Selune6666 Messages postés 59 Date d'inscription mardi 23 janvier 2007 Statut Membre Dernière intervention 14 janvier 2008
9 mai 2007 à 11:20
Re, merci de ta réponse nicko11 et je pensais avoir mis le sujet dans Base de données/ Access
mmmh donc je marque un truc de ce genre
iDe=format(ClasseurXLS.cells(i,9), "dd/mmm/yyyy hh:mm:ss AM/PM")
cela ne marche pas.
le "dd/mmm/yyyy hh:mm:ss AM/PM" viens de la fonction format d'apres ce que j'ai vu dans l'aide VB
petite question serait ce plus simple de m'aider pour vous si je marque l'intégralité de mon code?
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
9 mai 2007 à 11:44
Au pire, donne nous quelques exemples de ce qu'il peut y avoir dans les cellules pour faire des tests. Donne nous le format exact de ce que tu veux (avec exemple).

Le code que je t'ai donné marche bien de mon coté (pas de AM/PM). Je sais pas si c'est possible je vais voir (pour le AM/PM) mais au pire tu peux le rajouter en code.
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
9 mai 2007 à 11:49
OK, je viens de faire l'essai avec ca dans mon code:

    Texte0 = Format("26/11/82 21:32", "dddd  dd mmmm yyyy hh:mm:ss AM/PM")

Et dans ma textebox, j'ai eu ca:

vendredi 26 novembre 1982 09:32:00 PM

Ca te va ?
0
Selune6666 Messages postés 59 Date d'inscription mardi 23 janvier 2007 Statut Membre Dernière intervention 14 janvier 2008
9 mai 2007 à 12:15
Tiens deja une partie de mon code

Option compare database
public classeurXLS as object

Private sub commande3_Click()
Dim Nom as string
Dim i as long
Dim iEmplacement as string
Dim iEquipement as string
Dim iDe as Date
Dim iA as Date
Dim IEntrée as Integer
Dim iAlarmes_entrées as integer
Dim sql as string
Dim classeurXLS: Set ClasseurXLS=CreateObject("Excel.application")
Setdbs as currentDb

If(URL.value<> "") then
Nom=URL
Else
Msgbox "url du fichier manquant",vbexclamation+VbOKonly
Exit sub
end if

ClasseurXLS.workbooks.open Nom
i=2
do while classeurXLS.cells(i,1)<> ""
iEmplacement=ClasseurXLS.cells(i,1)
iEquipement=ClasseurXLS.cells(i,5)
iDe=ClasseurXLS.cells(i,9)
iA=ClasseurXLS.cells(i,10)
iEntrées=ClasseurXLS.cells(i,13)
iAlarmes_entrée=ClasseurXLS.cells(i,15)
SQL="insert into Comper(Emplacement, Equipement, De ,A ,Entrées, Alarmes_entrée) values (' " & VEmplamement & " ', ' " & VEquipement & " ' , ' " & VDe & " ' , ' " & VA & " ' , ' " & VEntrées & " ' , ' " & VAlarmes_entrée & " ' );"
dbs.execute SQL
i= i+1
loop
ClasseurXLS.workbook.close
Msgbox"ok"
End sub

Voili voilou ^^
Sur ce je vais réessayer le code
0
Selune6666 Messages postés 59 Date d'inscription mardi 23 janvier 2007 Statut Membre Dernière intervention 14 janvier 2008
9 mai 2007 à 12:20
juste petite précision le début du code avec URL ce n'est pas un URL c'est un chemin.

Avant j'utilise un code qui m'ouvre une boite de dialogue windows qui me permet de choisir le fichier excel que je veux importer. Je selectionne ce fichier et le chemin du fichier s'affiche dans une texte box quand j'appuie sur enregistrer (commande 3) alors mon code commence.
dc la petite partie

If(URL.value<> "") then
Nom=URL
Else
Msgbox "url du fichier manquant",vbexclamation+VbOKonly
Exit sub
end if

 c'est pour lui dire le chemin de la feuille excel sur laquelle je vais bosser.
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
9 mai 2007 à 14:03
En fait, je crois que j'ai mal compris ton pb, donc de que je viens de comprendre (pour vérifier), tu extrais une valeuur d'excel au format date et tu souhaites l'inserer dans un champ date or VB te dis qu'il y a une erreur de compatibilité.

Essaies de faire ainsi:

Dim iDe as String      'au lieu de date
Dim iA as String

Et dans ta base de données tu champs date par texte. J'aime pas les champs date car justement il provoque des erreurs pour pas grand chose. Alors moi, je les éviter et je fais le formatage par code.

Sinon, je suis pas sur mais il est possible que ta requete ne soit pas exacte aussi. Il faudrait que tu regarde ton aide mais il me semble que les dates ont un traitement spéciale dans les requetes :

SQL="insert into Comper(Emplacement, Equipement, De ,A ,Entrées, Alarmes_entrée) values (' " & VEmplamement & " ', ' " & VEquipement & " ' , ' " & VDe & " ' , ' " & VA & " ' , ' " & VEntrées & " ' , ' " & VAlarmes_entrée & " ' );"

Par contre, c'est quoi VDe et VA. Si c'est les valeurs correspondant aux date, essaies de remplacer les '  ' par des #   #.
0
Selune6666 Messages postés 59 Date d'inscription mardi 23 janvier 2007 Statut Membre Dernière intervention 14 janvier 2008
9 mai 2007 à 14:12
oui j'ai tenter quelque petit truc de ce genre mais je vais retenter une fois de plus on vera bien.
Par contre si je met les date en string je pourrais pu calculer avec non?
je mange et j'essai oki ^^
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
9 mai 2007 à 14:35
Ici, je ne vois pas de calculs, il s'agit d'enregistrer dans la base de données. Pour les calculs, décrit nous précisemment ce que tu veux faire et à partir de quoi pour voir comment tu pourrais faire.
0
cavo789 Messages postés 168 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 28 juillet 2009 1
9 mai 2007 à 15:11
Précision par rapport à une question qui m'a été posée précédement : "puis-je le remettre ensuite en Excel?"

Oui bien sûr,  tout comme tu as une instruction DoCmd.Importxxxx, tu as DoCMD.TransfertSpreadsheet acExport qui te permet d'exporter une table vers un fichier Excel.

Christophe
0
Selune6666 Messages postés 59 Date d'inscription mardi 23 janvier 2007 Statut Membre Dernière intervention 14 janvier 2008
9 mai 2007 à 15:21
oki


Alors en fait ces enregistrement se font toutes les 5 mins.Sur un autre formulaire je vais demander a mon utilisateur l'intervalle de temps qu'il souhaite pour les enregistrements.Un enregistrement comprend : un equipement , un emplacement ,  une date de debut (de) une date de fin (A) ,  un nombre d'entrée ,  un nombre d'alarme.


Par exemple s'il veut voir les enregistrements tous les quart d'heure dans ce cas je devrait additionner 3 lignes pour les entres , les alarmes. Et les dates je sais pas encore comment jvais me debrouiller.
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
9 mai 2007 à 16:02
En fait, pour l'instant  ce qui l'intéresse, c'est les dates.
Donne nous un exemple concret de ce qu'il y a dans tes cellules Excel (08/04/07), ce que tu voudrais dans ta base. Puis quell type de calcul tu voudrais faire car la je suis un peu perdu, ca serait bien de commencer par ton pb principal (l'objet de ta question était une erreur de compatibilité).

Est ce que le passage en String a fonctionné ? Ensuite, tu me dis, OK mais on pourra plus faire d'opération. Dis nous quel type d'opérations. Allons y morceaux par morceaux car sinon on va pas avancer.
0
Selune6666 Messages postés 59 Date d'inscription mardi 23 janvier 2007 Statut Membre Dernière intervention 14 janvier 2008
14 mai 2007 à 09:22
Bonjour a tous ,
Veuillez m'excuser pour le retard de post mais j'ai été dans l'impossibilité de pouvoir poster avant.

Apparement en faisant passer les dates en string je n'ai plus de problème pour les importer. Cependant le programme me renvois une autre Erreur,

erreur 1004:
La méthode Open de la classe workboook à échoué.

Je rappel la partie de code:
Private sub commande3_click()
Dim nom as string
dim classeur XLS: set Classeur XLS= createObject("Excel.application")
Set dbs = currentDb

If (URL.value<> "") then
Nom=URL
else
Msgbox"url manquant"
exit sub
end if

ClasseurXLS.workbooks.Open Nom
(ce qu'il y a à importer)
ClasseurXLS.workbooks.close

voila je vais chercher de mon coter si vous avez des suggestion je les accepterais avec joie ^^
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
14 mai 2007 à 09:54
Salut,

Nom=URL.value  peut etre et en meme temps, URL à t-elle une valeur correcte ?
0
Rejoignez-nous