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/09/2011, 20h40   #1
Invité régulier
 
Homme
Inscription : septembre 2011
Messages : 44
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Val de Marne (Île de France)

Informations forums :
Inscription : septembre 2011
Messages : 44
Points : 9
Points : 9
Par défaut Chemin par défaut, modifiable

Citation:
Envoyé par jerome94 Voir le message
Je recherche sur le site (mais ne trouve pas) la possibilité de mettre dans un champ qui est dans un formulaire un chemin (D:\monrépertoire\monfichier.xls) par défaut et en donnant la possibilité à l'utilisateur de modifier le chemin via un bouton du genre parcourir qui lui permettrait d'indiquer le nouveau lieu de stockage.

J'aimerais aussi qu'il puisse dire que le nouvel emplacement choisi est le nouvel emplacement par défaut. Ensuite ce fichier à l'emplacement indiqué je l'intègre dans une table pour le traiter.
Le traitement du fichier je le fais déjà.

Est-ce que quelqu'un peu me dire si cela existe déjà ou bien un peu aide
Est-il possible d'avoir un peu d'aide sur le sujet ou bien des liens qui me permettrais de réaliser ceci ?

Merci par avance
jerome94 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2011, 23h53   #2
Invité régulier
 
Homme
Inscription : septembre 2011
Messages : 44
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Val de Marne (Île de France)

Informations forums :
Inscription : septembre 2011
Messages : 44
Points : 9
Points : 9
Bonsoir,

J'ai trouvé ce code pour aller chercher un fichier en particulier sur son emplacement de stockage.

Par contre la valeur récupérée dans la variable "Fichier" je souhaiterais la mettre dans une table et que celle ci soit mise à jour à chaque fois que je modifie la variable "Fichier".
De cette manière je peux faire une mise à jour du chemin si besoin et sinon je lance mon import excel à partir du chemin enregistré dans la table.

Ma table est T_Fichier et le nom du champ de cette table est EMPL_Fichier.
J'ai bien fait une requête de mise à jour mais il ne me met rien dans ma table

Merci de votre aide

voici mon code pour prendre le chemin :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Public Function Main()
    Dim fd As FileDialog
    Set fd = Application.FileDialog(msoFileDialogFilePicker)
    Dim Fichier As Variant
    With fd
        If .Show = -1 Then
            For Each Fichier In .SelectedItems
                MsgBox "Le chemin est : " & Fichier
            Next Fichier
        Else
        End If
    End With
    Set fd = Nothing
End Function
jerome94 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 07h18   #3
Invité régulier
 
Homme
Inscription : septembre 2011
Messages : 44
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Val de Marne (Île de France)

Informations forums :
Inscription : septembre 2011
Messages : 44
Points : 9
Points : 9
Vraiment personne pour m'aiguiller ! 
J'ai penser passer par un sous formulaire mais pas encore testé :
Est la solution ou bien on peut le faire en direct en VB ?

Merci
jerome94 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 16h37   #4
Membre habitué
 
quentin massé
Inscription : janvier 2010
Messages : 251
Détails du profil
Informations personnelles :
Nom : quentin massé
Âge : 27
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : janvier 2010
Messages : 251
Points : 125
Points : 125
Salut.

Si j'ai bien compris tu as dans ton formulaire un textbox avec un chemin par défaut.
Ce chemin tu le récupère dans une variable text en vba pour permettre de mettre ta table a jour.

Exemple:
Code :
1
2
sSQL=INSERT INTO [T_Fichier] ([EMPL_Fichier]) VALUES ('" & mavariable & "')
Docmd.RUNSQL(sSQL)
De même pour la modification si le chemin change. Attention pense bien à récupérer ton ancier chemin dans une variable pour le mettre dans la condition de ton UPDATE.

Pour le bouton parcourir, j'ai trouvé il n'y a pas longtemps un sujet sur se forum (je ne sais plus ou).
Voici le code a mettre dans un module:

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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
Option Compare Database
 
'Déclaration de l'API
Private Declare Sub PathStripPath Lib "shlwapi.dll" Alias "PathStripPathA" (ByVal pszPath As String)
Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _
                   "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
 
 'Structure du fichier
Private Type OPENFILENAME
    lStructSize As Long
    hWndOwner As Long
    hInstance As Long
    lpstrFilter As String
    lpstrCustomFilter As String
    nMaxCustFilter As Long
    nFilterIndex As Long
    lpstrFile As String
    nMaxFile As Long
    lpstrFileTitle As String
    nMaxFileTitle As Long
    lpstrInitialDir As String
    lpstrTitle As String
    flags As Long
    nFileOffset As Integer
    nFileExtension As Integer
    lpstrDefExt As String
    lCustData As Long
    lpfnHook As Long
    lpTemplateName As String
End Type
 
 'Constantes
Private Const OFN_READONLY = &H1
Private Const OFN_OVERWRITEPROMPT = &H2
Private Const OFN_HIDEREADONLY = &H4
Private Const OFN_NOCHANGEDIR = &H8
Private Const OFN_SHOWHELP = &H10
Private Const OFN_ENABLEHOOK = &H20
Private Const OFN_ENABLETEMPLATE = &H40
Private Const OFN_ENABLETEMPLATEHANDLE = &H80
Private Const OFN_NOVALIDATE = &H100
Private Const OFN_ALLOWMULTISELECT = &H200
Private Const OFN_EXTENSIONDIFFERENT = &H400
Private Const OFN_PATHMUSTEXIST = &H800
Private Const OFN_FILEMUSTEXIST = &H1000
Private Const OFN_CREATEPROMPT = &H2000
Private Const OFN_SHAREAWARE = &H4000
Private Const OFN_NOREADONLYRETURN = &H8000
Private Const OFN_NOTESTFILECREATE = &H10000
 
Private Const OFN_SHAREFALLTHROUGH = 2
Private Const OFN_SHARENOWARN = 1
Private Const OFN_SHAREWARN = 0
 
 
Public Function OuvrirUnFichier(Handle As Long, _
                                Titre As String, _
                                TypeRetour As Byte, _
                                Optional TitreFiltre As String, _
                                Optional TypeFichier As String, _
                                Optional RepParDefaut As String) As String
 'OuvrirUnFichier est la fonction a utiliser dans votre formulaire pour ouvrir _
 'la boîte de dialogue de sélection d'un fichier.
 'Explication des paramètres
    'Handle = le handle de la fenêtre
    'Titre = Titre de la boîte de dialogue
    'TypeRetour (Définit la valeur, de type String, renvoyée par la fonction)
        '1 = Chemin complet + Nom du fichier
        '2 = Nom fichier seulement
    'TitreFiltre = Titre du filtre
        'Exemple: Fichier Access
        'N'utilisez pas cet argument si vous ne voulez spécifier aucun filtre
    'TypeFichier = Extention du fichier (Sans le .)
        'Exemple: MDB
        'N'utilisez pas cet argument si vous ne voulez spécifier aucun filtre
    'RepParDefaut = Répertoire d'ouverture par defaut
        'Exemple: C:\windows\system32
        'Si vous laissé l'argument vide, par defaut il se place dans le répertoire de votre application
 
Dim StructFile As OPENFILENAME
Dim sFiltre As String
 
 'Construction du filtre en fonction des arguments spécifiés
If Len(TitreFiltre) > 0 And Len(TypeFichier) > 0 Then
  sFiltre = TitreFiltre & " (" & TypeFichier & ")" & Chr$(0) & "*." & TypeFichier & Chr$(0)
End If
sFiltre = sFiltre & "Tous (*.*)" & Chr$(0) & "*.*" & Chr$(0)
 
 
 'Configuration de la boîte de dialogue
  With StructFile
    .lStructSize = Len(StructFile) 'Initialisation de la grosseur de la structure
    .hWndOwner = Handle 'Identification du handle de la fenêtre
    .lpstrFilter = sFiltre 'Application du filtre
    .lpstrFile = String$(254, vbNullChar) 'Initialisation du fichier '0' x 254
    .nMaxFile = 254 'Taille maximale du fichier
    .lpstrFileTitle = String$(254, vbNullChar) 'Initialisation du nom du fichier '0' x 254
    .nMaxFileTitle = 254  'Taille maximale du nom du fichier
    .lpstrTitle = Titre 'Titre de la boîte de dialogue
    .flags = OFN_HIDEREADONLY  'Option de la boite de dialogue
    If ((IsNull(RepParDefaut)) Or (RepParDefaut = "")) Then
        RepParDefaut = CurrentDb.Name
        PathStripPath (RepParDefaut)
        .lpstrInitialDir = Left(CurrentDb.Name, Len(CurrentDb.Name) - Len(Mid$(RepParDefaut, 1, _
InStr(1, RepParDefaut, vbNullChar) - 1)))
        Else: .lpstrInitialDir = RepParDefaut
    End If
  End With
 
If (GetOpenFileName(StructFile)) Then 'Si un fichier est sélectionné
    Select Case TypeRetour
      Case 1: OuvrirUnFichier = Trim$(Left(StructFile.lpstrFile, InStr(1, StructFile.lpstrFile, vbNullChar) - 1))
      Case 2: OuvrirUnFichier = Trim$(Left(StructFile.lpstrFileTitle, InStr(1, StructFile.lpstrFileTitle, vbNullChar) - 1))
    End Select
  End If
 
End Function

et ici le code a mettre dans ton formulaire sur ton bouton parcourir:

Code :
1
2
3
4
5
6
7
8
9
10
Dim strFullFilename  As String
Dim strFilename      As String
Dim strPathname      As String
 
    strFullFilename = OuvrirUnFichier(Application.hWndAccessApp, "Parcourir", 1, "Fichier Excel", "xlsx")
    strFilename = Mid$(strFullFilename, InStrRev(strFullFilename, "\") + 1)
    strPathname = Left$(strFullFilename, InStrRev(strFullFilename, "\") - 1)
    'strFilename est le nom du fichier
    'strPathname  est le chemin d'accès qui se trouve avant le nom
    'si tu veux le chemin complet tu met: strPathname & "/" & strFilename

Voila avec ca tu devrai pouvoir t'en sortir.
rob1son76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 21h40   #5
Invité régulier
 
Homme
Inscription : septembre 2011
Messages : 44
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Val de Marne (Île de France)

Informations forums :
Inscription : septembre 2011
Messages : 44
Points : 9
Points : 9
Je te remercie pour ces éléments.
Ce soir je suis en déplacement et je consulte via mon téléphone mais demain j'aurais le net sur mon PC donc je ferais le test avec tes éléments.

Néanmoins je suis sur une piste avec mon code et je la mettrais si j'arrive à quelques choses.

ce soir je tente de mettre à jour un table à partir de plusieurs requêtes pas simple pour moi
On verra si j'ai encore des questions

Merci encore


Je ne sais pas si c'est très conventionnel mais je suis arrivée à faire ceci avec mon code d'origine en faite :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Public Function Main()
    Dim fd As FileDialog
    Set fd = Application.FileDialog(msoFileDialogFilePicker)
    Dim Fichier As Variant
    With fd
        If .Show = -1 Then
            For Each Fichier In .SelectedItems
                Main = Fichier           'rajout sur code de départ
            Next Fichier
        Else
        End If
    End With
    Set fd = Nothing
End Function
Et ensuite via un mon bouton dans mon formulaire je lance une macro (M_maj_T_Fichier) qui me lance une requête de mise à jour (R_Maj_ficher) sur ma table (T_Fichier) où je stock mon chemin (dans EMPL_Fichier) que je réutilise ensuite quand je veux.

Je n'ai peut pas réalisé l'optimal (j'en suis consciens mais cela marche)

Ensuite sur cette table que je viens de mettre à jour est possible d'ajout et de mettre à jour des valeurs dans les autres champs mais sur la même ligne d'enregistrement à partir de source différente (autre table ou requête plus d'ailleurs sont mes autres sources potentielles)
jerome94 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h22.


 
 
 
 
Partenaires

Hébergement Web