HELP SVP :Importer dans différentes TABLES selon le premier champ de ma ligne (à

Chantillyy Messages postés 2 Date d'inscription jeudi 2 juin 2005 Statut Membre Dernière intervention 3 juin 2005 - 2 juin 2005 à 15:55
Chantillyy Messages postés 2 Date d'inscription jeudi 2 juin 2005 Statut Membre Dernière intervention 3 juin 2005 - 3 juin 2005 à 09:26
Bonjour,

Je suis débutante sous access et j'aurais une petite question qui paraîtra peut être "triviale" pour tous les experts access vba....je m'en excuse (mais moi ça fait un petit moment que j'essaie et je vois pas comment faireee)


En fait je fais des importations à partir de fichiers csv. Pas de soucis quand je veux récupérer tous les champs comme dans ce cas là pour les mettre ensuite dans une même table. Mon fichier csv :
champ1;champ2;champ3;...
champ1;champ2;champ3;...


Je fais cela en utilisant le code que vous trouverez plus loin. Cette méthode me permet assez facilement de sélectionner le fichier csv voulu (bouton "Sélectionner un fichier") puis de l'importer dans ma table (bouton "Impoter les données dans la table")


Mon problème est que j'ai un deuxième type de fichier csv de la forme :
A;15;blabla;...
B;oui;156;...
B;non;196;...
C;lol;123;...
A;68;blabla;...
B;non;126;...
B;oui;999;...
C;lol;696;...


Moi ce que je voudrais c'est récupérer non pas la totalité du fichier dans une même table. Mais récupérer dans une table_import_A les lignes commençant par A
Dans une Table_import_B celles commençant par B
Dans une Table_import_C celles commençant par C...
Je veux faire cela car les "lignes" type A ou type B ou type C n'ont pas le même nombre de champs et ces derniers ont des significations différentes selon la ligne.


Par ailleurs je voudrais que la méthode permette assez facilement (comme dans le cas de mon premier type de fichier csv) de sélectionner mon fichier et de faire l'import facilement dans les différentes tables car j'ai de très nombreux fichiers csv à traiter.


Comment faire?


Je vous remercie d'avance pour votre aide


Zoubis


Chantillyy



PS : Voilà le code que j'avais utilisé pour mon importation de fichier csv (les "lignes étaient toutes du même type et je faisait l'import dans une seule table "sans me poser de questions")

J'avais fait un formulaire avec :
- un bouton pour sélectionner un fichier quelconque (ici je peux donc sélectionner un
fichier .csv).
- Par la suite je voulais importer ces données dans une base access. J'avais un
bouton pour faire l'import dans la base de données


' bouton "Sélectionner le fichier " (dans mon cas c'st un fichier . csv)


Private Sub cmdOpenFile_Click()
Dim result As Variant
ouvreSelecteurFichier
MAJlisteFichiers
BtnImporter
End Sub


' Fonction MAJlisteFichiers()


Private Sub MAJlisteFichiers()
txtListeFichiers.Value = ""
For Each nomFichiers In colFichiers
txtListeFichiers = txtListeFichiers & nomFichiers & vbCrLf
Next
End Sub


' Fonction BtnImporter()
Private Sub BtnImporter()
If Me!txtListeFichiers = "" Then
cmdImporte.Enabled = False
Else
cmdImporte.Enabled = True
End If
End Sub

' Bouton "Importer les données dans la base"


Private Sub cmdImporte_Click()
Dim success As Boolean
For Each nomFichiers In colFichiers
success = Importer(nomFichiers, "Table_import_fichiers_csv")
' If success Then
' MsgBox "Pour le fichier csv, l'importation de " & nomFichiers
& " s'est bien déroulée !", vbInformation
' Else
' MsgBox "Pour le fichier csv, l'importation de " & nomFichiers
& " s'est mal déroulée !", vbCritical
' End If
Next
MAJlisteFichiers
End Sub


Il y a deux modules :


Module Importer CSV:


' Importer CSV
Function Importer(fileName As Variant, tableName)
On Error GoTo Importer_Err
Importer = True


DoCmd.TransferText acImportDelim, SpecificationName, tableName, fileName, False, "",
1252



Importer_Exit:
Exit Function
Importer_Err:
Importer = False
MsgBox Error$
Resume Importer_Exit
End Function



Module modFichier :


Option Compare Database
Public colFichiers As New Collection, nomFichiers As Variant


Public Function OuvrirFichier()
Dim Dialogue As FileDialog
Set Dialogue = FileDialog(msoFileDialogOpen)
With Dialogue
.AllowMultiSelect = False
.ButtonName = "Ouvrir"
.InitialFileName = "*.mdb"
.Filters.Clear
.Filters.Add "Base de données Access", "*.mdb"
.InitialView = msoFileDialogViewList
.Title = "Sélectionner la base ACCESS"
If .Show Then
MsgBox Dialogue.SelectedItems.Item(1)
Else
MsgBox "vous avez cliqué sur Annuler"
End If
End With
Set Dialogue = Nothing
End Function
Public Sub videColFichiers()
While colFichiers.Count > 0
colFichiers.Remove (1)
Wend
End Sub


Public Function ouvreSelecteurFichier()
Dim Dialogue As FileDialog
Set Dialogue = FileDialog(msoFileDialogOpen)
videColFichiers
With Dialogue
.AllowMultiSelect = True
.ButtonName = "Ouvrir"
.InitialFileName = "*.csv"
.Filters.Clear
.Filters.Add "Fichiers CSV", "*.csv"
.Filters.Add "Fichiers Textes", "*.txt"
.InitialView = msoFileDialogViewList
.Title = "Sélectionnez les fichiers"
If .Show Then
For Each Fichier In .SelectedItems
colFichiers.Add (Fichier)
Next
End If
End With
Set Dialogue = Nothing
End Function



Voilà donc ... en fait mon fichier csv de départ était de cette forme:


champ1;champ2;champ3;champ4;...
(en réalité il y a 13 champs)


J'ai donc crée une table Table_import_fichiers_csv avec 13 champs (type texte). L'import a fini par marcher bien après que j'ai défini mes spécifications d'importations (fichiers> données externes...)


Voilààà encore merci à tout ceux qui voudront bien m'aider.

2 réponses

Sensei01 Messages postés 94 Date d'inscription samedi 22 février 2003 Statut Membre Dernière intervention 27 juin 2006
2 juin 2005 à 16:10
Sensei01

tu as essaié d'ouvrir une instance de chaque table, et tu copie dasn l'une ou l'autre en fonction du 1er champ de chaque ligne ?

/******** Sans audance pas de gloire !! ********/
Chantillyy Messages postés 2 Date d'inscription jeudi 2 juin 2005 Statut Membre Dernière intervention 3 juin 2005
3 juin 2005 à 09:26
Je ne comprends pas très bien ce que tu veux dire? Pourrais-tu expliciter davantage?
En fait commme je l'ai expliqué polus haut j'ai de nombreux fichiers .csv à importer et dans le futur il y en aura bcp également . Aussi je voudrais trouver un système permettant d'utiliser les informations contenus dans ces fichiers. Par ailleurs l'import devra se faire de façon simple (clic sur des boutons par exemple pour mettre dans chacune des tables).

Dans mes précédents exemples, j'ai pu réussir à importer un fichier.csv dans sa totalité dans une seule table (l'import se faisant avec un bouton).

Maintenant je voudrais pouvoir stocker mes infos dans différentes tables selon le premier champ de chaque ligne de mon fichier .csv (cf mon précédent message). Comment faire (côté code) pour selon chaque premier champ repartir dans les différentes tables?

Je te remercie de chercher à m'aider.

Zoubis

Chantilly
Rejoignez-nous