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 30/11/2011, 20h19   #1
Invité de passage
 
Homme Louis Gilbert
Archéologue
Inscription : novembre 2011
Messages : 7
Détails du profil
Informations personnelles :
Nom : Homme Louis Gilbert
Localisation : Canada

Informations professionnelles :
Activité : Archéologue
Secteur : Arts - Culture

Informations forums :
Inscription : novembre 2011
Messages : 7
Points : 3
Points : 3
Par défaut pb ISAM avec table .csv liées

Bonjour,

J'essaie de rendre la mise à jour la plus facile pour l'utilisateur d'une base de données Access. Les données qui permettent la mise à jour sont en fichiers .csv, et sont liées à l'application Access. Avant de faire la mise à jour des tables access comme tel, je voudrais, par un bouton, faire effectuer un rafraîchissement des tables liées.

Loin d'être programmateur moi-même, j'ai trouvé du code ici et là (souvent ici...), et je me débrouille habituellement pas mal. Mais là je n'arrive pas à contourner l'erreur obtenue: "Erreur d'exécution '3170': Pilot ISAM introuvable".

Voici le code que j'utilise (en rouge, la ligne surlignée par le débogueur):
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Function relinkTables()
    Dim tdf As DAO.TableDef

        For Each tdf In CurrentDb.TableDefs
        ' check if table is a linked table
            If Len(tdf.Connect) > 0 Then
            tdf.Connect = "CurrentProject.Path"
            tdf.RefreshLink
            End If
    Next

End Function
Et 2e petite question: si le fournisseur des données pouvait me donner les données en .xls, est-ce que ce serait préférable, ou il n'y a pas de différence entre les formats pour cette utilité?

Merci de votre aide précieuse!

Louis
Louis Gilbert est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2011, 11h00   #2
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 090
Détails du profil
Informations personnelles :
Nom : Homme Fabrice CONSTANS
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : avril 2005
Messages : 7 090
Points : 11 620
Points : 11 620
Bonjour,

L'origine du problème est la ligne précédente.

Code :
tdf.Connect = "CurrentProject.Path"
La propriété Connect attend une string plus formalisée.
D'une par tu affectes non pas le chemin de ta base mais litéralement ceci CurrentProject.Path.

Si tu attaches manuellement le fichier il va te donner la bonne connect string. Celle-ci devrait ressemebler à ça.

Code :
Text;DSN=Spécification d'attache;FMT=Delimited;HDR=NO;IMEX=2;CharacterSet=850;ACCDB=YES;DATABASE=F:\Access\Applications\Amap\source xls
C'est la dernière partie que tu dois modifier.
Donc :
Code :
tdf.Connect = left(tdf.Connect,instr(1,tdf.Connect,";database=")+9) & currentproject.path
Tu récupères le connect jusqu'à database= et tu y ajoutes le nouveau chemin.

Note que si tu écrases l'ancien fichier un tdf.refreshlink seul est suffisant.

Cordialement,
__________________
Classe MELA(CRUD) Opérateur IN et zone de liste
MsGraph et VBA - 1e Partie 2e partie
Entête d'états-Opérateur LIKE-Evénements formulaires-Cours 2010
Complément :Générateur de msgbox
Visitez mon Blog
Les questions techniques par MP ne sont pas lues et je ne pratique pas l'extispicine
loufab est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 02/12/2011, 15h54   #3
Invité de passage
 
Homme Louis Gilbert
Archéologue
Inscription : novembre 2011
Messages : 7
Détails du profil
Informations personnelles :
Nom : Homme Louis Gilbert
Localisation : Canada

Informations professionnelles :
Activité : Archéologue
Secteur : Arts - Culture

Informations forums :
Inscription : novembre 2011
Messages : 7
Points : 3
Points : 3
Citation:
Envoyé par loufab Voir le message
Note que si tu écrases l'ancien fichier un tdf.refreshlink seul est suffisant.
Tout simplement! Ça fonctionne à merveille. Merci!

Je garde toutefois le reste en banque, car je ne sais pas si l'utilisateur voudra mettre les tables csv dans son répertoire de travail (ce que je lui suggérerai).

J'ai beaucoup de difficulté à trouver la façon de référer au dossier en cours dans le code, afin de tenir compte du fait que chaque usager mettra le fichier dans un dossier différent...
Louis Gilbert est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/12/2011, 16h22   #4
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 090
Détails du profil
Informations personnelles :
Nom : Homme Fabrice CONSTANS
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : avril 2005
Messages : 7 090
Points : 11 620
Points : 11 620
Bonjour,

Le système est plein de chemin prédéfini.

Fait un Set sous dos pour que le système te liste ces chemins.
Exemple le userprofile qui pointe sur le dossier de l'utilisateur.

Pour y faire référence avec VBA :

environ("userprofile")

Pour l'utiliser

Code :
environ("userprofile") & "\mes documents"
A partir de cela tu peux imaginer d'autres variation.

Sinon il y a le bon vieux OuvrirFichier pour obliger l'utilisateur à choisir le répertoire où il a mis les fichiers.

Cordialement,
__________________
Classe MELA(CRUD) Opérateur IN et zone de liste
MsGraph et VBA - 1e Partie 2e partie
Entête d'états-Opérateur LIKE-Evénements formulaires-Cours 2010
Complément :Générateur de msgbox
Visitez mon Blog
Les questions techniques par MP ne sont pas lues et je ne pratique pas l'extispicine
loufab est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h33.


 
 
 
 
Partenaires

Hébergement Web