[Résolu] Mettre à jour des données à partir d'Excel

Discussions sur le module de base de données Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers.
Les questions sur les macros doivent être postées dans la section dédiée en dessous.

Modérateur : Vilains modOOs

Règles du forum
Cette section est dédiée au module Base et plus particulièrement sur le langage SQL ou sur les connexions aux SGBD tiers. Vous ne devez pas poster ici de questions sur les macros mais utiliser la section éponyme.
Pour accélérer les réponses, vous pouvez mettre en ligne votre base en joignant un fichier ODB : comment faire.
ViniAsco
Membre OOrganisé
Membre OOrganisé
Messages : 56
Inscription : 11 mai 2022 15:55

[Résolu] Mettre à jour des données à partir d'Excel

Message par ViniAsco »

Bonjour

J'ai créé une table à partir de données contenues dans un fichier Calc, mais je me rends compte que le remplissage fait par un collègue n'était pas des plus optimisé pour simplifier la création de requêtes.
Du coup, j'ai fait un copié/collé des valeurs vers Calc pour embarquer la clef primaire et puis j'ai optimisé ce remplissage.
Je voudrais maintenant actualiser les données de la table et je pensais qu'un copié/collé, en cochant "Ajouter de données" allait suffire, mais en fait la table reste dans son état initial.
Alors je pourrais refaire une table, mais ça impliquerait de reparamétrer tous les champs pour mettre le bon type de format, etc., donc bof.

Comment faire ?
Merci
Dernière modification par micmac le 02 oct. 2023 07:54, modifié 2 fois.
Raison : [Résolu] remplace [résolu]. Merci de respecter la graphie des balises
LibreOffice 7.4.7.2 sous macOS 12
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25184
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: Mettre à jour des données à partir d'Excel

Message par Dude »

Salut,
ViniAsco a écrit : 15 sept. 2023 11:17 Du coup, j'ai fait un copié/collé des valeurs vers Calc pour embarquer la clef primaire et puis j'ai optimisé ce remplissage.
Ca ne marchera pas car une feuille de classeur (et encore pis si tu utilises un format propriétaire et fermé) n'est pas une vraie table.
ViniAsco
Membre OOrganisé
Membre OOrganisé
Messages : 56
Inscription : 11 mai 2022 15:55

Re: Mettre à jour des données à partir d'Excel

Message par ViniAsco »

En fait ça fonctionne mais sans vraiment être une mise à jour des données.
En supprimant toutes les données de la base avant puis en collant celles venant de Calc ou d'Excel retravaillées, c'est bon.
LibreOffice 7.4.7.2 sous macOS 12
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
Messages : 9258
Inscription : 28 août 2010 08:45

Re: Mettre à jour des données à partir d'Excel

Message par micmac »

Bonjour,
Dans votre signature il y a écrit :macOS 12
Veuillez indiquer la version complète de l'OS 12.6.6 par exemple.

Comment clore un sujet correctement lorsqu'il est résolu
Touche Ctrl de Windows = touche cmd⌘ sur Mac
Outils > Options sur Windows = OpenOffice > Préférences sur Mac
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25184
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: Mettre à jour des données à partir d'Excel

Message par Dude »

ViniAsco a écrit : 15 sept. 2023 14:09 En fait ça fonctionne mais sans vraiment être une mise à jour des données.
Donc ça ne fonctionne pas.
ViniAsco a écrit : 15 sept. 2023 14:09En supprimant toutes les données de la base avant puis en collant celles venant de Calc ou d'Excel retravaillées, c'est bon.
Donc en intégrant les données dans une vraie table, ça fonctionne.

CQFD
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
nounours2
Membre prOOscrit
Messages : 88
Inscription : 18 juin 2023 15:10

Re: Mettre à jour des données à partir d'Excel

Message par nounours2 »

@ ViniAsco

vinum bonum corpus laetificat

voire schémas ci-joint.

Slts

nounours2
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre Office 6.0.7 sous Ubuntu 18.04
Avatar de l’utilisateur
jeanmimi
Grand Maître de l'OOffice
Grand Maître de l'OOffice
Messages : 16960
Inscription : 03 mars 2006 16:02
Localisation : Venise verte

Re: Mettre à jour des données à partir du tableur

Message par jeanmimi »

Bonjour,
Il y a plusieurs ressources dans le forum, commentant le passage de données depuis Calc vers Base, soit par Exportation depuis Calc, soit par Importation depuis Base.
Par exemple ici :
viewtopic.php?t=41847&hilit=Base+import ... %A9es+Calc
LibreOffice : Version : 24.2 (x64)(12 avril 2024)
Adoptium JRE ou Oracle JRE (x64), Windows 10, Thunderbird, Firefox
nounours2
Membre prOOscrit
Messages : 88
Inscription : 18 juin 2023 15:10

Re: Mettre à jour des données à partir d'Excel

Message par nounours2 »

@ ViniAsco

Le Grand Maître est intervenu à juste titre au sujet des automatismes...

Cependant, la méthode élémentaire illustrée en-dessus est valable aussi pour davantage de données.

Je vous invite donc à un aperçu du fil suivant viewtopic.php?t=67558.

Slts

nounours2
Libre Office 6.0.7 sous Ubuntu 18.04
ViniAsco
Membre OOrganisé
Membre OOrganisé
Messages : 56
Inscription : 11 mai 2022 15:55

Re: Mettre à jour des données à partir d'Excel

Message par ViniAsco »

Bonjour
Les captures données par nounours2 montrent comment créer une base depuis un tableur, ce qui ne me cause aucun problème.
Mais cette même méthode pour mettre à jour une base existante ne fonctionne pas chez moi. Ou plutôt si la mise à jour consiste en l'ajout de données, c'est bon, mais s'il s'agit de modifier des valeurs existantes, non.
Pour ce dernier point, je dois effacer la base avant.

Quant aux autres fils indiqués, ils font appel à des macros ou du code trop costauds pour mes compétences. Mais en plus et si je les ai bien compris, ils indiquent comment relier une base à un tableur, mais la méthode "ajout de données" fonctionne très bien une fois qu'on sait comment s'en servir.
LibreOffice 7.4.7.2 sous macOS 12
nounours2
Membre prOOscrit
Messages : 88
Inscription : 18 juin 2023 15:10

Re: Mettre à jour des données à partir d'Excel

Message par nounours2 »

Cher Monsieur ViniAsco,

Fort de votre expérience dans le traitement de texte, où l'on peut substituer le même terme répété plusieurs fois avec un clic, j'ai le regret de vous annoncer q'avec une table de base c'est un peu comme chercher midi à quatorze heures...

Néanmoins, vu que vous connaissez si bien votre tableur, vous devriez donc savoir que vous pouvez y coller les données de l'ancienne table, et préparer la feuille pour un transfert de données dans une nouvelle table en suivant le schéma susmentionné.

Slts

nounours2
Libre Office 6.0.7 sous Ubuntu 18.04
Avatar de l’utilisateur
Dolev
InconditiOOnnel
InconditiOOnnel
Messages : 951
Inscription : 19 août 2018 05:20

Re: Mettre à jour des données à partir d'Excel

Message par Dolev »

Bonjour
ViniAsco a écrit : 26 sept. 2023 09:34 Mais cette même méthode pour mettre à jour une base existante ne fonctionne pas chez moi.
N'ayant pas compris ce que vous cherchez à faire veuillez fournir un document visant à reproduire le problème
Open Office 4.1.15 sous Windows 11
Avatar de l’utilisateur
Jurassic Pork
PassiOOnné
PassiOOnné
Messages : 629
Inscription : 09 août 2017 22:15

Re: Mettre à jour des données à partir d'Excel

Message par Jurassic Pork »

Hello,
ViniAsco a écrit : 15 sept. 2023 14:09 En fait ça fonctionne mais sans vraiment être une mise à jour des données.
En supprimant toutes les données de la base avant puis en collant celles venant de Calc ou d'Excel retravaillées, c'est bon.
En supprimant seulement les enregistrements qui doivent être mis à jour cela devrait fonctionner si les données collées contiennent l'ensemble des données des enregistrements.
Pour faire quelque chose de plus précis il faudrait faire une requête SQL Update qui permettrait de faire une "vraie" mise à jour et sans inclure obligatoirement toutes les données des enregistrements.
Ami calmant, J.P
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
ViniAsco
Membre OOrganisé
Membre OOrganisé
Messages : 56
Inscription : 11 mai 2022 15:55

Re: Mettre à jour des données à partir d'Excel

Message par ViniAsco »

Merci de vos réponses.
Mes connaissances en SQL sont trop limitées pour la manipulation de bases.
Et finalement, et pour mon usage, ce que j'ai décrit plus haut ne prend guère de temps et me permet d'obtenir ce que je souhaite.
Bonne fin de semaine.
LibreOffice 7.4.7.2 sous macOS 12
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
Messages : 9258
Inscription : 28 août 2010 08:45

Re: Mettre à jour des données à partir d'Excel

Message par micmac »

micmac a écrit : 15 sept. 2023 15:43 Veuillez indiquer la version complète de l'OS 12.6.6 par exemple.
Comment clore un sujet correctement lorsqu'il est résolu
Touche Ctrl de Windows = touche cmd⌘ sur Mac
Outils > Options sur Windows = OpenOffice > Préférences sur Mac
Avatar de l’utilisateur
Jurassic Pork
PassiOOnné
PassiOOnné
Messages : 629
Inscription : 09 août 2017 22:15

Re: Mettre à jour des données à partir d'Excel

Message par Jurassic Pork »

Hello,
ViniAsco a écrit : 29 sept. 2023 12:35 Mes connaissances en SQL sont trop limitées pour la manipulation de bases.
voici un exemple de code Basic ( ce n'est pas le bon forum ici mais le code peut servir et contient du SQL ) qui met à jour un enregistrement d'une base de données à partir d'une feuille Calc. Sur cette feuille il y a une plage nommée Data . La première ligne de cette plage est constituée des noms des champs de la base, les lignes suivantes représentent les valeurs. La première colonne (0) est la clé primaire de la base.

Code : Tout sélectionner

Sub UpdateDatabase()
    Dim Context As Object, Db As Object, oHandler As Object, Conn As Object, Stmt As Object
    Dim DbName As String,  TableName As String, oResult As Object, StrSQL As String
    Context = CreateUnoService("com.sun.star.sdb.DatabaseContext")
    DbName = "GestionDéfunts"
    TableName = "TableDéfunts"
    Db = Context.getByName(DbName)
    oHandler = createUnoService("com.sun.star.sdb.InteractionHandler")
    Conn = Db.ConnectWithCompletion(oHandler)
    'Conn = Db.getConnection("","") 'username & password pair - HSQL default blank
    Stmt = Conn.createStatement()       
     strSQL =  CreateUpdateQuery(TableName)
    Stmt.execute(strSQL)
    Conn.getParent().flush
    Conn.close()
End Sub

Function CreateUpdateQuery(TableName) As String
    Dim maFeuille As Object, Query As String
    Dim Champs, Data, col, row, cols, rows, cols2update
    cols2Update = Array(3,4,5,6) ' colonnes à mettre à jour
    maFeuille = ThisComponent.getCurrentController.getActiveSheet
    Champs =  maFeuille.getCellRangebyName("Data").getDataArray()
    cols = champs(0) ' 1ère ligne avec le nom des champs
    rows = champs(1) 'xème ligne avec les valeurs
    Query =  "UPDATE """ + TableName + """ SET "
    For each col in cols2Update
       if isnumeric(rows(col) ) then
             Query = Query +  """" + cols(col) + """ = "  + rows(col) + " , "
       else 
             Query = Query +  """" + cols(col) + """ = '"  + rows(col) + "' , "
       end if
    Next col
    Query = Left(Query,Len(Query) - 2)
    Query =  Query + " WHERE """ + cols(0) + """ = " + rows(0)
    CreateUpdateQuery = Query
End Function

Ami calmant, J.P
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
ViniAsco
Membre OOrganisé
Membre OOrganisé
Messages : 56
Inscription : 11 mai 2022 15:55

Re: [résolu] Mettre à jour des données à partir d'Excel

Message par ViniAsco »

Merci Jurassik Pork.
Je ne saurais même pas où copier/coller ce code :roll:. Je vais fouiner dans l'aide.
Bonne journée
LibreOffice 7.4.7.2 sous macOS 12
Avatar de l’utilisateur
Oukcha
RespOOnsable modération
RespOOnsable modération
Messages : 3954
Inscription : 06 oct. 2008 08:03

Re: [Résolu] Mettre à jour des données à partir d'Excel

Message par Oukcha »

Bonjour,

Comme le rappelle Jurassic Pork, cette section n'est pas consacrée aux macros (voir le bandeau rouge en haut de la page). Si vous avez à poursuivre dans cette voie, merci de poster dans la section Macros et API. Ceci dans un but de recherche efficace de l'information dans ce forum.

Cordialement
                                        
Pour tout savoir sur le fonctionnement de ce forum :arrow: À lire avant tout ! Image