cs_guigui28
Messages postés
28
Date d'inscription
vendredi 10 septembre 2004
Statut
Membre
Dernière intervention
17 octobre 2006
7 août 2006 à 10:09
Pour votre info, jusqu'a présent j'ai contourné le problème en créant une base access, à chaque chargement de fichier, ce qui me permet de réorganiser mes valeurs comme je veux à travers une requête. Seulement voilà, c'est bien facile mais ça prend du temps... énormément de temps.Je vous met un extrait de mon module qui me servais jusqu'a présent : ça peut peut-être vous servir, mais je pense que l'utilisation des tableaux est bien plus rapide.'==================================================================================================='Fonction permettant de charger les données du fichier lu depuis la bdd'===================================================================================================Public Sub ChargerGrille()' Variable pour la connexion Dim Cnx As New ADODB.Connection' Variable pour le recordset Dim RS As New ADODB.Recordset' Requête pour la base de données Dim Sql As StringOn Error GoTo Fin' Choix du fournisseur de la base de données pour Access - Microsoft jet OLEDB Cnx.Provider = "Microsoft.jet.OLEDB.4.0"' Chemin d'accès à la base de données Cnx.ConnectionString = "Provider=Microsoft.jet.OLEDB.4.0;" & _ "Data Source=" & App.Path & "\Tmp.mdb; "' Ouverture de la connection Cnx.Open' Config du recordset With RS .CursorLocation = adUseClient .CursorType = adOpenDynamic .LockType = adLockPessimistic RS.Open "SELECT DONNEES.Num, DONNEES.Groupe, DONNEES.Nom, DONNEES.Nombre, DONNEES.Largeur, DONNEES.Hauteur, DONNEES.Longueur, DONNEES.Matière, DONNEES.Remarque " & _ "From DONNEES " & _ "ORDER BY DONNEES.Groupe, DONNEES.Largeur DESC , DONNEES.Hauteur DESC , DONNEES.Longueur DESC;", Cnx .Requery .MoveFirst End With' Boucle de chargement de la grille Do Until RS.EOF FrmDonnées.Liste.AddItem (RS!Num) & Chr(9) & (RS!Groupe) & Chr(9) & (RS!Nom) & Chr(9) & (RS!Nombre) & Chr(9) & (RS!Largeur) & Chr(9) & (RS!Hauteur) & Chr(9) & (RS!Longueur) & Chr(9) & (RS!Matière) & Chr(9) & (RS!Remarque) RS.MoveNext Loop FrmDonnées.Liste.ScrollBars = flexScrollBarBothFinFin: Set Cnx = Nothing Set RS = Nothing Exit SubFin: MsgBox "Erreur N°: " & Err.Number & " => " & Err.Description GoTo FinFin 'If Err.Number = 9 Then MsgBox Err.DescriptionEnd Sub'==================================================================================================='Fonction permettant de connaître le nombre de ligne dans le fichier lu (Donner en variable'le chemin d'accès au fichier)'===================================================================================================Private Sub ChercheNbreLigne(CheminFichier)Dim FS, A As ObjectDim StreamLine As String Set FS = CreateObject("Scripting.FileSystemObject") Set A = FS.OpenTextFile(CheminFichier, 1, 0) Do While A.AtEndOfStream True StreamLine = A.ReadAll NL = A.Line Loop A.CloseEnd Sub
'==================================================================================================='Fonction permettant de créer une base de donnée format access, et les tables qui vont bien,'à chaque chargement d'un fichier'associé à la dll : Microsoft Access 11.0 Object Library'==============================================================================================='Public Sub CréationBase()'Dim Chemin As String'Dim AppAccess As New Access.Application'Dim Connection As New ADODB.Connection'Dim Cd As New ADODB.Command'Dim Sql As String'' Définition du chemin' Chemin = App.Path & "\Tmp.mdb"'' On supprime le fichier (Supprimé dans la corbeille windows) s'il est déjà existant' If Dir$(Chemin) vbNullString Then Kill Chemin'' Création de la base' Set AppAccess = CreateObject("Access.Application.11")' AppAccess.NewCurrentDatabase Chemin'' Fermeture de l'objet' AppAccess.CloseCurrentDatabase: Set AppAccess = Nothing'' Choix du fournisseur de la base de données pour Access - Microsoft jet OLEDB' Connection.Provider = "Microsoft.jet.OLEDB.4.0"'' Chemin d'accès à la base de données' Connection.ConnectionString = Chemin'' Ouverture de la connection' Connection.Open'' Pour relier la connexion ouverte à la commande' Cd.ActiveConnection = Connection'' Définition d'une requête de création de table' Sql = "Create Table DONNEES (Num NUMERIC , Groupe CHAR(50) , Nom CHAR(50), Nombre NUMERIC NOT NULL, Largeur NUMERIC NOT NULL, Hauteur NUMERIC NOT NULL, Longueur NUMERIC NOT NULL, Matière CHAR(50), Remarque CHAR(50))"'' Exécution de la commande' Cd.CommandText = Sql' Cd.Execute Sql'' Définition d'une requête de création de table' Sql = "Create Table LISTE (Num NUMERIC , Groupe CHAR(50) , Nom CHAR(50), Nombre NUMERIC NOT NULL, Largeur NUMERIC NOT NULL, Hauteur NUMERIC NOT NULL, Longueur NUMERIC NOT NULL, Matière CHAR(50), Remarque CHAR(50))"'' Exécution de la commande' Cd.CommandText = Sql' Cd.Execute Sql'' Fermeture des objets déclarés' Connection.Close: Set Connection = Nothing' Set Cd = Nothing'End Sub'==================================================================================================='Fonction premettant de supprimer les données contenue dansla base de données temporaire'===================================================================================================Public Sub VideBdd()' Variable pour la connexion Dim Cnx As New ADODB.Connection' Variable pour le recordset Dim RS As New ADODB.Recordset' Variable d'incrémentation (Boucle) Dim I As IntegerOn Error GoTo erreur' Choix du fournisseur de la base de données pour Access - Microsoft jet OLEDB Cnx.Provider = "Microsoft.jet.OLEDB.4.0"' Chemin d'accès à la base de données Cnx.ConnectionString = "Provider=Microsoft.jet.OLEDB.4.0;" & _ "Data Source=" & App.Path & "\Tmp.mdb; "' Ouverture de la connection Cnx.Open' Config du recordset With RS .CursorLocation = adUseClient .CursorType = adOpenDynamic .LockType = adLockPessimistic .Open "Select * from DONNEES;", Cnx .Requery End With' Boucle de suppression des données Table "DONNEES" If RS.RecordCount > 0 Then For I = 0 To RS.RecordCount - 1 RS.Delete RS.MoveNext Next End If' On ferme le recordset Set RS = Nothing' Config du recordset With RS .Open "Select * from LISTE;", Cnx .Requery End With' Boucle de suppression des données Table "LISTE" If RS.RecordCount > 0 Then For I = 0 To RS.RecordCount - 1 RS.Delete RS.MoveNext Next End If'Ferme et détruit le recordset pour libérer de l'espace mémoire Set Cnx = Nothing Set RS = Nothing Exit Suberreur: MsgBox "Erreur N° : " & Err.Number & " => " & Err.Description & " => Module Op Fichier/VideBdd()" Exit SubEnd Sub'==================================================================================================='Fonction permettant d'importer les données du fichier csv vers la base de données'crée précédemment'===============================================================================================Public Sub ChargeMdbBVN()' Variable pour la connexion Dim Connection As New ADODB.Connection' Variable pour le recordset Dim RS As New ADODB.Recordset' Requête pour la base de données Dim Sql As String' Fichier Lu Dim FileStream As TextStream' Variable contenant une ligne du fichier texte Dim Ligne As String' Tableau sur une ligne séparant les données d'une ligne du fichier texte Dim TabLigne() As String' Variable contenant du texte Dim Texte As String' Variable contenant des nombres Dim Chiffre As DoubleOn Error GoTo erreur' Choix du fournisseur de la base de données pour Access - Microsoft jet OLEDB Connection.Provider = "Microsoft.jet.OLEDB.4.0"' Chemin d'accès à la base de données Connection.ConnectionString = "Provider=Microsoft.jet.OLEDB.4.0;" & _ "Data Source=" & App.Path & "\Tmp.mdb; "' Ouverture de la connection Connection.Open' Config du recordset With RS .CursorLocation = adUseClient .CursorType = adOpenDynamic .LockType = adLockPessimistic .Open "Select * from DONNEES;", Connection .Requery End With' Boucle d'importation des données Set FileStream = FS.OpenTextFile(AccèsFichier, ForReading, False) While Not FileStream.AtEndOfStream RS.AddNew Ligne = FileStream.ReadLine TabLigne = Split(Ligne, Délimiteur) Texte = TabLigne(0): RS!Num = Texte 'Num NUMERIC NOT NULL Texte = TabLigne(1): RS!Groupe = Texte 'Groupe CHAR(50) Texte = TabLigne(2): RS!Nom = Texte 'Nom CHAR(50) Chiffre = TabLigne(3): RS!Nombre = Chiffre 'Nombre NUMERIC NOT NULL Chiffre = TabLigne(4): RS!Largeur = Chiffre 'Largeur NUMERIC NOT NULL Chiffre = TabLigne(5): RS!Hauteur = Chiffre 'Hauteur NUMERIC NOT NULL Chiffre = TabLigne(6): RS!Longueur = Chiffre 'Longueur NUMERIC NOT NULL Texte = TabLigne(7): RS!Matière = Texte 'Matière CHAR(50) Texte = TabLigne(8): RS!Remarque = Texte 'Remarque CHAR(50) RS.Update RS.Requery Wend FileStream.Close Set FileStream = Nothing'Ferme et détruit le recordset pour libérer de l'espace mémoire Set Connection = Nothing Set RS = Nothing Exit Suberreur: MsgBox "Le fichier lu n'est pas au format approprié : la fonction est prévue pour lire " & _ vbCr & "les données suivantes dans cet ordre :" & vbCr & "" & _ vbCr & " 1°) Le Numéro de bois qui peut être alphanumérique" & _ vbCr & " 2°) Le Groupe qui peut être alphanumérique" & vbCr & _ " 3°) Le Nom qui peut être alphanumérique" & _ vbCr & " 4°) Le Nombre qui doit être Numérique" & _ vbCr & " 5°) La Largeur qui doit être Numérique" & _ vbCr & " 6°) La Hauteur qui doit être Numérique" & vbCr _ & " 7°) La Longueur qui doit être Numérique" & _ vbCr & " 8°) La Matière qui peut être Alphanumérique" & _ vbCr & " 9°) Une Remarque qui peut être Alphanumérique (Facultative)" & _ vbCr & "" & vbCr & "La fonction en cours est donc annulée." & _ vbCr & "Veuillez ré-exporter le fichier *.cvs au format attendu. ", vbOKOnly + vbDefaultButton1 + vbExclamation, "Erreur de lecture : " Exit SubEnd Sub