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

C++ Discussion :

Exportation/Importation de donnés entre Excel et c++


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 17
    Par défaut Exportation/Importation de donnés entre Excel et c++
    Bonjour a tous,

    Voici mon PB :

    J'ai une macro VBA sous Excel (2007) qui met environ une bonne heure à s'exécuter (Je l'ai pourtant optimisé) car elle effectue des calculs sur plusieurs Variant d'environ 200000 ligne.

    Donc je me suis dit qu'il serait judicieux d'effectuer les calculs via c++ puis de retourner les résultat dans ma feuille excel.

    Exemple simplifié du Projet que je souhaite effectuer :

    Disons que j'ai 3 Variant : Plage1 , Plage2 et Résultat
    (Les donnés sont tous des Double)

    1) - La définition des Variant est faite au préalable sous VBA puis je bascule en c++ pour les calculs.
    2) - c++ effectue les calculs et me renvoi les résultats dans un variant nommée Résultat.
    Pour i=1 à 200000 alors
    si Plage1(i) > Plage2(i) alors Résultat(i) = X sinon Résultat(i) = Y

    3) - Je repasse sous VBA qui récupère le Variant Résultat et le colle dans une feuille Excel.

    Vous l'aurez compris, mon problème est :
    - l'ouverture depuis VBA de quelque chose en code c++
    - l'envoi des donnée depuis VBA vers le code c++
    - la récupération de donnée depuis le code c++ via VBA

    J'ai quelque notion en c++ (je travaille sous Visual c++ 2010 Express) et je sollicite votre aide car je ne sais vraiment pas comment faire.

    Merci beaucoup

  2. #2
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    Citation Envoyé par choux22 Voir le message
    Bonjour a tous,

    Voici mon PB :

    J'ai une macro VBA sous Excel (2007) qui met environ une bonne heure à s'exécuter (Je l'ai pourtant optimisé) car elle effectue des calculs sur plusieurs Variant d'environ 200000 ligne.

    Donc je me suis dit qu'il serait judicieux d'effectuer les calculs via c++ puis de retourner les résultat dans ma feuille excel.

    Exemple simplifié du Projet que je souhaite effectuer :

    Disons que j'ai 3 Variant : Plage1 , Plage2 et Résultat
    (Les donnés sont tous des Double)

    1) - La définition des Variant est faite au préalable sous VBA puis je bascule en c++ pour les calculs.
    2) - c++ effectue les calculs et me renvoi les résultats dans un variant nommée Résultat.
    Pour i=1 à 200000 alors
    si Plage1(i) > Plage2(i) alors Résultat(i) = X sinon Résultat(i) = Y

    3) - Je repasse sous VBA qui récupère le Variant Résultat et le colle dans une feuille Excel.

    Vous l'aurez compris, mon problème est :
    - l'ouverture depuis VBA de quelque chose en code c++
    - l'envoi des donnée depuis VBA vers le code c++
    - la récupération de donnée depuis le code c++ via VBA

    J'ai quelque notion en c++ (je travaille sous Visual c++ 2010 Express) et je sollicite votre aide car je ne sais vraiment pas comment faire.

    Merci beaucoup
    Il faut d'abord exporter le fichier Excel dans un format CSV (comma separated values). Ensuite, lire ce fichier.

    Pour chaque ligne lue, on récupère Plage1(i) et Page2(i), on lance le calcul, et on écrit le résultat dans un autre fichier texte (1 résultat par ligne).

    Code : 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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    double operation(double p1, double p2)
    {
      if (p1 > p2)
      {
        return ...; // TON OPERATION
      }
      else
      {
        return ...; // TON OPERATION
      }
    }
     
    void break_line(const std::string& line, double& p1, double& p2)
    {
      char dummy;
      std::stringstream s(line);
     
      // normallement, chaque ligne est de la forme : 
      // 1.123456789;1.23597456
     
      s >> p1;
      s >> dummy;
      s >> p2; 
    }
     
    void process(const std::string infile)
    {
      std::ifstream in(infile);
      std::ofstream out("result.csv");
     
      if (!in || !out) throw std::exception("cannot open files");
     
      while (in)
      {
        std::string line;
     
        std::getline(in, line);
     
        double p1 = 0, p2 = 0;
        break_numbers(line, p1, p2);
     
        double result = operation(p1, p2);
     
        out << std::fixed << result << std::endl;
      }
    }
    Ou quelque chose de très approchant. En cas d'erreur à un quelconque moment, une exception sera générée.

    Il ne reste plus qu'à ouvrir le fichier texte résultat (result.csv) dans Excel, et faire le copier coller qui s'impose.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 17
    Par défaut
    Merci Deloget,

    Mes plages sont dans un même fichier Excel et sur différente feuille parmi tout un tas d'autre donnés.
    - En fait si j'ai bien compris tu me conseil, en VBA, de copier ces plage dans des fichier .csv séparé.
    - Puis dans mon code c++ d'ouvrir ces 2 fichier .csv et de récupérer les données dans des Variant P1 et P2.
    - Ensuite j’effectue les calculs dont le résultat sera copié dans un autre fichier .csv
    - Et pour terminé je repart en VBA pour ouvrir Résultat.csv pour copier les donnés dans mon fichier Excel.

    Ce qui m’amène à te poser 3 questions :
    - Comment faire en VBA pour appeler le fichier contenant le code c++
    - Dans ton code ou place tu le "main"
    - Je ne vois pas, dans ton code, à quel moment tu ouvre les fichier .csv contenant P1 et P2

    Merci

  4. #4
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Par défaut
    Citation Envoyé par choux22 Voir le message
    Merci Deloget,
    Hey, 22, mon prénom c'est Emmanuel

    Citation Envoyé par choux22 Voir le message
    Mes plages sont dans un même fichier Excel et sur différente feuille parmi tout un tas d'autre donnés.
    - En fait si j'ai bien compris tu me conseil, en VBA, de copier ces plage dans des fichier .csv séparé.
    - Puis dans mon code c++ d'ouvrir ces 2 fichier .csv et de récupérer les données dans des Variant P1 et P2.
    - Ensuite j’effectue les calculs dont le résultat sera copié dans un autre fichier .csv
    - Et pour terminé je repart en VBA pour ouvrir Résultat.csv pour copier les donnés dans mon fichier Excel.
    La façon dont tu peux générer le fichier csv dépends de l'organisation de ton fichier Excel. De même, la lecture du fichier résultat. Mais je suis sur que tu peux trouver un moyen. Dans mon code, il n'y a qu'un fichier qui contient et P1, et P2 (les valeurs sont séparées par un ";" ou une "," ; d'ou le nom du fichier : comma separated values).

    Tu as demandé de l'aide pour l'opération coté C++, je me suis borné à te donner cette aide, principalement parce que Excel+VBA, moi...

    Citation Envoyé par choux22 Voir le message
    Ce qui m’amène à te poser 3 questions :
    - Comment faire en VBA pour appeler le fichier contenant le code c++
    Aucune espère d'idée. A moins qu'il n'y ait une fonction genre System, ou quelque chose comme ça. Je n'ai jamais aimé VBA, je n'en ai pas fait sous Excel depuis 1998, et je dois dire que je ne suis pas pressé d'y retoucher un jour

    Citation Envoyé par choux22 Voir le message
    - Dans ton code ou place tu le "main"
    Je ne l'ai pas écrit. Exercice pour le lecteur (en même temps, vu les paramètres récupérés dans la fonction, le main devrait être extrêmement simple).

    Citation Envoyé par choux22 Voir le message
    - Je ne vois pas, dans ton code, à quel moment tu ouvre les fichier .csv contenant P1 et P2
    La création de l'instance de std::ifstream (input file stream).
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 17
    Par défaut
    Ok, un grand Merci Emmanuel et désolé pour ton prénom

Discussions similaires

  1. [MySQL] Exportation d'un volume important de données vers excel
    Par redoran dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 26/06/2012, 14h04
  2. Réponses: 17
    Dernier message: 05/06/2010, 21h30
  3. exportation et importation de données vers excel
    Par Skizo dans le forum Access
    Réponses: 3
    Dernier message: 20/05/2006, 09h50
  4. [3D] Export/Import des données graphics
    Par mister3957 dans le forum Développement 2D, 3D et Jeux
    Réponses: 13
    Dernier message: 03/02/2006, 16h49
  5. Importation de donnée de Excel à Access
    Par virtuose dans le forum Access
    Réponses: 3
    Dernier message: 02/02/2006, 12h32

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