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 27/06/2011, 07h30   #1
Invité régulier
 
Homme
Expert-comptable
Inscription : février 2007
Messages : 53
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 45
Localisation : Belgique

Informations professionnelles :
Activité : Expert-comptable
Secteur : Finance

Informations forums :
Inscription : février 2007
Messages : 53
Points : 8
Points : 8
Par défaut Comment faire une requête sur des tables DBF de même nom mais stockées dans des répertoires différents ?

Bonjour,

J'ai du mal à démarrer un projet de base de données de par la conception dynamique.

Je souhaiterais établir différents états dans une BDD ACCESS basés sur des données qui sont stockées dans des fichiers de structure DBF. Ces fichiers DBF de même nom sont présents dans des répertoires différents. Pour ne pas à devoir attacher ou importer toutes ces tables DBF dans une BDD ACCESS, je voudrais en rendre l'accès dynamique à ces données via une requête SQL par code VBA.

J'ai déjà pu mettre en place un système comparable en XL avec du code VBA grâce à de l'aide mais en ACCESS, je manque totalement de notions.

Voici le shema :

Les tables DBF :

Répertoire principal de stockage: c:\données

Sous-répertoires de stockage des tables DBF :

c:\données\client1\table.dbf
c:\données\client2\table.dbf
c:\données\client3\table.dbf
c:\données\client4\table.dbf
....


Je dispose également d'une table DBF que j'ai attaché dans la BDD ACCESS et qui stocke dans un champ les noms de dossiers (sous-répertoires) mais pas le chemin du répertoire principal (c:\données). Cette table est mise à jour dans une autre application :
c:\données\clients.dbf > champ "PATH" qui contient (client1, client2, client3,...)

Ma question :
Comment afficher une requête sql en VBA qui affiche le contenu du fichier table.dbf du client qui aurait été choisi via la table c:\données\clients.dbf ?

En excel, j'utilise une combobox pour le choix du client alimenté par la table clients.dbf. Le choix du client sert ensuite à importer le fichier table.dbf concerné dans une feuille XL.

D'avance merci pour vos lumières.
rcan7412 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 10h41   #2
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Bonjour rcan7412,

J'avais développé un projet similaire il y a quelques année.
Je te communique le module (à réimporter dans ton projet) d'attachement des tables. Il y aura surement du ménage et des adaptations à faire, mais il est parfaitement opérationnel.

pour lancer les fonction, j'avais mis dans le formulaire de démarrage la procédure suivante :


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Form_Load()
  Me.TxtInfoRefTabAttache.Caption = ""
  ConnectX
    ' Essaie de voir si la base de données Accueil est disponible.
    If VérifierAttaches() = False Then
        ' Essaie de relier les tables; si cela rate,
        ' Solutions du développeur se termine.
        If RattacherTables() = False Then
           DoCmd.Close acForm, "Démarrage"
           Exit Sub
        End If
    End If
  Me.TxtInfoRefTabAttache.Caption = InfoTabAttache
 
End Sub
Tu n'aura plus qu'à l'adapter en demandant à l'utilisateur de choisir sur quelle base il souhaite se connecter.
Fichiers attachés
Type de fichier : txt Vérifier attaches.txt (19,0 Ko, 9 affichages)
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
si tout est OK, n'oubliez pas de cliquer sur
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 13h12   #3
Invité régulier
 
Homme
Expert-comptable
Inscription : février 2007
Messages : 53
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 45
Localisation : Belgique

Informations professionnelles :
Activité : Expert-comptable
Secteur : Finance

Informations forums :
Inscription : février 2007
Messages : 53
Points : 8
Points : 8
Bonjour Dumas.blr,

Merci d'avoir répondu à mon post et de livrer ton projet.
Comme précisé, je ne suis pas habitué à coder et j'avoue avoir du mal à comprendre ton code malgré le fait qu'il est commenté.

Sans vouloir abuser, pourrais-je avoir un code VBA qui permet déjà l'affichage d'une requête basée sur un fichier DBF comme celui-ci c:\données\client1\table.dbf (avec CHAMP1, CHAMP2, CHAMP3) ou tout au moins un endroit où trouver mon bonheur.

Je cherche de tout côté et je n'arrive pas à trouver ce préalable.

Merci
rcan7412 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 13h27   #4
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Peux-tu nous communiquer le code VBA que tu avais écrit en Excel ?
Je pense qu'il y a beaucoup d'éléments de code qui pourraient être réutilisés.

L'avantage de la solution que j'avais implémenté est que je ne travaillais que sur une seule table liée. Je changeais juste la source de connexion par rapport au fichier .DBF, puisque la structure du fichier restait identique.
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
si tout est OK, n'oubliez pas de cliquer sur
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 13h38   #5
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Citation:
Sans vouloir abuser, pourrais-je avoir un code VBA qui permet déjà l'affichage d'une requête basée sur un fichier DBF comme celui-ci c:\données\client1\table.dbf (avec CHAMP1, CHAMP2, CHAMP3) ou tout au moins un endroit où trouver mon bonheur.
Attention, si tu ouvre une requête via le VBA, tu sera obligé de gérer toutes les opérations d'accès en VBA par la suite, ce qui me parait une solution compliquée, surtout si tu n'est pas familiarisé avec la programmation.

La solution la plus sage (pour moi), serait d'ajouter la nouvelle connexion (donc, dans le catalogue Access) sur ta table .DBF, et de travailler ensuite sur la table liée. La seule contrainte étant que les différentes tables .dbf auxquelles tu accèdent aient toutes une structure identique
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
si tout est OK, n'oubliez pas de cliquer sur
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 14h08   #6
Invité régulier
 
Homme
Expert-comptable
Inscription : février 2007
Messages : 53
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 45
Localisation : Belgique

Informations professionnelles :
Activité : Expert-comptable
Secteur : Finance

Informations forums :
Inscription : février 2007
Messages : 53
Points : 8
Points : 8
Encore merci pour ton attention et ton aide dumas.blr.

Voici des réponses à tes questions :
Citation:
La solution la plus sage (pour moi), serait d'ajouter la nouvelle connexion (donc, dans le catalogue Access) sur ta table .DBF, et de travailler ensuite sur la table liée.
Y-a-t-il une procédure pour y parvenir ?

Citation:
La seule contrainte étant que les différentes tables .dbf auxquelles tu accèdent aient toutes une structure identique
Là je confirme, car ces tables sont créées en externe par un logiciel comptable.

Je te livre ci-après le code VBA d'excel :

Un userform qui permettait de choisir le client et alimenté par une table dbf qui contient le sous-répertoire du client :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Private Sub Userform_Initialize()
'Private Sub CommandButton1_Click()
'necessite d'activer la reference Microsoft ActiveX Data Objects x.x Lib rary
Dim Cn As ADODB.Connection
Dim Rs As ADODB.Recordset
Dim Chemin As String, Cible As String, laBase As String
 
'Chemin = ThisWorkbook.Path
Chemin = Sheets("Calcul").Range("REPEVOL")
laBase = "societes.dbf"
 
With ComboBox1
.Clear 'suppression anciennes données dans combobox
.ColumnCount = 4 'nombre de colonnes
'Il y aura 4 colonnes dans ComboBox
.ColumnWidths = "130;0;0;0" 'largeur colonnes
End With
 
Set Cn = New ADODB.Connection
Cn.Open _
"Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=" & _
Chemin & ";"
 
'pour la recuperation des champs RAIS ,PATH ,DATEDEB,DATEFIN
Cible = "SELECT RAIS,PATH,DATEDEB,DATEFIN FROM " & laBase & " ORDER BY RAIS ;"
 
Set Rs = New Recordset
Rs.Open Cible, Cn, adOpenKeyset, adLockOptimistic
 
Do While Not Rs.EOF
ComboBox1.AddItem Rs.Fields(0).Value 'champ RAIS
ComboBox1.List(ComboBox1.ListCount - 1, 1) = Rs.Fields(1).Value 'champ PATH
If Not Rs.Fields(2).Value = "" Then _
ComboBox1.List(ComboBox1.ListCount - 1, 2) = Rs.Fields(2).Value 'DATEDEB
If Not Rs.Fields(3).Value = "" Then _
ComboBox1.List(ComboBox1.ListCount - 1, 3) = Rs.Fields(3).Value 'DATEFIN
Rs.MoveNext
Loop
 
Rs.Close
Cn.Close
End Sub
Et voici la procédure d'importation des données du client choisi dans le userform ci-avant :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Private Sub ImportBalance()
'Procédure d'importation du fichier balance.dbf
Dim Cn As ADODB.Connection
Dim Rs As ADODB.Recordset
Dim Chemin As String, Cible As String, laBase As String
Dim Fld As ADODB.Field
Dim i As Integer
 
If ComboBox1.ListIndex = -1 Then Exit Sub
 
Chemin = "C:\evolution\" & ComboBox1.List(ComboBox1.ListIndex, 1)
laBase = "Balance.dbf"
 
'efface la feuille Balance
Sheets("Balance").Select
Range("A1").Select
Selection.CurrentRegion.Select
Selection.ClearContents
Range("A1").Select
 
 
Set Cn = New ADODB.Connection
Cn.Open _
"Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=" & _
Chemin & ";"
 
 
Cible = "SELECT COMPTES, INTITULE, SOLDE FROM " & laBase & ""
 
Set Rs = New Recordset
Rs.Open Cible, Cn, adOpenKeyset, adLockOptimistic
 
For Each Fld In Rs.Fields
i = i + 1
Sheets("Balance").Cells(1, i) = Fld.Name
Next Fld
 
 
Do While Not Rs.EOF
Sheets("Balance").Range("A2").CopyFromRecordset Rs
Loop
 
End Sub
Le shema thérorique détaillé en début de post adapté à mon exemple est le suivant :

Les tables DBF :

Répertoire principal de stockage: c:\evolution

La table signalétique clients qui alimente le combobox dans le userform :
c:\evolution\societes.dbf > champ "PATH" qui contient (client1, client2, client3,...)


Sous-répertoires de stockage des tables DBF :

c:\evolution\client1\balance.dbf
c:\evolution\client2\balance.dbf
c:\evolution\client3\balance.dbf

Tous les fichiers balance.dbf ont donc la même structure.

L'idée était comme dans un excel, d'avoir un formulaire alimenté par le fichier societes.dbf (signalétique client) pour faire le choix du client puis dès le choix opéré, afficher les données du fichier balance.dbf du client choisi avec requête éventuelle.

Est-ce clair ?
rcan7412 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 15h20   #7
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Bonjour rcan7412,

Ayant des impératif, je ne pourrai pas te répondre complètement tout de suite.

Je voulais juste savoir si le fichier societes.dbf était toujours utilisé dans ton projet ? Dans ce cas, on peut lier la table de manière permanente et l'utiliser pour alimenter la listbox/combobox.

Il resterait juste à effectuer un rafraichissement dynamique sur la table cible (chose qui est déjà présente dans mon code).
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
si tout est OK, n'oubliez pas de cliquer sur
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 15h39   #8
Invité régulier
 
Homme
Expert-comptable
Inscription : février 2007
Messages : 53
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 45
Localisation : Belgique

Informations professionnelles :
Activité : Expert-comptable
Secteur : Finance

Informations forums :
Inscription : février 2007
Messages : 53
Points : 8
Points : 8
Re,

Citation:
Ayant des impératif, je ne pourrai pas te répondre complètement tout de suite.
Bien sûr, je ne veux surtout pas abuser.

Citation:
Je voulais juste savoir si le fichier societes.dbf était toujours utilisé dans ton projet ? Dans ce cas, on peut lier la table de manière permanente et l'utiliser pour alimenter la listbox/combobox.
Je confirme, le fichier societes.dbf est toujours utilisé et peut être lié de façon permanente.

A te lire
rcan7412 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 16h10   #9
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Très bien,

Peux-tu commencer à :
- lier ta table societes.dbf dans ta BDD (en utilisant le ruban "données externes")
- créer ton formulaire de choix de la BDD cible avec la listbox ou combobox ?

Après, on pourra passer à la deuxième partie.

A bientôt sur le forum
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
si tout est OK, n'oubliez pas de cliquer sur
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2011, 11h29   #10
Invité régulier
 
Homme
Expert-comptable
Inscription : février 2007
Messages : 53
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 45
Localisation : Belgique

Informations professionnelles :
Activité : Expert-comptable
Secteur : Finance

Informations forums :
Inscription : février 2007
Messages : 53
Points : 8
Points : 8
Bonjour,

Voilà, j'ai donc lié la table societes.dbf (elle l'était déjà) et j'ai crée un formulaire qui reprend une combobox qui permet de choisir le client.

J'alimente la combobox avec cette requête :
Code :
1
2
3
SELECT SOCIETES.NUM, SOCIETES.RAIS
FROM SOCIETES
ORDER BY SOCIETES.RAIS;
J'utilise la champ SOCIETES.NUM (valeur numérique) comme identifiant de société car bien qu'elle ne soit pas une clé primaire au sens d'access, je sais qu'elle est unique car créée par l'application externe sans intervention de l'utilisateur.

J'ai également une textbox qui affiche le nom du sous répertoire.

Je joins en annexe une image écran du formulaire.



Voilà est-ce en ordre ?

Merci
rcan7412 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 14h51   #11
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Bonjour rcan7412,

J'espère avoir un peu de temps à te consacrer aujourd'hui, mais ce n'est pas garanti.

Le chemin est renseigné. C'est bien. il serait encore mieux d'y faire figurer le chemin complet (ex : c:\documents\essai), car nous en avons besoin pour actualiser la connexion. si la racine de base reste identique, ce n'est pas grave, mais c'est moins maintenable.

Les opérations suivantes seront à réaliser :
  1. Déconnecter la base éventuellement précédemment attachée, en supprimant la table attachée
  2. Définir une nouvelle table liée en fonction des informations de connexion
  3. connecter la nouvelle base

ces opérations seront codées dans la procédure du validerbouton_click (ou équivalent)

Voici un squelette de code sur lequel travailler
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
 
sub bouton_valider_click
'procédure événementielle à attacher au bouton
dim rc as boolean
    Rc = SupprimerAttaches()
    attacherTable
end sub
 
' Les procédures et fonctions suivantes sont à placer dans un module externe, afin d'être visible par l'ensemble du projet
Public Function SupprimerAttaches() As Boolean
' Supprime les liens à la base de données spécifiée.
' Retourne Vrai si tout s'est bien passé.
 
    Dim bds As Database
    Dim Cnn As ADODB.Connection
 
    Set bds = CurrentDb()
   'rajouter ici une gestion d'erreur s'il n'y a pas de table attaché pour forcer à vrai
   bds.TableDefs.Delete ("Accueil")  'suppression du lien
Cnn.Close
SupprimerAttaches = True     ' Liens supprimés
 
' rajouter ici la gestion d'erreur éventuelle pour forcer la fonction à retourner vrai
End Function
 
 
Sub attacherTable()
 
    Dim dbsTemp As Database
    Dim Cnn As ADODB.Connection
    Dim rstTemp As ADODB.Recordset
    Dim strMenu, strCurrentDbName As String
    Dim RetCherchAccueil As MSA_OUVRIRNOMFICHIER
    Dim dirTab As String
    Dim NomTab As String
    Dim RcCherchAccueil As Boolean
 
    Set dbsTemp = CurrentDb
        dirTab = <formulaire.chemin> 'ATTENTION A METTRE LE CHEMIN COMPLET
       NomTab = "Balance"
 
' Appelle la procédure ConnectOutput. Le troisième
    ' argument sera utilisé comme chaîne Connect,
    ' et le quatrième comme SourceTableName.
    If Len(Dir$(dirTab & "\" & NomTab & ".dbf")) > 0 Then
        rc_connect = ConnectOutput(dbsTemp, _
                    "dBASEtable", _
                    "dBASE 5.0;DATABASE=" & dirTab, _
                    NomTab)
        If rc_connect = False Then
           GoTo ano_connnexion
        Else
		msgbox "connexion réussie"
             GoTo fin
        End If
    Else
        GoTo erreur_chemin_connnexion
    End If
 
'-----------------------------------------------------------
' Base liée introuvable, on la recherche dans le répertoire
'-----------------------------------------------------------
erreur_chemin_connnexion:
	msgbox "le chemin de connexion est incorrect"
ano_connnexion:
    rc_connect = False
 
fin:
    dbsTemp.Close
 End Sub
 
Function ConnectOutput(dbsTemp As Database, _
    strTable As String, strConnect As String, _
    strSourceTable As String) As Boolean
 
    Dim tdfLinked As TableDef
    Dim rstLinked As Recordset
    Dim intTemp As Integer
 
    ' Crée un objet TableDef, définit ses propriétés
    ' Connect et SourceTableName en fonction des
    ' arguments passéset ajoute l'objet à la
    ' collection TableDefs.
    Set tdfLinked = dbsTemp.CreateTableDef(strTable)
 
    On Error Resume Next
 
    tdfLinked.connect = strConnect
    tdfLinked.SourceTableName = strSourceTable
    dbsTemp.TableDefs.Append tdfLinked
 
    If Err = 0 Then
        tdfLinked.Name = "Accueil"
        ConnectOutput = True
    Else
        ConnectOutput = False
    End If
 End Function
Avec ça, tu devrais pouvoir travailler correctement

N'hésite pas à demander plus de précisions si besoin est
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
si tout est OK, n'oubliez pas de cliquer sur
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 17h17   #12
Invité régulier
 
Homme
Expert-comptable
Inscription : février 2007
Messages : 53
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 45
Localisation : Belgique

Informations professionnelles :
Activité : Expert-comptable
Secteur : Finance

Informations forums :
Inscription : février 2007
Messages : 53
Points : 8
Points : 8
Bonjour Dumas.blr,

Pas évident de tout bien comprendre !

Je confirme que la racine de base est identique pour tous les clients. Je ne vois autrement comment faire figurer le nom complet. Dans le fichier dossier.dbf le champ path n'indique que le nom du sous-dossier du client. Je ne peut pas modifier le contenu de ce champ car il sert à l'application externe. Peut-être ta remarque vaut seulement pour le code vba ci-après.

J'ai donc créé un bouton dans mon formulaire à laquelle j'ai attaché la procédure événementielle . Petite question : "sub" ou "private sub", la nuance est importante ?

J'ai glissé le reste du code dans un module.
Si j'ai bien compris on va rendre dynamique l'attache de la table "balance.dbf" du client choisi. Le nom d'attache de cette table sera "Accueil" ?

Je sèche un peu sur ce code :

Code :
1
2
3
 Set dbsTemp = CurrentDb
        dirTab = <formulaire.chemin> 'ATTENTION A METTRE LE CHEMIN COMPLET
       NomTab = "Balance"
J'ai écrit :
Code :
dirTab = "c:\evolution\<F_clients.CHEMIN>"
Le dossier racine de base : c:\evolution
Le nom du formulaire : F_clients
Le nom du champ du formulaire à récupérer : CHEMIN

Dois-je adapter autre chose ?

En cliquant sur le bouton, il y a une erreur 3265 "élément non trouvé dans cette collection"
Sur débogage, il m'arrête sur la ligne suivante :
bds.TableDefs.Delete ("Accueil") 'suppression du lien

Merci pour tes lumières.
rcan7412 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 17h48   #13
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Ouppsss !!

Je suis allé un peu vite dans le nettoyage de mon code !

En préambule, une petite question : est-tu familiarisé avec la programmation VBA ? La nature de tes question me fait penser le contraire. Dans ce cas, je te conseille de lire les FAQ et tutoriels associés sur le forum. Ils sont très bien fait. Regarde par exemple ici.

Tout d'abords pour la procédure événementielle :

Ne touche pas au sub. Il vaut mieux qu'il reste Private. Cela signifie que la portée de ta procédure sera limitée à ton formulaire. Si tu veux qu'un procédure/fonction soit visible sur l'ensemble d'un projet, il vaut mieux la mettre en PUBLIC, mais aussi, il faut la mettre dans un module externe.

Ensuite, sur les procédures et fonctions au niveau module :
1. Quand j'écris <formulaire.chemin>, cela signifie que tu doit remplacer cet chaine de caractère par la variable issue de ton formulaire
Par exemple, si ton formulaire possède un controle nommé "chemin", utilise la variable me.chemin (ou me!chemin. N'hésite pas à utiliser les listes de choix proposées.
Dans ce cas j'écrirais alors
Code :
dirTab = "c:\evolution\" & me.CHEMIN
2. pour la suppression du lien :
Il fallait lire bien sur
Code :
bds.TableDefs.Delete ("balance")  'suppression du lien
puisque tu rafraichiras la table Balance, alors ton erreur
Citation:
En cliquant sur le bouton, il y a une erreur 3265 "élément non trouvé dans cette collection"
Sur débogage, il m'arrête sur la ligne suivante :
bds.TableDefs.Delete ("Accueil") 'suppression du lien
devrait disparaitre, puisque dans le cas présent, tu demandais de supprimer une table qui n'existe pas.

NB : C'est pour cela que je t'ai conseillé d'écrire une routine de gestion d'erreur : en effet, il se peut très bien (en tout cas, pour la première fois) que tu n'aie pas encore lié ta table BALANCE à ta base de donnée. Cette erreur est donc "normale", et ne devrait pas interrompre l'exécution de ton traitement. Il faut donc intégrer une routine de gestion d'erreur de type ON ERROR (regarde l'aide Access si tu ne connais pas la syntaxe, ainsi que les FAQ et tutos du forum)
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
si tout est OK, n'oubliez pas de cliquer sur
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 20h00   #14
Invité régulier
 
Homme
Expert-comptable
Inscription : février 2007
Messages : 53
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 45
Localisation : Belgique

Informations professionnelles :
Activité : Expert-comptable
Secteur : Finance

Informations forums :
Inscription : février 2007
Messages : 53
Points : 8
Points : 8
Re-

Oui, me voilà démasqué. Effectivement je ne suis pas familié avec la programmation et de surplus avec le VBA. J'ai suivi quelques formations rudimentaires en VBA pour EXCEL mais c'est tout. Tu pourras le constater, mon métier s'éloigne du tien.

Je voudrais consacrer toute mon énergie à établir des requêtes et états sur base des données produites par la fameuse application externe qui est un progiciel de comptabilité. Mais pour faciliter l'automatisation quelques procédures en VBA devraient me suffire. Excel offre l'avantage d'être plus accessible au profane mais dès qu'on souhaite aller plus loin avec une base de données relationnelle, access semble incontournable. J'ai pu obtenir en excel vba le résultat escompté (obtenir de manière dynamique des données stockées dans fichiers dbf et gérés par un logiciel externe) que je n'arrive pas à concrétiser en access.

Je tâcherai de prendre un peu de temps sur les tutoriels du site pour me familiariser avec cette programmation.

Pour revenir à mon projet, j'ai suivi tes instructions mais le résultat est le même (erreur 3265).

rcan7412 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2011, 10h15   #15
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Dammned, Sherlock Homes a encore frappé ...

Concernant ton erreur 3265, te rappelles-tu ce que j'avais noté ?

Citation:
NB : C'est pour cela que je t'ai conseillé d'écrire une routine de gestion d'erreur : en effet, il se peut très bien (en tout cas, pour la première fois) que tu n'aie pas encore lié ta table BALANCE à ta base de donnée. Cette erreur est donc "normale", et ne devrait pas interrompre l'exécution de ton traitement. Il faut donc intégrer une routine de gestion d'erreur de type ON ERROR (regarde l'aide Access si tu ne connais pas la syntaxe, ainsi que les FAQ et tutos du forum)
Avant de tester ta procédure, je te conseille tout d'abords de faire la liaison de ta table balance à la main, afin que la connexion existe déjà. Par la suite, essaye de faire la gestion d'erreur.
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
si tout est OK, n'oubliez pas de cliquer sur
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2011, 11h26   #16
Invité régulier
 
Homme
Expert-comptable
Inscription : février 2007
Messages : 53
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 45
Localisation : Belgique

Informations professionnelles :
Activité : Expert-comptable
Secteur : Finance

Informations forums :
Inscription : février 2007
Messages : 53
Points : 8
Points : 8
Bonjour,

J'ai attaché la table manuellement et j'ai un autre code d'erreur :

erreur d'exécution 91 - variable objet ou variable de bloc With non définie

il s'arrête sur cette expresse : Cnn.Close, juste aprsè celle-ci : bds.TableDefs.Delete ("BALANCE") 'suppression du lien

Or j'ai attaché la table au préalable ?
rcan7412 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2011, 11h52   #17
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Et oui ... le ménage du code n'a pas été bien fait ...

Tu peux supprimer cette instruction que j'ai oublié d'enlever.

N'oublie pas de ré-attacher ta table (parce ça, cç s'est bien passé !!!)
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
si tout est OK, n'oubliez pas de cliquer sur
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2011, 13h38   #18
Invité régulier
 
Homme
Expert-comptable
Inscription : février 2007
Messages : 53
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 45
Localisation : Belgique

Informations professionnelles :
Activité : Expert-comptable
Secteur : Finance

Informations forums :
Inscription : février 2007
Messages : 53
Points : 8
Points : 8
Bonjour,

Sorry, je n'ai pas pu répondre plus tôt.

Faut-il supprimer uniquement l'expression : Cnn.Close ?

En le faisant, j'ai encore un message d'erreur :
Erreur de compilation : type défini par l'utilisateur non défini et il s'arrête sur :

Dim RetCherchAccueil As MSA_OUVRIRNOMFICHIER

Dans la procédure : Sub attacherTable()

Pas facile pour moi tout ça
rcan7412 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2011, 15h41   #19
Membre éprouvé
 
Avatar de dumas.blr
 
Homme Jean-Yves DUMAS
Consultant informatique
Inscription : juin 2010
Messages : 325
Détails du profil
Informations personnelles :
Nom : Homme Jean-Yves DUMAS
Âge : 48
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : juin 2010
Messages : 325
Points : 447
Points : 447
Bonjour,

si RetCherchAccueil n'est pas utilisé dans le reste du code, tu peux supprimer cette déclaration.
A l'origine, cette variable était déclarée (ainsi que le type MSA_OUVRIRNOMFICHIER) pour récupérer la sélection d'un répertoire à partir de la fenêtre explorateur de windows. Comme ton répertoire est diectement renseigné dans ta table .DBF, tu ne devrais pas en avoir besoin
__________________
S'il n'y a pas de solution, c'est qu'il n'y a pas de problème !!!
si tout est OK, n'oubliez pas de cliquer sur
dumas.blr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/07/2011, 17h55   #20
Invité régulier
 
Homme
Expert-comptable
Inscription : février 2007
Messages : 53
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 45
Localisation : Belgique

Informations professionnelles :
Activité : Expert-comptable
Secteur : Finance

Informations forums :
Inscription : février 2007
Messages : 53
Points : 8
Points : 8
J'ai la poisse !

Arrêt sur me.

Erreur de compilation : utilisation incorrecte du mot clé Me

rcan7412 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h59.


 
 
 
 
Partenaires

Hébergement Web