Selune6666
Messages postés59Date d'inscriptionmardi 23 janvier 2007StatutMembreDernière intervention14 janvier 2008
-
7 mai 2007 à 15:56
Selune6666
Messages postés59Date d'inscriptionmardi 23 janvier 2007StatutMembreDernière intervention14 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
cavo789
Messages postés168Date d'inscriptionvendredi 9 janvier 2004StatutMembreDernière intervention28 juillet 20091 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, ...
Selune6666
Messages postés59Date d'inscriptionmardi 23 janvier 2007StatutMembreDernière intervention14 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 ^^
cs_Nicko11
Messages postés1141Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention19 septembre 20073 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Selune6666
Messages postés59Date d'inscriptionmardi 23 janvier 2007StatutMembreDernière intervention14 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?
cs_Nicko11
Messages postés1141Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention19 septembre 20073 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.
Selune6666
Messages postés59Date d'inscriptionmardi 23 janvier 2007StatutMembreDernière intervention14 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
Selune6666
Messages postés59Date d'inscriptionmardi 23 janvier 2007StatutMembreDernière intervention14 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.
cs_Nicko11
Messages postés1141Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention19 septembre 20073 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 :
Selune6666
Messages postés59Date d'inscriptionmardi 23 janvier 2007StatutMembreDernière intervention14 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 ^^
cs_Nicko11
Messages postés1141Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention19 septembre 20073 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.
cavo789
Messages postés168Date d'inscriptionvendredi 9 janvier 2004StatutMembreDernière intervention28 juillet 20091 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.
Selune6666
Messages postés59Date d'inscriptionmardi 23 janvier 2007StatutMembreDernière intervention14 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.
cs_Nicko11
Messages postés1141Date d'inscriptionmercredi 7 mars 2007StatutMembreDernière intervention19 septembre 20073 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.
Selune6666
Messages postés59Date d'inscriptionmardi 23 janvier 2007StatutMembreDernière intervention14 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 ^^