bonjour,
sur ma base access , j'ai plusieurs tables que je dois remplir régulierement avec des données mises a jour sur feuille excel.
ce que je voudrais parvenir a réaliser, c'est la fonction importer des données externe de access en VBA en cliquant sur un bouton de mon formulaire:
- cibler le fichier
- importer le fichier excel sur une table temp (hormis la premiere ligne)
- remplacer les donnees de la table par celle de la table temp
J'ai plusieurs tables a remplir de cette maniere (donc plusieurs boutons). Faudrais t il faire une fonction pour chacune des tables ou alors une seule fonction avec des arguments spécifique pour chaque table.
J'ai bien cherché sur le forum du code pour faire cela mais j'ai du mal a compiler tous les éléments.
la partie de code pour cibler le fichier :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 'Fenêtre permettant de choisir un fichier 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 (Me.Hwnd) '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 Excel 'N'utilisez pas cet argument si vous ne voulez spécifier aucun filtre 'TypeFichier = Extention du fichier (Sans le .) 'Exemple: XLS '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 Else OuvrirUnFichier = "" End If End Function 'Permet de savoir si un fichier est déjà ouvert (pas en mode lecture seule) Public Function IsFileOpen(sFilePath As String) As Boolean Dim nFile As Integer On Error GoTo Erreur nFile = FreeFile() Open sFilePath For Input Access Read Lock Read Write As nFile Close nFile IsFileOpen = False Exit Function Erreur: If Err.Number = 70 Then ' Si permission refusée, alors fichier déjà ouvert IsFileOpen = True Else ' Sinon, toute autre erreur est répercutée dans la procédure appelante Err.Raise Err.Number, "IsFileOpen" End If End Function
le début de ma commande
merci d'avance de me donner un coup de main pour avancer
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 Public Function Intégration() On Error GoTo Texte_err Dim db As Database Dim rec As DAO.Recordset, recResult As DAO.Recordset Dim fichier As String, SQL As String Dim table As String, tablefinal As String, tableBase As String DoCmd.SetWarnings False fichier = OuvrirUnFichier(Form_Accueil.Hwnd, "Parcourir", 1, "Fichier import", "xls") If fichier = "" Then GoTo Nochoice_exit End If If (IsFileOpen(fichier)) Then MsgBox "Le fichier " & fichier & vbLf & "est déjà ouvert. " & vbCrLf & vbCrLf & "Veuillez le fermer avant de recommencer l'import." Exit Function End If .....
Partager