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

Langage Delphi Discussion :

Delphi 2010 / OLE Excel Remplacer du texte


Sujet :

Langage Delphi

  1. #1
    Membre régulier

    Profil pro
    Inscrit en
    Août 2003
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 207
    Points : 91
    Points
    91
    Par défaut Delphi 2010 / OLE Excel Remplacer du texte
    Bonjour à tous,

    J'ai une application Delphi 2010 qui envoie des données dans un fichier Excel.
    Jusque la pas de problème. Pour envoyer les données, j'utilise les fonctions de pilotage d'Excel par Ole.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Procedure Tform1.XLS_Cellule(vXLRange, valeur: String);
    Begin
    If NOT VarIsNull(vXLRange) and (vXLRange <> '')
    then Begin
         vXLCell := vXLWorksheet.Range[vXLRange];
         vXLCell.Value := valeur;
     
         end;

    Si j'insère un sous total (SUM) en utilisant la fonction ci-dessus, ça marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XLS_Cellule( 'D10', '=SUM(D1:D9)' );

    Par contre si je veux insérer un sous-total avec des critères et en utilisant le même code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    XLS_Cellule( 'D10', '=SUMIF(A1:A9;A10;D1:D9)' );
    ça ne marche pas, j'obtient une erreur OLE automation.

    Si je remplace =SUMIF par SUMIF
    XLS_Cellule( 'D10', 'SUMIF(A1:A9;A10;D19)' );

    Dans le fichier Excel, la cellule D10 contient SUMIF(A1:A9;A10;D19)

    Si, dans Excel, j'ajoute manuellement le = devant le SUMIF, ça marche et ça calcule bien mes sous-totaux.

    Quelqu'un a t il une idée sur le pouquoi je ne peux pas envoyer directement dans Excel '=SUMIF(A1:A9;A10;D19)' sans avoir une erreur Ole automation ?


    S'il n'y a pas de solution directe, est il possible de lancer depuis Delphi, une commande qui remplace tous les SUMIF( par =SUMIF( ?

    J'ai essayé de lancer la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vMSExcel.Replace('SUMIF(' , 'SUMIF', '=SUMIF');
    mais j'ai un message d'erreur me disant qu'il manque des paramètres. Je me suis appuyé sur le lien suivant :

    http://www.techonthenet.com/excel/fo...eplace_vba.php

    In Microsoft Excel, the REPLACE function replaces a sequence of characters in a string with another set of characters. Please note that the worksheet version of the REPLACE function has different syntax.

    Syntax

    The syntax for the REPLACE function is:

    Replace ( string1, find, replacement, [start, [count, [compare]]] )
    string1 is the string to replace a sequence of characters with another set of characters.

    find is the string that will be searched for in string1.

    replacement will replace find in string1.
    Merci d'avance,
    Wilco

  2. #2
    Membre régulier

    Profil pro
    Inscrit en
    Août 2003
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 207
    Points : 91
    Points
    91
    Par défaut
    Bonjour à tous,

    Pour simplifier ma demande, est ce que quelqu'un peut m'expliquer comment je peux remplacer un texte par un autre dans tout une feuille Excel à partir d'un application Delphi 2010 ?


    Merci d'avance pour vos réponses,
    Wilco

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Je n'ai jamais fait de manip Excel mais OpenOffice cependant quelque chose me titille : il s'agit d'une Formule et non d'une Valeur c'est peut être là que se situe le problème ?
    je suis donc allé regarder sur la FAQ et j'en déduis que cela devrait plutôt ressembler à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
         vXLCell.Formula := '=SUMIF(A1:A9;A10;D1:D9)';
    je coderais la procédure avec un paramètre supplémentaire , pour avoir un type et comme je crois qu'il y a d'autre types que
    (0 = valeur, 1 formula ....)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Procedure Tform1.XLS_Cellule(vXLRange, valeur: String, typexls : word=0);
    Begin
    If NOT VarIsNull(vXLRange) and (vXLRange <> '')
    then Begin
         vXLCell := vXLWorksheet.Range[vXLRange];
         case typexls of
            1 :  vXLCell.Formula := valeur;
            ....
            else   vXLCell.Value := valeur;  // au pire c'est un texte ....        
         end;
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  4. #4
    Membre régulier

    Profil pro
    Inscrit en
    Août 2003
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 207
    Points : 91
    Points
    91
    Par défaut
    Merci Sergio pour ta réponse.

    J'ai essayé en utilisant vXLCell.Formula mais j'ai toujours l'erreur Ole Automation. C'est bizarre car ça marche avec une simple formule SUM(D19).

    Si j'enlève le = et j'envoie 'SUMIF(A1:A9;A10;D19)'; je retrouve bien ce texte dans la feuille Excel. Et si je mets manuellement le =, le calcul se fait bien.

    On dirait que le Ole autmation n'arrive pas à calculer les formules SUMIF.

    Voici la portion de code que j'utilise.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    sumIF1 := '=SUMIF(A1:A9;A10;D1:D9)';
    vXLCell := vXLWorksheet.Range['N' + IntToStr(vXLRow)];
    vXLCell.Formula := sumIF1;

    Wilco

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    re,

    étant nul en tableur , je ne saurais dire si ta formule est correcte , c'est peut être là que ça pêche . Maintenant comme déjà dit Ole,Excel n'est pas ma tasse de thé
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  6. #6
    Membre régulier

    Profil pro
    Inscrit en
    Août 2003
    Messages
    207
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 207
    Points : 91
    Points
    91
    Par défaut
    Merci Sergio d'avoir essayé de m'aider.

    Finalement j'ai trouvé comment remplacer du texte dans une feuille Excel en utilisant le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    vXLWorksheet.UsedRange.Replace('SUMIF', '=SUMIF');

    Pour résoudre mon problème, j'envoie donc les formules sans le = et à la fin de l'export, je fais un replace de tous les SUMIF par = SUMIF.

    Cela montre bien que OLE n'arrive pas à calculer les formules =SUMIF durant le traitement d'exportation mais il arrive bien à le faire lorsque le document est complet.

    Wilco

  7. #7
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 857
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 857
    Points : 11 291
    Points
    11 291
    Billets dans le blog
    6
    Par défaut
    Ici, c'était un problème de ponctuation : http://www.developpez.net/forums/d12...ighlight=sumif
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

Discussions similaires

  1. Delphi 2010 / excel Capture évènement
    Par Wilco dans le forum Langage
    Réponses: 0
    Dernier message: 09/12/2013, 19h55
  2. Réponses: 3
    Dernier message: 10/01/2012, 10h04
  3. [Toutes versions] Code vba macro excel 2010 import de plusieurs fichiers texte
    Par Eagle-I dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/12/2011, 12h25
  4. Delphi/Ole/Excel/Tableau croisé dynamique
    Par Dunsany dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 26/06/2009, 13h25
  5. Remplacer un texte dans une cellule Excel à partir d'un point donné
    Par tonyC dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 28/04/2006, 19h05

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