IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

enregistrement des données sur excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2003
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 217
    Par défaut enregistrement des données sur excel
    Bonjour,

    J'ai un projet où je dois enregistrer des données sur une feuille excel. A chaque datatable je dois crée un worksheet. Si le worksheet existe déjà, je dois le detruire afin de créer un nouveau.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    string sql = "DROP TABLE [" + dropTable + "$]";
    myCommand.CommandText = sql;
    myCommand.ExecuteNonQuery();
    myConnection.Close();
    Le problème est quand je vais recréer le worksheet, je reçois un message comme quoi la table existe déjà. Il y a t-il un moyen pour mettre à jour des données afin de prendre en considération les modifications?
    J'utilise cette connexion pour accéder aux données excel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    OleDbConnection myConnection = new OleDbConnection(connectionString);
    myConnection.Open();
    OleDbCommand myCommand = new OleDbCommand();
    myCommand.Connection = myConnection;

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Bonsoir et bienvenue.

    L'instruction SQL "drop table" vide la feuille correspondant à la table, mais ne supprime pas cette feuille.

    Peut-être aurais-tu intérêt à travailler à classeur ouvert et à réaliser un copyfromrecordset

    Le tutoriel de SilkyRoad sur le sujet t'éclairera sûrement...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2003
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 217
    Par défaut
    Mon problème est que je dois faire le transfert en passant par sql. Je dois supprimer et recréer ma table car dans une même table on peut avoir une différence au niveau du nombre de champs. Donc est ce qu'il y a un moyen de supprimer une table via une methode sql? En général dans SQL DROP supprime la table.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Si tu recrées la table en SQL après, tu n'as pas de problème, normalement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      cn.Execute "drop table [contacts$]"
      cn.Execute "create table [contacts$] (Nom char(15), Prenom char(15), Adresse char(15))"
    Quel est le code que tu utilises pour recréer la table?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2003
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 217
    Par défaut
    j'utilise du C# pour ce projet. j'ai un code drop table. et ensuite je dois créer la table. mais pour mon code ma table est la feuille, donc si elle n'est pas supprimée physiquement elle génère une erreur " la table existe déjà"

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Donne le code sql qui est sensé créer la table

    As-tu essayé mon exemple? C'est du code sql que tu peux utiliser en C#
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Membre confirmé
    Inscrit en
    Mars 2003
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 217
    Par défaut
    ce que je vais essayer est d'ignorer l'exception générer par la création d'une table, pour pouvoir continuer dans l'insertion des données.
    merci de votre aide
    je vous tiendrai au courant

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Tu es sûr de ne pas avoir une erreur de syntaxe dans ton instruction sql de création?

    Ce code C# fonctionne chez moi.

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
                OleDbConnection myConnection = 
                    new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;" + 
                    "Data Source=d:\\données\\données.xlsx;Extended Properties=\"Excel 12.0;HDR=YES;\"");
                myConnection.Open();
                OleDbCommand myCommand = new OleDbCommand();
                myCommand.Connection = myConnection;
     
                string sql = "DROP TABLE [contacts$]";
                myCommand.CommandText = sql;
                myCommand.ExecuteNonQuery();
                sql = "create table [contacts$] (nom char(15),prenom char(15),Telephone char(15))";
                myCommand.CommandText = sql;
                myCommand.ExecuteNonQuery();
                myConnection.Close();
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #9
    Membre confirmé
    Inscrit en
    Mars 2003
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 217
    Par défaut
    avec le même principe, mon code me génère une exception "table existed already".
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    if (find)
                    {
                        string sql = "DROP TABLE [" + dropTable + "$]";
                        myCommand.CommandText = sql;
                        myCommand.ExecuteNonQuery();
                        myConnection.Close();
                    }
     
                    //Creation de la table
                    try
                    {
                        myConnection.Open();
                        createTable(dt.TableName, getColumns(dt));
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }

    avec la fonction createtable qui me crée la table dans excel.

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
       public void createTable(String tableName, List<ColumnInfo> columns)
            {
     
                List<String> tables = this.getTableNames();
                if (tables.Contains(tableName))
                {
                    throw new Exception("Table already exists");
                }
     
                String sql = "CREATE TABLE [" + tableName + "] (";
                for (int i = 0; i < columns.Count; i++)
                {
                    sql = sql + "[" + columns[i].name + "] ";
                    if (!columns[i].type.Equals(""))
                    {
                        sql = sql + columns[i].type + " NULL,";
                    }
                    else
                    {
                        sql = sql + "Double NULL,";
                    }
                }
     
                sql = sql.Remove(sql.Length - 1);
                sql = sql + ");";
     
                OleDbCommand myCommand = new OleDbCommand(sql);
                OleDbConnection myConnection = new OleDbConnection(connectionString);
                myConnection.Open();
                myCommand.Connection = myConnection;            
                int rows = myCommand.ExecuteNonQuery();
                       }


    Mais dans ton code est ce que ça ne génèrera pas d'erreur si en premier lieu, tu créais ta table,ensuite tu exécutes la requête drop table, avant de le recréer de nouveau?

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Pour moi, tu n'as pas besoin de tester si la table existe. D'ailleurs, dans le code (très peu académique, probablement) que je donne, je ne teste pas l'existence de la table avant de la (re)créer.

    En fait, la feuille existe, mais la table n'existe pas, puisque la feuille est vide suite au drop. Dès lors, la table est recréée sur la feuille.

    C'est un comportement un peu spécial, dû au fait que Excel n'est pas un gestionnaire de base de données, et le driver excel gère les choses à sa manière.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  11. #11
    Membre confirmé
    Inscrit en
    Mars 2003
    Messages
    217
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 217
    Par défaut
    Ok, ça à l'air de fonctionner, mais j'ai une autre exception qui ne vient pas de l'existence de la table.
    Merci de votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 01/10/2010, 14h17
  2. Insertion des données sur excel par sql
    Par wagui26 dans le forum Langage SQL
    Réponses: 0
    Dernier message: 15/04/2008, 10h21
  3. [Excel] Exporter des données sur Excel
    Par toffff dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 14/05/2007, 11h54
  4. trier des données sur excel via les MFC
    Par craryb dans le forum MFC
    Réponses: 1
    Dernier message: 22/03/2007, 14h51
  5. Réponses: 4
    Dernier message: 12/06/2006, 17h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo