Je recois tous les mois beaucoup de fichier tarifaire de different client.
Ces fichiers sont composée de 500 à 10000 produits selon le client.
Cela est dû que l'on a regulierement des mises à jour qui concerne :
- soit des augmentation ou des baisse de tarifs produit ou
- soit des nouveaux produits ou des supressions de produits.
1ere étape : Créer et Exporter données
Ce que je souhaite et que je n'arrive pas, c'est au fur et à mesure que je reçois des fichiers client au format excel, de l'envoyé via une macro dans une base de données (ex access, ou autres qui peuvents accepeter bcp de lignes environ 500 000).
Les elements du tableau que j'ai besoin d'envoyé dans la BDD sont :
- le N° client,
- la reference produit,
- le prix
- et inséré automatiquement une date de chargement lors de l'export.
2ème étape : Faire la requête pour importer les données.
J'ai fait un fichier "requête" qui permet de choisir notre reqête selon le criteres que l'on aura indiqué :
- le N° client,
- Date de chargement
3ème Etape : Résultats
En resultat, j'aimerais obtenir tous ce que j'ai charger aux diferentes dates selon les critéres demandés.
Voir fichier requete pour exemple.
Voilà, j'espere avoir été claire et je ne sais pas comment faire et je ne maitrise pas encore Access.
je te propose un truc un peut moins ambitieux à base de fichier excel (le 2007 a plus de 1 million de ligne tout de même).
pour cet exemple, je n'ai fait que le consultation de la BDD
dans le fichier Requetes, j'ai rajouté une feuille (Tmp) cachée dans laquelle j'ai la liste des no Clients.
cette liste se met à jour à l'ouverture du fichier.
il faudra que tu vérifies les critère de dates : je ne sais pas si j'ai vérifié la bonne colonne de ta BDD (j'ai pris comme critère : "col A = noClient" + "col BC > dateInf" + "col BC < dateSup")
si ça te conviens, on peut se pencher sur ton autre PB : la saisie de la BDD.
J'ai vu ta proposition qui me semble interressante, ce que j'ai peur c'est d'arriver à plus de 1 millions de ligne voir plus, ce qui m'obligera d'avoir un autre fichier BDD et l'autre contrainte c'est d'arrivée avoir des lenteurs si le fichier devait etre plus lourd.
J'ai entendu parler des fichiers xml, ou txt, je ne sais pas si c'est mieux.
Une précision au niveau des dates de début et de fin, il s'agit de date de début et de fin d'application du tarif.
J'avais pensé à insérré dans lors de l'export du tableau une date automatique qui indiquer
Apres je ne sais pas comment enrichir la BDD automatiquement au fur et a mesure j'ai des tableau des clients.
Si les données doivent être stockées dans Acces il serait bien plus simple et logique d'importer les données Excel directement dans la base Access.
En général on importe ou lie le classeur excel à la base Access, puis par des requêtes Action (Ajout, mise à jour notamment) on bascule les données dans la base existante. La requête Action peut sans problème ajouter une date (fonction date() pour la date du jour).
De même pour l'exploitation il est plus simple de créer les requêtes dans Acces et de récupérer les résultats de la requête depuis Excel (Données, Données Externes)
Une date de début de tarif suffit pour retrouver la tarif applicable à une période.
Je pense envisager de l'export/import de donnée par xml, je ne sais pas si c'est le plus simple et meilleur façon de faire des requête via excel, j'espere que je me trompe pas!!
En tout cas, j'ai reussi à créer une "Table XSD", une "BDD XML", un fichier "mapping Donnée".
Mes questions sont :
- Comment dois-je faire pour prendre certaine colonne de mon fichier "Donnée.xls" pour les ajouter dans le fichier "Mapping Donnée.xls" :
* Colonne A : Numéro client
* Colonne Réf produit
* Colonne Prix
* Date de MAJ
- Comment dois-je faire pour exporter les données du fichier "Mapping Donnée.xls" dans le fichier "BDD XML" sans écraser les autres données du fichier xml ?
- Comment dois-je faire pour créer une requête en exportant certaine donnée du fichier "BDD XML" ?
exemple : Pour le Num client A, je veux connaitre les réfs misent à jour entre la Date "01/01/2009" et "07/05/2009", avec leurs differents prix pour calculer la variation prix en %
Apres plusieurs test et recherche, je n'ai toujours pas reussi à exporter mes donnée excel dans une base de donnée. Si quelqu'un peux me donnée une lumiere svp
je t'ai préparé un exemple à un de tes PB : ajouter des données au fichier xml.
le fichier excel "importExportXml.xls" contient :
> une feuille BDD (les données à ajouter au fichier "BDD.xml"),
> un module "Module_XML" qui contient
- les fonctions utiles pour traiter le fichier XML
- un type de données perso "ItemXML"
> un module "Module_Test" qui contient le Sub de test (ajouter les données de BDD au fichier XML)
PS: avec le path du fichier XML à modifier
Code:
Const xmlFilePath As String = "[B][COLOR=Red]E:\aMiki\XLS\test\Dossier_roidurif\BDD.xml[/COLOR][/B]"
Sub Test()
' définir un tableau d'"ItemXML"
'''' ItemXML: type de donnée perso (défini dans le module "Module_XML")
'''' qui contient l'ensemble des informations d'un "élément XML"
Dim compteurElement As Long, tabData() As ItemXML
' récupérer les données à ajouter au fichier XML dans la feuille "BDD"
With ThisWorkbook.Sheets("BDD")
' boucler sur l'ensemble des éléments de la feuille
For compteurElement = 2 To .Cells(.Rows.Count, 1).End(xlUp).Row
' redimensionner le tableau d'"ItemXML"
ReDim Preserve tabData(1 To compteurElement - 1)
' renseigner l'"ItemXML" actuel avec les infos du tableau
' NumClient: colonne "A"
tabData(UBound(tabData)).NumClient = .Range("A" & compteurElement).Text
' RefProduit: colonne "C"
tabData(UBound(tabData)).RefProduit = .Range("C" & compteurElement).Text
' Prix: colonne "AH"
tabData(UBound(tabData)).Prix = .Range("AH" & compteurElement).Text
' DateMaj: colonne "BB"
tabData(UBound(tabData)).DateMaj = .Range("BB" & compteurElement).Text
Next compteurElement
End With
' ajouter le tableau d'"ItemXML" au fichier ttt.xml
Module_XML.AddItemsToXmlFile tabData, xmlFilePath
End Sub
en t'inspirant de ce travail, il serait assez simple de faire des ""requêtes"" sur un fichier XML :
> avec la fonction "Module_XML.LoadXmlFile", tu récupères un tableau d'"ItemXML",
> tu boucles sur ce tableau,
> pour chaque élément, tu vérifies les critères (date, prix, ...)
> et tu traites les éléments qui répondent aux critères (copie dans Excel, modification...)
J'ai opter le transfert dans une Base access, mais je ne sais pas comment faire pour transférer 5 colonnnes sur 90 de mon tableau excel sans biensur ecraser les donnée de la table "Articles_2009" Access.
Il s'agit des cinq colonnes suivantes à transférer :
- Numéro client (en Colonne A) => vers champ "Numéro client"
- Références produits (en Colonne B) => Vers champ "Références"
- Déscriptions (en Colonne D) => vers champ "Déscriptions"
- Barême (en Colonne AB) => vers champ "Barême"
- Prix (en Colonne AH) => Vers champ "Prix HT"
- Date début (en Colonne BB) => vers champ "Date début"
Les articles à exporter sont environs de 10 000 lignes par fichier excel, j'espere que ce rapide lors du transfert.
J'ai ce code, mais il faut que les champs de ta table access porte les meme noms que tes champs excel et que le fichier d'access soit ouvert
Code:
Sub Export_Donnée()
'permet de controler la ligne où le fichier s'arrete
Range("A1").Select
Selection.End(xlDown).Select
Ligne = Selection.Row
'Défini ma base access et mon fichier excel
Dim MaBase As Object
Dim Fichier As String
Set MaBase = GetObject("Chemin complet de ta base access")
Fichier = ActiveWorkbook.FullName
On Error GoTo Error_Export:
MaBase.DoCmd.TransferSpreadsheet acImport, 8, "Nom de la Table Access", Fichier, True, "A1:X" & Ligne & ""'dans mon cas j'exporte de la cellule A1 à la Cellule X_Ligne
MsgBox "Exportation des données est effectuée correctement.", vbInformation, "Exportation": Exit Sub
'MaBase = Nothing
Error_Export:
MsgBox "Attention, un problème est survenu pendant l'exportation, merci de vérifier les données.", vbExclamation, "ERREUR Exportation": Exit Sub
End Sub
Voici un fichier, avec lequel tu peut Lire et Ecrire dans Base Accées, depuis Excel a toi de l'adatpter
Il te faudra , changer le nom du chemin de la base access, dans le fichier Excel
Ici
Private Sub Choix_Change()
ChDir ActiveWorkbook.Path
Dim rs As ADODB.Recordset
Set cnn = New ADODB.Connection
''''''''''
ch = "F:\Mes Documents Cat\Formation logiciels\Excel\Excel Vers Access\Excel-Access DAO Lire Ecrire Valider via Usf Imp"
cnn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & ch & "/" & "Access2000.mdb"
Sql = "SELECT * FROM Client WHERE nom_client='" & Me.Choix & "'"
Bonne soirée