guiguisb Enlèves tes doigts de ton nez! | Code :
- Private Sub Command1_Click()
-
- Dim FULL_ADDRESS As String 'adresse complète du fichier dur l'ordinateur (exemple: C\programme\monfichier.txt)
- Dim Tablecible As String 'nom de la table de destination qui n'est autre que le nom du fichier texte importé
- Dim NOMDUFICHIER As String
- Dim FSO As Scripting.FileSystemObject 'methode qui permet ensuite de connaitre le dossier parent du fichier texte
- NOMDUFICHIER = ""
- FULL_ADDRESS = ""
- Me!NOMFICHIER = ""
-
-
- 'Instanciation du FSO
- Set FSO = New Scripting.FileSystemObject
-
- 'tableau mémorisant le chemin d'accès complet à chaque fichier enregistrant les fichiers à intégrer
- Dim TABLOFICHIERS(100) As String
- Dim v As Byte
- Dim b As Integer
-
- v = 0
- Do Until CHOIX = "arret"
-
- v = v + 1
- If v = 1 Then
- FULL_ADDRESS = LaunchCD(Me) 'fonction qui permet de réchercher un fichier sur son pc
- Me!ADRESSE = FSO.GetParentFolderName(FULL_ADDRESS) ' on recupere le chemin jusqu'au chemin parent des fichiers texte, cela permet de repartir de ce dossier pour chercher les fichiers texte à intégrer au lieu de repartir toujours de la racine du disque
- 'Me!NOMFICHIER = FSO.GetBaseName(FULL_ADDRESS) 'Recuperation du nom du fichier sans l'extension .txt, cei sera le nom de la table crée
- NOMDUFICHIER = FSO.GetFileName(FULL_ADDRESS)
- Tablecible = FSO.GetBaseName(FULL_ADDRESS)
- TABLOFICHIERS(v) = FULL_ADDRESS
-
- If lReturn = 0 Then ' variable qui renvoit 0 si on annule l'importation d'un fichier. Comme c'est le premier choix d'intégration de fichier alors si on annule, la procédure sarrête
- GoTo Exit_Import2
- End If
-
- Else
-
- CHOIX = MsgBox("Voulez-vous intégrer un nouveau fichier dans la table?", vbYesNo + vbInformation)
-
- End If
-
- If CHOIX = vbYes Then
-
- FULL_ADDRESS = LaunchCD(Me)
- TABLOFICHIERS(v) = FULL_ADDRESS
- If TABLOFICHIERS(v) = "" Then
- v = v - 1
- End If
-
- End If
-
- If CHOIX = vbNo Then
-
- CHOIX = "arret"
- v = v - 1
-
- End If
-
- If FULL_ADDRESS <> "" Then
- Me!NOMFICHIER = Me!NOMFICHIER & " / " & FSO.GetBaseName(FULL_ADDRESS)
- End If
-
- FULL_ADDRESS = ""
-
- Loop
-
- 'If v > 1 Then ' si V>1 alors cela signifie que plusieurs fichiers sont à intégrer donc on propose au user de choisir le nom de la table de destination
-
- ' Do Until Me.NOMTABLE <> ""
-
- ' Me!NOMTABLE.Visible = True
- ' Me!VALIDNOMTABLE.Visible = True
-
- ' Me!VALIDNOMTABLE = True
-
- ' Tablecible = Me!NOMTABLE.Value
- ' Loop
-
- ' Me!NOMTABLE.Visible = False
- ' Me!VALIDNOMTABLE.Visible = False
-
- 'End If
-
- If Tablecible <> "" And fTableExists1(Tablecible) = True Then 'la fonction fTableExists1 teste si la table existe cela empêche le user de rajouter des données dans sa table
- MsgBox ("La table a déjà été importée, veuillez la supprimer puis la réimporter si vous le désirez!" )
- MsgBox ("Acun fichier n'a été intégré" )
-
- Else
-
- b = 1
- Do Until b = v + 1
-
- NOMDUFICHIER = FSO.GetFileName(TABLOFICHIERS(b)) 'ici la boucle va tourner dans le tableau qui contient les adresses des fichiers
- ' à intégrer pour tous les importer à la suite ds une meme table
- Call ImportReq(NOMDUFICHIER, Tablecible) 'ImportReq est la fonction d'import du fichier texte dans la table
-
- b = b + 1
-
- Loop
-
- 'récupération de tous les champs de la table pour pouvoir ensuite sélectionner les lignes dont tous les champs sont nuls dans le but de les supprimer
- Dim t As TableDef, tablo() As String
- Dim i As Byte, n As Byte, y As Byte, z As Byte, bd As Database
-
- 'On Error GoTo Exit_Import2 'si erreur message expliquant l'anomalie
-
- Set bd = CurrentDb
- Set t = bd.TableDefs(Tablecible)
- n = t.Fields.Count
- ' Remplissage du tableau
- ReDim tablo(n)
-
- For i = 0 To n - 1
- tablo(i) = t.Fields(i).Name 'le tablo(i) contient tous les champs de la table
- Next i
- Set t = Nothing
- Set bd = Nothing
-
-
- Dim Rst As DAO.Recordset
- Dim Db As DAO.Database
- Dim TESTING As String 'variable qui sert à tester les lignes vides pour les supprimer
-
- TESTING = ""
- Set Db = CurrentDb()
-
- Set Rst = Db.OpenRecordset(Tablecible)
-
- Rst.MoveFirst
-
- While Not Rst.EOF 'deplacement dans le recordset pour trouver les enregistrements vides et les supprimer
-
- For i = 0 To n - 1
- TESTING = TESTING & Rst.Fields(i) 'ici testing concantene toutes es données de la ligne
- Next i
-
- If TESTING = "" Then 'si testing est vide alors la vide est vide et on la supprime
- Rst.Delete
- End If
-
- Rst.MoveNext
- TESTING = ""
-
- Wend
- Rst.Close
- Set Rst = Nothing
-
- 'recherche des dates pour modifier les points par des /
-
- Dim TABLEDATE As DAO.Recordset
- Dim Db3 As DAO.Database
- Dim SQL1 As String
- Dim Tablo2(100) As String
- Set Db3 = CurrentDb()
- Set TABLEDATE = Db3.OpenRecordset(Tablecible)
-
- n = TABLEDATE.Fields.Count
-
- TABLEDATE.MoveFirst
-
- 'While Not TABLEDATE.EOF
- For i = 0 To n - 1
- dat = TABLEDATE.Fields(i)
-
-
- Debug.Print dat
- Debug.Print tablo(i)
- TEST1 = IsNumeric(Left(dat, 2))
- TEST2 = (Right((Left((dat), 3)), 1) = "." )
- TEST3 = IsNumeric(Right((Left((dat), 5)), 2))
- TEST4 = (Right((Left((dat), 6)), 1) = "." )
- TEST5 = IsNumeric(Right(dat, 4))
- If TEST1 = True And TEST2 = True And TEST3 = True And TEST4 = True And TEST5 = True Then
- 'dat = Replace((dat), ".", "/" )
- 'SQL1 = "Update [" & Tablecible & "] set [" & tablo(i) & "]='" & dat & "';"
- 'SQL1 = "Update [" & Tablecible & "] set [" & tablo(i) & "]= Replace([" & tablo(i) & "], [" & . "], [" / " )];"
- 'SQL1 = "Update [" & Tablecible & "] set [" & tablo(i) & "]= Replace((" & Tablo(i) & " ), ".", "/" );"
- SQL1 = "Update [" & Tablecible & "] set [" & tablo(i) & "]= #" & Replace(tablo(i), ".", "/" ) & "#;"
- Debug.Print SQL1
- DoCmd.RunSQL SQL1
-
- 'TABLEDATE.Edit
- 'TABLEDATE(Fields(i)) = dat
- 'TABLEDATE.Update
- End If
- Next i
- 'Wend
-
-
-
- 'Calcul du nombre de ligne intégrées
- Dim TABLECALCUL As DAO.Recordset
- Dim DB2 As DAO.Database
- Dim k As Long
-
- k = 0
- Set DB2 = CurrentDb()
- Set TABLECALCUL = Db.OpenRecordset(Tablecible)
-
- TABLECALCUL.MoveFirst
-
- While Not TABLECALCUL.EOF 'deplacement dans le recordset compter le nombre de lignes
- k = k + 1
-
- TABLECALCUL.MoveNext
-
-
- Wend
- MsgBox (k & " " & "lignes sont présentes dans la table" & " " & Tablecible)
- TABLECALCUL.Close
-
-
- End If
- Exit Sub
- Exit_Import2:
-
- MsgBox ("Aucun fichier n'a été intégré" )
-
- End Sub
|
Voici mon code complet à l'exception des fonctions appelées cependant j'ai marqué l'utililité des fonctions au moment de leur appel.
Tegu pour répondre à ta question et bien Tablo(i) contient le nom du champs.
Pour la clé primaire je suis un peu embeté parce que je peux pas vraiment dire que j'en ai une puisque je n'en défini pas via access (numéro unique attribué achacun) et comme chaque fichier est différent je ne sais pas quel est le champ qui identifie de manière unique chaque ligne!
Merci de l'aide en tout cas!
|