Travailler avec une BDD sur un fichier Excel
Bonjour à tous,
Je vous sollicite à nouveau sur un problème au niveau de mon fichier.
Le code ci-dessous me permet d'alimenter un tableau cible à partir des données de 2 tableaux. Selon j'aimerai que mon tableau des valeurs base (TVB) se trouve dans un autre fichier excel (ce tableau constitue ma BDD) et que ma macro continue de l'exploiter de la même manière que dans le code ci-dessous.
En clair comment venir récupérer des infos dans un tableau présent dans un autre fichier excel ?
Sub test()
Dim OB As Worksheet 'déclare la variable OB (Onglet Base)
Dim OF As Worksheet 'déclare la variable OF (Onglet Filtre)
Dim TB As ListObject 'déclare la variable TB (Tableau Base)
Dim TVB As Variant 'déclare la variable TVB (Tableau des Valeur Base)
Dim TS As ListObject 'déclare la variable TS (Tableau Source)
Dim TVS As Variant 'déclare la variable TVS (Tableau des Valeur Source)
Dim TC As ListObject 'déclare la variable TC (Tableau Cible)
Dim PC As Range 'déclare la variable PC (Plage Cible)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set OB = Worksheets("BDD") 'définit l'onglet OB
Set OF = Worksheets("Filtre") 'définit l'onglet OF
Set TB = OB.ListObjects("Tableau1") 'définit le tableau structuré TB
TVB = TB.DataBodyRange 'définit le tableau des valeurs TVB
Set TS = OF.ListObjects("Tableau2") 'définit le tableau structuré TS
TVS = TS.DataBodyRange 'définit le tableau des valeurs TVS
Set TC = OF.ListObjects("Tableau3") 'définit le tableau structuré TC
If TC.Range.Rows.Count > 2 Then TC.DataBodyRange.Rows.Delete 'si le tableau structuré cible TC a plus de deux lignes, supprime les lignes des données
For I = 1 To UBound(TVS, 1) 'boucle 1 : sur toutes les lignes I du tableau des valeurs source TVS
For J = 1 To UBound(TVB, 1) 'boucle 2 : sur toutes les lignes J du tableau des valeurs base TVB
If Trim(TVS(I, 1)) = Trim(TVB(J, 1)) Then 'condition : si les données correspondent
TC.ListRows.Add 'ajoute une ligne au tableau structuré TC
Set PC = TC.DataBodyRange 'définit la plage PC
PC(PC.Rows.Count, 1) = TVB(J, 2) 'renvoie la donnée ligne J colonne 2 tu tableau des valeur base TVB dans la cellule ligne = nombre de ligne de la plage PC, colonne = 1 de la plage PC
End If 'fin de la condition
Next J 'prochaine ligne de la boucle 2
Next I 'prochaine ligne de la boucle 1
Application.ScreenUpdating = True 'affiche
End SubCordialement,
Ludo.
Hello,
Voici un exemple qui copie un tableau de la feuille 1 d'un autre classeur :
Dim wbMaster As Workbook
Dim wsMaster As Worksheet
Dim wbData As Workbook
Dim wsData As Worksheet
Set wbMaster = ActiveWorkbook
Set wsMaster = wbMaster.Worksheets("Database")
Set wbData = Workbooks.Open("C:\Users\MyName\Data.xlsx")
Set wsData = wbData.worksheets(1)
wsData.Cells(1, 1).CurrentRegion.Copy wsMaster.Cells(1, 1)
wbdata.Close False
Set wbData = nothingHello,
Merci pour ta contribution!
En revanche je ne comprends pas? A quoi sert cette partie du coup?
wsData.Cells(1, 1).CurrentRegion.Copy wsMaster.Cells(1, 1)
wbdata.Close False
Set wbData = nothingComment puis je exploiter le tableau présent dans ma BDD dans le cas de mon code?
Bonjour,
Tu copie les données et tu les colles dans ton classeur, et tu te dépêches de refermer la base de donnée originale.
Maintenant si le but est de modifier ta base de donnée en temps réel : Excel n'est pas fait pour cela. (sauf si tu est le seul utilisateur de cette base de donnée.)
A+
Bonjour,
Je ne suis pas sur de comprendre ?
Ma BDD (que j'ai moi même crée) est un long tableau dans un classeur excel. Le but n'étant pas de la faire varier mais d'exploiter certaines de ses données dans une macro d'un autre classeur excel