Exporter une table vers un repertoire de l'utilisateur courrant - VB/VBA/VBS - Programmation
Marsh Posté le 25-04-2005 à 13:38:45
Rajoute tout simplement l'appel à ta fonction :
Code :
|
Et idem pour la msgbox. Mais puisque tu as regardé du côté des API, regarde s'il n'existe pas une fonction qui renvoie directement le path de "Mes documents". Parce que si un utilisateur décide de déplacer "Mes documents" sur un autre disque ou à un autre endroit (il peut le faire), ton code va planter...
Marsh Posté le 25-04-2005 à 14:18:03
Salut et merci pour ta reponse rapide et surtout tres utile
Ca semble marcher, sauf que maintenant, j'ai un message d'erreur comme quoi la "mise à jour impossible, la base de donnée ou l'objet est en lecture seule."
En revanche ça marche tres bien si je remplace la variable par mon nom de user...
pour ta suggestion, merci beaucoup, mais sur nos machines, les utilisateurs sont suffisement bridés pour eviter justement ce genre de probleme. mais l'idée de base est bonne, je vais chercher en parallele si je trouve l'API en question
Marsh Posté le 03-05-2005 à 17:51:17
Salut
Un petit up car j'ai pas trouvé comment me debarasser de l'erreur de lecture seule
Merci beaucoup
Marsh Posté le 04-05-2005 à 11:01:20
Salut,
Est-ce que tu es sûr que ton fichier est bien fermé lorsque tu tentes de refaire l'extraction?
Est-ce que tu es sûr d'avoir les droits sur le répertoire de l'utilisateur? Si tu essaies d'écrire dans le répertoire d'un autre utilisateur et que tu n'es pas administrateur de la machine, je pense que tu n'auras pas les droits... Et donc tu risques bien de rencontrer un message d'erreur style "lecture seule".
Regarde donc peut-être ces deux choses...
A+
Marsh Posté le 04-05-2005 à 14:05:50
Bonjour
Pour repondre dans l'ordre
Le fichier est fermé
j'ai les droits sur l'utilisateur, puisque c'est moi
l'API va chercher l'utilisateur en cours (qui possede donc les droits necessaires pour ecrire sur son propre repertoire)
Citation : |
si je remplace " & NomUtilisateur &" par le user en cour, ça passe.
si je laisse, j'ai une erreur d'execution '3027' l'objet ou la base de donnée est en lecture seule
J'utilise la même variable dans ma msgbox et il me renvoie bien le user pourtant
je seche un peu là héhé
Merci pour tes reponses en tout cas
Marsh Posté le 04-05-2005 à 14:40:43
le_canard a écrit : Bonjour |
Tout à fait... Je me souvenais plus des détails
le_canard a écrit : si je remplace " & NomUtilisateur &" par le user en cour, ça passe. |
Est-ce que tu as déjà essayé de passer par une variable pour construire ton nom de fichier (et du chemin) et voir ce qu'il retourne dans cette variable?
Essaie peut-être d'utiliser un nom de fichier/répertoire sans espaces pour tester: essaie de créer le fichier test.csv dans c:\tmp par exemple
Sinon, ton erreur d'exécution, est-ce que tu es sûr qu'elle est sur le nom de fichier et non sur la DB? Peut-être que quand tu fais l'export, Access essaie de modifier qqch dans la DB et si elle est en lecture seule...
Je n'en sais trop rien... Je lance juste des idées... Des fois on se focalise sur une chose et la solution est ailleurs (et non pas la vérité).
A+
Marsh Posté le 04-05-2005 à 15:26:09
Citation : Est-ce que tu as déjà essayé de passer par une variable pour construire ton nom de fichier (et du chemin) et voir ce qu'il retourne dans cette variable? |
c'est ce que j'ai dans la msgbox, et je retrouve bien mon user en dur dedans
Citation : |
Si j'utilise un chemin court, je n'ai plus besoin de variable, et là ça passe nickel, de la même manière que si je remplace la variable par le user en brut dans le chemin
Citation : |
Je pense pas, puisque la variable ne fait que rechercher à remplacer " & NomUtilisateur & " par le user en dur, et que lorsque je le met en dur justement (sans la variable) j'ai pas l'erreur et le fichier arrive au bon endroit
Le probleme doit venir de la variable en elle même...
Mais je comprend pas pourquoi dans ce cas, elle marche pour ma msgbox qui reprend exactement la même syntaxe que le chemin dans lequel je veux exporter mon doc
Pfiouuuu, j'crois que j'vais demander à ma boite plus qu'ue simple initiation à Access moi
Mais merci pour les reponses, ça me permet de mieux comprendre comment fonctionne Access
Marsh Posté le 10-05-2005 à 09:37:20
Rebonjour tout le monde
J'en suis malheureusement toujour au même point
Si une bonne âme avait une autre idée que celles qui ont été posées ici, je suis preneur.
Merci beaucoup
Marsh Posté le 10-05-2005 à 15:11:41
Bon, je suis parti sur une autre base, le choix !
Après tout, l'utilisateur a son libre arbitre, alors profitons en !
Citation : |
Ca c'est pour le formulaire
Et ça c'est pour la fonction :
Citation : |
Comme ça mon utilisateur choisi son repertoire, il lance le script, et zou, la table s'enregistre dans le répertoire qu'il a selectionné !
ps : Si quelqu'un à tout de même une solution je reste preneur, ça comblera ma curiosité !
Merci à toutes et tous !
Marsh Posté le 27-12-2006 à 11:17:57
Hello,
J'ai eu le même problème, et j'ai trouvé la solution en anglais :
http://support.microsoft.com/defau [...] GB;q306144
En gros, Access ne permet l'import/export que de certain type de fichier. Une clef de registre
HKEY_LOCAL_MACHINE\Software\Microsoft\Jet\4.0\Engines\Text\DisabledExtensions
contient les extensions des fichiers autorisés à être importés/exportés.
Soit tu rajoutes l'extension de ton fichier dans cette liste, soit tu remplace la liste par *, et plus de problèmes.
La dernière solution si tu ne veux pas aller toucher au registre, est d'enregistrer le fichier en .txt et de le renommer après. Je sais, c'est bête, mais ça fonctionne.
Amicalement
Marsh Posté le 25-04-2005 à 12:17:42
Bonjour,
Je suis un grand débutant dans Access, et on me demande de modifier un fichier afin d'extraire des données vers un fichier .CSV
Le programme est deja fait, sauf pour le chemin du repertoire.
Il faudrait que je puisse dire à Access que dans le chemin, il y a une variable contenant le User windows en cour d'utilisation (NomUtilisateur) dans le code
J'ai trouvé sur le net comment faire :
1 module qui contient :
Public Declare Function RecupNomUtilisateur Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
1 module qui contient :
Public Function NomUtilisateur() As String
Dim StrNomUtilisateur As String
Dim Resultat As Long ' Contiendra simplement 1 si l'appel s'est bien déroulé
StrNomUtilisateur = String$(255, 0)
Resultat = RecupNomUtilisateur(StrNomUtilisateur, 255)
If Resultat = 1 Then
NomUtilisateur = StrNomUtilisateur
Else
NomUtilisateur = "UTILISATEUR INCONNU"
End If
End Function
Mais voilà, je comprend pas comment recuperer ça dans mon code :
Private Sub cmdCreationExcelmajConditions_Click()
DoCmd.SetWarnings False
DoCmd.OpenTable "Fichier des mises à jour", acNormal, acEdit
'Beep
'MsgBox "Tous les enregistrement du fichier vont être supprimés. Si le fichier n'est pas sauvegardé, arrêter la macro (échap) et sauvegarder le fichier avant de relancer l'export.", vbCritical, "FICHIER DES MISES A JOUR"
DoCmd.RunCommand acCmdSelectAllRecords
DoCmd.RunCommand acCmdDelete
DoCmd.Close acTable, "Fichier des mises à jour"
DoCmd.OpenQuery "Fichier export Excel pour mise à jour COB"
DoCmd.TransferText acExportDelim, "Fichier des mises à jour Spécification d'exportation", "Fichier des mises à jour", "c:\Documents and Settings\NomUtilisateur\Mes documents\fichiers des mises à jour.csv", False, ""
'Beep
MsgBox "Transfert terminé sur c:\documents and settings\NomUtilisateur\mes documents\fichiers des mises à jour.csv", vbInformation, "Export vers Excel"
DoCmd.SetWarnings True
End Sub
Avez vous une idée de ce que je dois faire (parce qu'avec l'initiation Access sur 2 jours que j'ai eu il y a 2 ans de ça, j'ai un peu de mal .....)
Merci infiniment !