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 :

Excel, insérer coordonnées dans une formule.


Sujet :

C++Builder

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 139
    Par défaut Excel, insérer coordonnées dans une formule.
    Bonjour,

    Après un petit problème de format de données, je tombe maintenant sur un problème de création de formules .

    Ayant pas mal de données à gérer dans le classeur Excel que je dois créer, j'essaie de passer par des plages de cellules, correspondant aux différentes parties clés de la feuille. Ainsi pour un tableau de valeurs, je devrais au final me retrouver avec un plage de données pour les valeurs, et une plage de données pour les totaux.

    Le but est donc d'arriver à lier ces deux plages pour que les totaux affichent bien les valeurs de la partie donnée.

    Pour commencer simple, j'essaie pour le moment de faire pointer une cellule de la plage des totaux, vers une cellule de la plage des valeurs, et d'y ajouter 1. Ce qui revient à la formule suivante : "=LxCy+1" (x et y dépendant bien sûr de la cellule visée)

    J'ai donc tenté le code suivant, qui devrait récupérer l'adresse absolue d'une cellule contenue dans un plage vRange2, implanter cette adresse dans une formule vFormula, puis finalement appliquer cette formule à une cellule contenue dans la plage vRange1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Variant vFormula, vRange2, vAddress;
     
    vAddress = vRange2.OlePropertyGest("Cells", 1, 5).OlePropertyGet("Address");
    vFormula = "="+vAddress+"+1";
     
    vRange1.OlePropertyGet("Cells", 1, 5).OlePropertySet("Formula", vFormula);
    Ce qui me renvoi une jolie exception EOleSysError avec le message 'Type de variable incorrect'.

    Si quelqu'un sait d'où vient l'erreur, et (si possible) comment résoudre le problème, qu'il avance d'un pas

    PS : D'ailleurs, vu qu'au final il faudra cibler une colonne/rangée entière de la plage, s'il y'a moyen de garder l'adresse relative à la plage afin que la formule s'adapte facilement aux ajouts de valeurs (insertion de lignes par exemple), je suis aussi preneur

  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
    Par défaut
    Salut Ldoppea
    Ton erreur est normale tu ecrit quelque chose comme ceci " =E$1$+1 " qui n'est pas une formule
    Que veut tu passer dans ta cellule, je ne comprend pas ce que tu veut faire

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 139
    Par défaut
    En temps normal, dans excel, pour cibler une cellule dans une formule qui reprend le contenu + 1, on écrit L1C1+1 si on cible une cellule en absolue (la cellule ciblé sera celle en haut à gauche), ou L(1)C(1)+1, voir LC(1)+1 si on cible une cellule en relatif (la cellule ciblé sera celle juste à droite). J'ai oublié de préciser que je suis passé au forma L1C1 et non A1 pour pouvoir me déplacer plus facilement à coup d'incréments.

    Donc par exemple, si la cellule L3C4 contient la valeur 7, et que la cellule L1C1 contient la formule "=L3C4+1", alors L1C1 affichera là valeur 8.

    Mais au moment d'écrire le programme, je ne sais pas quelle sera exactement la cellule ciblée. Je pourrais juste dire, c'est la cellule de la 3ème ligne et 4ème colonne de telle plage. Ce qu'il me faut donc, c'est de récupérer l'adresse d'une cellule à partir de sa position dans la plage ( vRange2.OlePropertyGest("Cells", 1, 5).OlePropertyGet("Address"); ) puis d'utiliser cette adresse dans la formule de la cellule qui affiche son contenu+1.

    Sachant qu'au final il faudra faire la même chose, mais en disant par exemple : je veux afficher la somme de la 3ème colonne de telle plage

  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
    Par défaut
    Si tu veut utiliset ce type de formule elle doit s'ecrire " =D3+1" pour ton exemple
    Est ce que tu veut avoir le resultat d'un calcul, soit d'une ligne, soit d'une colonne

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 139
    Par défaut
    Dans le cas du mode d'affichage L1C1, cela marche aussi en utilisant la notation "=L3C4+1", j'ai testé directement dans Excel. D'ailleurs, si je fait le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    vFormula = "=L3C4+1";
     
    vRange1.OlePropertyGet("Cells", 1, 5).OlePropertySet("Formula", vFormula);
    Cela marche aussi

    Si je veux faire une somme d'une plage de cellules, il faut écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vFormula = "=SOMME(L3C4:L6C4)";
    Mais comme je l'ai dis, je ne sais pas à l'avance quelles sont les cellules qu'il faut cibler, donc je ne peux pas y écrire directement comme çà. Il faut d'abord que je récupère l'adresse de la cellule/plage de cellules, puis que je l'insères dans la string de la formule.

    Soit vFormula = "=vCell+1"; ou vFormula = "=SOMME(vPlage)"; avec vCell remplacé par la valeur que je récupère.

  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
    Par défaut
    Voici comment transformer les coordonnees $A$1 en $A1 R1C1...
    en Excel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Sub essai()
    'Set mc = Worksheets("Feuil1").Cells(1, 1).Address([RowAbsolute:=False, ColumnAbsolute:=False])
    Set mc = Worksheets("Feuil1").Cells(1, 1)
    MsgBox mc.Address()                              ' $A$1
    MsgBox mc.Address(RowAbsolute:=False) ' $A1
    MsgBox mc.Address(RowAbsolute:=False, ColumnAbsolute:=False) 'A1
    MsgBox mc.Address(ReferenceStyle:=xlR1C1)        ' R1C1
    MsgBox mc.Address(ReferenceStyle:=xlR1C1, _
        RowAbsolute:=False, _
        ColumnAbsolute:=False, _
        RelativeTo:=Worksheets(1).Cells(3, 3))        ' R[-2]C[-2]
    End Sub
    en BCB
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Variant a = vWorksheet.OlePropertyGet("Cells", 1, 5);
    Variant variable_formula;
    variable_formula = a.OlePropertyGet("Address", false, false);
    variable_formula = StringToOleStr("="+variable_formula+"+1");
    vWorksheet.OlePropertyGet("Cells", 1, 1).OlePropertySet("Formula", variable_formula);
    Je n'ai plus le temps si tu a un probleme je verais ce soir bon courage

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 139
    Par défaut
    Ça marche! Merci de ton aide

    Bon, bah plus qu'à continuer mes tests jusqu'au prochain mur

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

Discussions similaires

  1. Insérer une feuille Excel avec macro dans une page HTML
    Par Pakkaï dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 08/12/2006, 17h40
  2. [Excel] choisir une cellule dans une formule
    Par arcane dans le forum Excel
    Réponses: 1
    Dernier message: 24/03/2006, 18h05
  3. [Excel]Passage de paramètres dans une formule
    Par fbench dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/02/2006, 12h16
  4. [VBA]Passer une variable dans une formule Excel
    Par David1974 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/01/2006, 16h52
  5. concaténation en vba dans une formule de cellule Excel
    Par kernel57 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 04/12/2005, 22h58

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