Changer l'extension de fichier par VBA

Ben si l’erreur se produit à la ligne TransfertText ça veut dire que c’est là que se produit le problème, mais ça peut être après 9500 lignes ou pour une autre raison à la fin de l’opération. Si jamais enlève le "on error goto " pour être sur que le programme s’interrompe là où il y a l’erreur sans aller plus loin.

Pour le Msgbox tu es obligé d’écrire quelque chose ou donner une chaîne vide, par exemple: MsgBox “” (dès fois je joue avec ça en mettant des MsgBox “Test 1”, MsgBox “Test 2” etc… et comme ça je peux retrouver entre où et où il y a une erreur, lorsque le déboggueur montre ses limites…)

Je ne pense pas non plus que ca vienne du transfertext. par lui même
Mais on aura la confirmation si tu mets un MsgBox “Transfert termine” par exemple.

Pour moi, je vois deux cas qui peuvent se produire :
1- le DoCmd veut commencer à modifier la table alors que le transfert n’est pas terminé.
2- les ressources internes d’Access sont insuffisantes pour modifier la structure d’une table de la taille de la tienne.

Je pencherais plutôt pour la seconde solution. En effet, pour modifier la structure, il pose un verrou individuel sur chaque enregistrement, et son nombre de verrous disponibles n’est pas infini …
solutions :

  • augmenter le nombre de verrous (mais ce sera pour tous les programmes et tous les utilisateurs, au détriment de la performance du serveur)
  • verrouiller la table en global
  • faire une copie de la structure (vierge) , la modifier et y recopier les données.
  • si d’une fois sur l’autre les tables ont le même nom, utiliser la structure de la fois précédente et y mettre les nouvelles données.

Personnellement, je crois que j’ai toujours utilisé la dernière solution et je n’ai jamais eu de problème.
C’est d’ailleurs ce que j’avais proposé dès le début de nos échanges

ok!! ben j’ai effectivement mit : MsgBox(“Avant”) --> suis pas non plu né de la dernière plui, je sé ke mm!!LOL.LOL.
gcc, je n’ai pas compris : [quote=""]
si d’une fois sur l’autre les tables ont le même nom, utiliser la structure de la fois précédente et y mettre les nouvelles données.
[/quote]
peus tu respliqué s’il te plais??

En ce moment, à chaque fois que tu fais des essais (quand ils marchent), tu effaces les tables qui ont été crées lors de l’essai précédent.
Si tu ne les effaçais pas, tes données viendraient se mettre AU BOUT de celles existantes (le transfert se fait toujours en mode Append).
Donc ce que je te propose, c’est

  • de faire un premier import manuel
  • de vider la table ainsi créée (commande supprimer tous les enregistrements) mais de conserver la table vide
  • de modifier la structure pour rajouter le champ auto.

Ensuite, tu lances ton programme en retirant les lignes Alter Table et ça devrait marcher.

ben oué mais aprés si par exemple demain j’ai un nouveau fichier à importer dans une des tables, ce seré possible que même??

Si ty as un nouveau fichier, il te faudra de toute manière retoucher à ton code pour y mettre le nom du fichier et la table de spécifs.
Il faudra en profiter pour faire en même temps la manoeuvre citée ci dessus.
C’est juste deux lignes à rajouter au User Guide


Par contre, si tu veux parler d'une nouvelle version des mêmes fichiers, ca marchera, bien sûr, mais à condition de rajouter une ligne à ton code pour supprimer les enregistrements existants. Mais ca c'est à faire après. Pour les premières fois, tu testes en effaçant manuellement

ok!! mais je pense que c’est plutôt la deuxième solution [quote=""]
Par contre, si tu veux parler d’une nouvelle version des mêmes fichiers, ca marchera, bien sûr, mais à condition de rajouter une ligne à ton code pour supprimer les enregistrements existants.
Mais ca c’est à faire après. Pour les premières fois, tu testes en effaçant manuellement
[/quote]
mais lorsque je réimporterait la mise à jour d’un fichier, la clé primaire restera ou faudra qu’on la re-cré manuellement a chaque foi??
bon ben jvé essayer ce que tu me di un peu plus haut!!

Elle restera ; elle est incluse dans la structure

ok dacc donc c’est cool!!


o faite, tu va dire que je suis nul..... mais je cherche et je trouve pas ni dans ma mémoire ni dans access comment je peux faire pour supprimer tout les enregistrements!!

Par exemple: DoCmd.RunSQL (ou CurrentDb.Execute) “DELETE * FROM ma-table” (en “vrai” SQL c’est DELETE FROM …, mais il me semble que Access veut une “*”)

:super:
C’est un peu plus simple que de tout programmer en dur, effectivement…
Edité le 22/06/2007 à 14:56

Moi aussi j’ai un trou de mémoire
ca doit être quelque chose comme
DoCmd RunCommand acCmdDeleteRecord
ou
DoCmd RunCommand acCmdDeleteRows, mais à vérifier

Si ça continue, je vais être obligé d’installer Access sur mon micro …

lol, dsl gcc!!ben C vraiment con, je dois vraiment être fatigué aujourd’hui(en même temps c’est compréhensif j’ai dormi 4-5heures!!lol) mais je trouve rien sur les 2 commande que tu m’a passé!!


suis daccord avec ce que tu dis : [quote=""] par exemple: DoCmd.RunSQL (ou CurrentDb.Execute) "DELETE * FROM ma-table" (en "vrai" SQL c'est DELETE FROM ..., mais il me semble que Access veut une "*") [/quote] mais ça ns efface la table alors que l'on veut la conserver!!

“lol, dsl gcc!!ben C vraiment con, je dois vraiment être fatigué aujourd’hui(en même temps c’est compréhensif j’ai dormi 4-5heures!!lol) mais je trouve rien sur les 2 commande que tu m’a passé!![quote=”"]

J’ai bien dit que c’était à vérifier …

Tu as fait comment pour les employer ?
DoCmd.OpenTable “”
DoCmd.RunCommand acCmdSelectAllRecords
DoCmd.RunCommand acCmdDeleteRecord
DoCmd.close acTable, “”

ben en faite j’essayer de chercher dans l’aide des renseignements mais je ne trouver rien d’interressan!!
ok, donc jvé essayer ce que tu ma donné aprés reflexion ca m’a lair plus probable

:non: Pas du tout. Ca vide la table, sa structure est conservée.

Pour effacer une table c’est DROP TABLE…
Edité le 22/06/2007 à 15:23

ah oué C vré, bien vu jray, je te testé!!MDR. ben trop tard j’ai lancé ce que mister gcc ma passé: mé C bien long!!lol.
bon faut que ca se presse car j’ai fini ma journée!!

Si la méthode de jray fonctionne c’est celle qu’il faut employer
Ca m’étonnait aussi que ca ne marche pas

Ca ira plus en principe plus vite par SQL (DELETE *…) parce que l’autre méthode commence par tout sélectionner et ça prends du temps.

(Et si vraiment ca va pas du peut copier la table (structure seulement) puis effacer l’autre, ça ira encore plus vite)

ok, ben j’ai lancé la tienne mais jcroi que je vais l’arréter car je peux plu aller sur acces : je trouve ca bien bizarre!!

Beuh ? Currieux. Bon je ne sais pas s’il y a une différence en “interne” par VBA ou en accès externe par DAO/ADO, parce que moi j’ai jamais vraiment programmé directement dans Access mais plutôt des applis externes en VB (ou autre).

Bon c’est vrai aussi que des très grosses BD en Access je n’en ai pas vraiment, c’est plutôt sur Oracle, mais quand-même.
Combien as-tu d’enregistrements, environ ?