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++Builder Discussion :

Problème EXCEL : Récupérer la ligne d'une cellule active


Sujet :

C++Builder

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 7
    Points : 3
    Points
    3
    Par défaut Problème EXCEL : Récupérer la ligne d'une cellule active
    Bonjour à tous,

    Voici mon problème,

    Je suis en train de créer un ptit logiciel qui répond à une requête (un bouton active la requête qui va chercher dans un tableau Excel).

    La première partie se passe bien, à savoir, la requête est lancée, la ligne correspondante (fonction FIND utilisée) est trouvée mais moi je voudrait récupérer toutes les informations contenues sur la ligne de la cellule trouvée par la requête... Et là, ça coince.

    Voici le bout de code pour expliquer :

    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
    
    vRecherche = StringToOleStr(requete->Text);             //lit la recherche dans le mémo qui va bien
    vResultat = vCells.OleFunction("Find", vRecherche);     //cherche et assigne la case résultat à vResultat
    vLigne_utile = vMSExcel.OlePropertyGet("ActiveCell").OlePropertyGet("Row");
    
    //==> C'est la que ça coince, j'aimerais récupérer la ligne complète de la cellule vResultat
    
    
    vcell = vWorksheet.OlePropertyGet("Cells",vLigne_utile, "3" );
    // ==> à cette ligne je souhaite récupérer la 3eme colonne de la ligne désirée
    
    
    
    vCode_cell = vcell.OlePropertyGet("Value");
    code_0->Text = OleStrToString(vCode_cell);
    
    //==> Ces 2 dernières lignes renvoie la valeur de la cellule de coordonnées "vLigne_utile" , "3eme colonne" 

    Voila, j'espère avoir été clair car cela fait depuis ce matin que je suis dessus donc mon esprit ne l'ai plus trop lui ....

    J'ai longuement farfouinner dans la FAQ BCB et sur le net et je n'ai rien trouvé alors merci à toute aide.

    Kok1k1du

  2. #2
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Salut Kok1k1du
    C'est pas trop clair ta demande, ce que je pense avoir compris tu a une valeur dans un TMemo et tu veut retrouver la cellule qui contient cette valeur, si cette valeur est trouvee tu veut selectionner toute la ligne contenant cette valeur, si jusque c'est bien ce que j'ai compris c'est apres que je ne vois pas
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 7
    Points : 3
    Points
    3
    Par défaut précision
    Bonjour Blondelle,

    Merci pour avoir répondu, tu as tout à fait compris mon problème.

    Après, une fois avoir récupérer la ligne je veux aller à la colonne X de la ligne que l'on a trouvé.

    Mais comment faire ? (petit renvoi au code du premier post).

    Pour être plus précis la valeur à cherché vient d'un TEdit et je souhaite stocker l'information de ligne (quelle est la ligne où se trouve la cellule qui contient ma recherche ?) dans une variable de type Variant


    Kok1k1du

  4. #4
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Après, une fois avoir récupérer la ligne je veux aller à la colonne X de la ligne que l'on a trouvé
    la colonne X c'est l'endroi ou se trouve la valeur que tu recherche avec " Find "
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Ce que je veux c est récupérer dans un variant la valeur de la ligne où se trouve la réponse de la fonction FIND. Afin aprés d utiliser cette valeur pour aller où je veux dans la ligne ainsi trouvée (dans la cellule au croisement entre ma ligne et la colonne B par exemple).

  6. #6
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Pour recuperer l'adresse de la cellule contenant la valeur recherchee
    le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    vRecherche = Memo1->Text; //lit la recherche dans le mémo qui va bien
    vRecherche = Trim(WideString(vRecherche)); // on supprime les caracteres de control et les espaces
    vCells = vWorksheet.OlePropertyGet("Range", "A1:D7").OleFunction("Find", vRecherche); // dans une plage "Range", "A1:D7", soit une colonne "Range", "C:C"
    String vResultat = vCells.OlePropertyGet("Address", false, false); // OlePropertyGet("Address", false, false, -4150);
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par blondelle Voir le message
    Pour recuperer l'adresse de la cellule contenant la valeur recherchee
    le code
    Oki mais est-ce qu'il est possible de récupérer uniquement dans une variable de type Variant la ligne et non l'adresse compléte, ou bien comment décortiquer la fonction OlepropertyGet(Address...) ?

  8. #8
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    En modifiant la derniere ligne du code et en ajoutant une on selectionne une ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    vRecherche = Memo1->Text; //lit la recherche dans le mémo qui va bien
    vRecherche = Trim(WideString(vRecherche)); // on supprime les caracteres de control et les espaces
    vCells = vWorksheet.OlePropertyGet("Range", "C:C").OleFunction("Find", vRecherche); // dans une plage "Range", "A1:D7", soit une colonne "Range", "C:C"
    Variant vResultat = vCells.OlePropertyGet("Address", false, false); // OlePropertyGet("Address", false, false, -4150);
    vWorksheet.OlePropertyGet("Range", vResultat).OlePropertyGet("EntireRow").OleFunction("Select");
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 7
    Points : 3
    Points
    3
    Par défaut
    J'ai essayé et il me sort une erreur. Je pense avoir une idée plus simple mais ne sais pas forcément comment l'exploiter :

    comment récupérer la ligne de la cellule-réponse à la fonction FIND pour la stocker dans un Variant ou encore mieux dans un char pour ensuite accéder à la cellule située a droite de la cellule-réponse (voir ptit schéma explicatif en pièce jointe).

    Il serait alors possible d'utiliser la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Variant vCell;
    vCell = vWorksheet.OlePropertyGet("Cells", vX, vY);
    afin de récupérer la valeur de la cellule située par exemple à droite de la cellule-réponse de la fonction FIND.
    Images attachées Images attachées  

  10. #10
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Le code que je t'ai passe fonctionne chez moi avec declare en Variant " vRecherche, vCells, vResultat "
    Je ne comprend pas pourquoi tu fait une recherche sur un mot pour recuperer un autre mot, fait une recherche directement sur celui que tu veut recuperer
    --
    Plutot que d'essayer de réinventer la roue, apprenons à nous en servir

  11. #11
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 7
    Points : 3
    Points
    3
    Par défaut merci et petite explication
    En effet c'est tout bon, la recherche fonctionne et je peux stocker dans le presse papier ma ligne mais n'arrive décidement pas à la coller...

    Pour comprendre pourquoi j'ai cette démarche voici le principe du logiciel :

    Un tableau contenant des articles classé est ayant chacun un code, une désignation et un prix, je veux faire une recherche sur un des champs et recopier la ligne complète vers une feuille Excel de type facturation.... tout bête mais pas tant je me rends compte.

    Merci a toi Blondelle.

    En me balladant sur Google, je me suis rendu compte que la majorité des liens sur le pilotage OLE de excel avec BCB renvoyait au forum, alors à quand une FAQ spécialisé au douloureux pilotage OLE ....?

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

Discussions similaires

  1. [XL-2003] Problème de saut de ligne dans une cellule à l'aide de vba
    Par juju05 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 27/05/2013, 11h31
  2. [VBA-E] Problème pour insérer des lignes dans une feuille Excel
    Par skystef dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/04/2007, 14h13
  3. Réponses: 9
    Dernier message: 09/03/2007, 20h44
  4. Réponses: 1
    Dernier message: 07/06/2006, 18h56
  5. Récupérer la couleur d'une cellule excel par Delphi
    Par teamsebracing dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 05/06/2003, 14h50

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