Macro Importation CSV dans BASE

Bonjour à tous, je débute avec Base. Objectif, me passer de mon abonnement Office!! J’utilise le VBA.
Ici, je commence par le plus dure!!!
L’import de CSV automatiquement dans une table.
Autant VB faisait ça très bien, mais là je suis paumé! :slight_smile:
J’ai donc conversé avec notre ami MatouGPT. très agréable je dois dire!
Voici ma question:
Une base de données nommée Cpte.odb, ouvert et en cours d’utilisation.
Une table nommé 00010021201 avec 5 colonnes nommées F1 F2 F3 F4 F5 .
Un bouton dans un formulaire nommé Btn_Test .
Un fichier csv nommé 00010021201.csv avec 5 colonnes nommées F1 F2 F3 F4 F5
Il faut importer 00010021201.csv dans la table 00010021201 automatiquement.
Sa réponse:

Sub Btn_Test_Click(oEvent As Object)
Dim oForm As Object
Dim oTable As Object
Dim oImporter As Object
Dim sFileURL As String
Dim sSeparator As String

' Récupération du formulaire courant
oForm = oEvent.Source.Model.Parent

' Récupération de la table 00010021201
oTable = oForm.getByName("00010021201")

' Création de l'objet TextImporter
oImporter = oTable.TextImport

' Chemin d'accès du fichier CSV à importer
sFileURL = ConvertToURL("Y:\Téléchargements\tmp\00010021201.csv")

' Séparateur utilisé dans le fichier CSV (ici, une virgule)
sSeparator = ","

' Configuration de l'importateur
oImporter.setSeparator(sSeparator)
oImporter.setFilterOptions(0, "utf-8", "LF", sSeparator, """", """", True, True)

' Importation du fichier CSV dans la table
oImporter.importText(sFileURL, oTable)

End Sub

résultat:
Erreur sur la ligne
oTable = oForm.getByName(“00010021201”)
Message d’erreur:
Erreur d’exécution BASIC.
Une exception s’est produite :
Type: com.sun.star.container.NoSuchElementException
Message: .

La compilation de la macro n’indique rien d’autre je ne sais même pas si la suite est bonne!

Merci à vous

Pas besoin de macro pour ça, on ouvre le CSV sous Calc et on glisse la feuille dans Base.

merci d’avoir répondu, mais moi ma devise c’est “d’un clic on fait tout, comme ça on e fait rien!”
Ta solution:
J’m’em…enui à aller chercher la feuille
A l’ouvrir
A copier le tout
Retourner sur la base
A coller
??
Nannnnnnn ! Moi c’est un bouton qui fait tout! :slight_smile:
Vu le temps que je passe à chercher j’ai bien peur de rester avec mon abonnement Office et mon VBA. Snif

Il y a une extension qui fait ça.
https://beaussier.com/sections/viewtopic.php?f=1&t=1705

Merci, 1er test d’approche, ça a l’air pas mal.
J’ai l’impression que cela crée un contexte d’import comme dans MS ACCESS (vba) (les imports enregistrées).
Ca lui a donné un nom d’import, y a plus qu’à voir comment ça se comporte avec un bouton et un fichier csv qui ne change jamais de nom, seules les données ne sont jamais les mêmes.

Bon, ça se complique, 1ère importation, une table a été créé du nom de la feuille csv. Bien
Mais si je relance cela me dit que la table existe déjà. Mince…

Et bien vous renommez la table ou vous donnez un autre nom pour la 2nde importation.

Sans doute, pourriez-vous aussi contactez l’auteur de l’extension.

Bonsoir,
Non, car le fichier csv porte toujours le même nom mais jamais les mêmes données tous les jours, et il doit être importé dans la même table, le tout doit être automatique. Si je dois modifier le nom tous les jours autant faire un bête copier/coller. Moi je suis un adepte du bouton qui fait tout! :slight_smile:
En fait , je penche aller faire un tour dans le code de l’extension, c’est là que tout va se jouer. En effet je vais tenter une com avec l’auteur.
Merci pour la réponse.
PS: Ou alors , après l’import, faire une requête ajout dans une autre de mes tables table, puis supprimer la table d’import. Un peu tarabiscoté , mais pas mal … Je creuse…

Bonsoir,

Et les données sont cumulées dans la table en question ?
Une macro qui lit le fichier texte et envoie les données des lignes dans la table est relativement facile à écrire pourvu que le séparateur soit bien défini.
Cordialement,
JM

Bonsoir,
faut imaginer: je télécharge régulièrement un fichier csv de ma banque qui porte toujours le même nom. Ce fichier arrive betement dans mon dossier téléchargement
Actuellement avec MS Access , j’ouvre un formulaire je clic sur mon bouton
1 - Importe les données du csv dans une table X
2 - ajoute les données (en evitant les doublons) dans une table Y
3 - Analyse mes données et dispatche les données en catégories prédéfinis, le tout en sql mêlé de vba
4 - Supprime le csv dont je n’ai plus besoin.
5 - Efface les données de ma table Y (Surtout pas de suppression de table)
Malheureusement cette petite horloge me fait payer un abonnement office chaque mois !!! :slight_smile:
reste juste à passer le point 1 avec LibreOfficeBase!!
Mon code en résumé (j’ai condensé) quand je pense que ça doit être tout bête
Private Sub Btn-ImportCsv_Click()
On Error Resume Next
'Import des csv
ExistCICCour = Dir(“Y:\Téléchargements\000XXXXXXXXXX.csv”)
If ExistCICCour <> “” Then DoCmd.RunSavedImportExport “ImportXXXXXXX”
'Exécute Macro
DoCmd.RunMacro “McImpExec”
'Recaclule tous les formulaires ouverts
For Each f In Forms
f.Requery
Next
'Ouvre le formulaire d’apairage
DoCmd.OpenForm “Apairage_Auto_Frm”
'Supprime les fichiers csv
If ExistCICCour <> “” Then Kill “Y:\Téléchargements\XXXXXXXXX.csv”
End Sub

L’équivalent de RunSavedImportExport de microsoft est l’extention CSV de libreoffice

Salut,
Je vois ça la semaine prochaine (je suis un retraité très occupé !)
J’aurai probablement besoin de renseignements complémentaires.
A bientôt.
JM

Bonsoir,
Eh bien voilà, à l’arrache, un fichier Base (et macros) avec intégration CSV dans une table temporaire, et un transfert de la table temporaire vers la table définitive avec vérification de l’existence avant le transfert.
Comme je n’avais pas d’information sur les données, j’ai travaillé sur un ensemble de codes postaux. A adapter.
Je peux documenter plus précisément si besoin.
A la réflexion, on peut très bien se passer de la table intermédiaire en testant l’existence du champ CSV dans la table…
Cordialement et bon courage,
Exemple de transfert CSV → Base

Bonsoir je découvre après une absence ! Je vais regarder ça tranquillement

Bonjour, toujours de ce monde ?
J’ai beaucoup tardé à revenir et j’ai raté votre exemple.
Je ne voudrais pas que vous ayez travaillé pour rien. Vous pouvez reposter ?
Bonne soirée … Ou bonjour!

Bonsoir,
Eh oui, toujours vivant… :grinning:
Fort heureusement, c’est à peu près bien rangé dans ma bécane…
Transfert CSV-BASE par table intermédiaire
Le travail est décomposé en 4 macros, pilotées par 4 boutons dans un formulaire.
A plus

Cette fois-ci c’est la bonne, zip récupéré , je zieute, merci