Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Classe Excel et formule

9 réponses
Avatar
Roumegou Eric
Je commence à bien obtenir ce que je veux avec la classe cExcel (merci
Albert) en rajoutant quelques petites méthodes mais je n'arrive pas à
trouver comment initialiser une cellule par une somme. (et plus
globalement par une formule)

Après avoir enregistré une macro sous excel pour la manip attendue,
j'en arrive à cette formule:

=SUM(R[-5]C:R[-1]C)
donc pas de pb pour générer cela en fn de mon nbre de ligne (-5) mais
je n'arrive pas à trouver la syntaxe OLE.
J'ai essayé cela

formulesomme="=SUM(R[-"+Numlig+"]C:R[-1]C)"
monXLS:EcrireValeur(nomfeuille+"!B"+Numlig+1,formulesomme)

mais si formulesomme est bien ce que j'attends, cette ordre plante.

Quelle est la syntaxe ?
peut être que :m_xExcel>>Range(sCellule)>>Value = sValeur
n'est pas adapté ?

--
Eric Roumégou
Webmaster des wtablettes
http://cerbermail.com/?qE7t4Qvilo
(cliquez sur le lien ci-dessus pour me contacter en privé)

9 réponses

Avatar
Pascal ROY
Roumegou Eric a écrit :
Je commence à bien obtenir ce que je veux avec la classe cExcel (merci
Albert) en rajoutant quelques petites méthodes mais je n'arrive pas à
trouver comment initialiser une cellule par une somme. (et plus
globalement par une formule)

Après avoir enregistré une macro sous excel pour la manip attendue, j'en
arrive à cette formule:

=SUM(R[-5]C:R[-1]C)
donc pas de pb pour générer cela en fn de mon nbre de ligne (-5) mais je
n'arrive pas à trouver la syntaxe OLE.
J'ai essayé cela

formulesomme="=SUM(R[-"+Numlig+"]C:R[-1]C)"
monXLS:EcrireValeur(nomfeuille+"!B"+Numlig+1,formulesomme)

mais si formulesomme est bien ce que j'attends, cette ordre plante.

Quelle est la syntaxe ?
peut être que :m_xExcel>>Range(sCellule)>>Value = sValeur
n'est pas adapté ?




Il faut utiliser
:m_xExcel>>Range(sCellule)>>Formula = sValeur


--
Pascal ROY
(Service Informatique - SODALEC)
Avatar
Pascal F
Roumegou Eric a utilisé son clavier pour écrire :
Je commence à bien obtenir ce que je veux avec la classe cExcel (merci Albert) en rajoutant quelques petites méthodes mais je
n'arrive pas à trouver comment initialiser une cellule par une somme. (et plus globalement par une formule)

Après avoir enregistré une macro sous excel pour la manip attendue, j'en arrive à cette formule:

=SUM(R[-5]C:R[-1]C)
donc pas de pb pour générer cela en fn de mon nbre de ligne (-5) mais je n'arrive pas à trouver la syntaxe OLE.
J'ai essayé cela

formulesomme="=SUM(R[-"+Numlig+"]C:R[-1]C)"
monXLS:EcrireValeur(nomfeuille+"!B"+Numlig+1,formulesomme)

mais si formulesomme est bien ce que j'attends, cette ordre plante.

Quelle est la syntaxe ?
peut être que :m_xExcel>>Range(sCellule)>>Value = sValeur
n'est pas adapté ?



Ce que j'ai dans ma classe (sans doute des modifs que j'ai faites il y a pas mal de temps mais pas sur que ce soit de moi)

PROCEDURE Excel::CellEcritFormule(xLigne,xColonne,xFormule)
// renvoie la formule de la cellule
// Range("C2").Select
// ActiveCell.FormulaR1C1 = "þuil2!R[5]C[1]"
xPlage est une chaîne
xPlageÊract(64+xColonne)+NumériqueVersChaîne(xLigne)

QUAND EXCEPTION
RENVOYER ""
FIN
:xl>>Range(xPlage)>>SELECT()

:xl>>Selection>>FormulaR1C1=xFormule

--
Pascal

Ne garder que le prénom pour me joindre
Avatar
Roumegou Eric
Pascal ROY a formulé ce mardi :
Roumegou Eric a écrit :
Je commence à bien obtenir ce que je veux avec la classe cExcel (merci
Albert) en rajoutant quelques petites méthodes mais je n'arrive pas à
trouver comment initialiser une cellule par une somme. (et plus globalement
par une formule)

Après avoir enregistré une macro sous excel pour la manip attendue, j'en
arrive à cette formule:

=SUM(R[-5]C:R[-1]C)
donc pas de pb pour générer cela en fn de mon nbre de ligne (-5) mais je
n'arrive pas à trouver la syntaxe OLE.
J'ai essayé cela

formulesomme="=SUM(R[-"+Numlig+"]C:R[-1]C)"
monXLS:EcrireValeur(nomfeuille+"!B"+Numlig+1,formulesomme)

mais si formulesomme est bien ce que j'attends, cette ordre plante.

Quelle est la syntaxe ?
peut être que :m_xExcel>>Range(sCellule)>>Value = sValeur
n'est pas adapté ?




Il faut utiliser
:m_xExcel>>Range(sCellule)>>Formula = sValeur



Merci de ta réponse mais cela plante avec ceci

formulesomme="=SUM(R[-"+Numlig+"]C:R[-1]C)"
monXLS:EcrireFormule(nomfeuille+"!B"+Numlig+1,formulesomme)

PROCEDURE EcrireFormule(sCellule, sValeur)
// écrit la formule svaleur dans la cellule sCellule

// pour éviter que Excel se mette en erreur
QUAND EXCEPTION DANS
// Ecrire une formule dans la cellule passée en paramètre
:m_xExcel>>Range(sCellule)>>Formula = sValeur
FAIRE
:MsgErreur("Impossible d'écrire la formule.",ExceptionInfo())
ExceptionActive()
RETOUR
FIN

j'ai le message que le membre Automation Formula n'existe pas
j'ai essayé sans le =, cela ne plante pas mais ça ne fait rien.

--
Eric Roumégou
Webmaster des wtablettes
http://cerbermail.com/?qE7t4Qvilo
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Pascal ROY
Pascal F a écrit :
Roumegou Eric a utilisé son clavier pour écrire :
Je commence à bien obtenir ce que je veux avec la classe cExcel (merci
Albert) en rajoutant quelques petites méthodes mais je n'arrive pas à
trouver comment initialiser une cellule par une somme. (et plus
globalement par une formule)

Après avoir enregistré une macro sous excel pour la manip attendue,
j'en arrive à cette formule:

=SUM(R[-5]C:R[-1]C)
donc pas de pb pour générer cela en fn de mon nbre de ligne (-5) mais
je n'arrive pas à trouver la syntaxe OLE.
J'ai essayé cela

formulesomme="=SUM(R[-"+Numlig+"]C:R[-1]C)"
monXLS:EcrireValeur(nomfeuille+"!B"+Numlig+1,formulesomme)

mais si formulesomme est bien ce que j'attends, cette ordre plante.

Quelle est la syntaxe ?
peut être que :m_xExcel>>Range(sCellule)>>Value = sValeur
n'est pas adapté ?



Ce que j'ai dans ma classe (sans doute des modifs que j'ai faites il y a
pas mal de temps mais pas sur que ce soit de moi)

PROCEDURE Excel::CellEcritFormule(xLigne,xColonne,xFormule)
// renvoie la formule de la cellule
// Range("C2").Select
// ActiveCell.FormulaR1C1 = "þuil2!R[5]C[1]"
xPlage est une chaîne
xPlageÊract(64+xColonne)+NumériqueVersChaîne(xLigne)

QUAND EXCEPTION
RENVOYER ""
FIN
:xl>>Range(xPlage)>>SELECT()

:xl>>Selection>>FormulaR1C1=xFormule



Je viens de faire un test, les 2 systèmes marchent chez moi.
Mais j'utilise Excel97, alors...

--
Pascal ROY
(Service Informatique - SODALEC)
Avatar
Roumegou Eric
Roumegou Eric vient de nous annoncer :
Je commence à bien obtenir ce que je veux avec la classe cExcel (merci
Albert) en rajoutant quelques petites méthodes mais je n'arrive pas à trouver
comment initialiser une cellule par une somme. (et plus globalement par une
formule)

Après avoir enregistré une macro sous excel pour la manip attendue, j'en
arrive à cette formule:

=SUM(R[-5]C:R[-1]C)
donc pas de pb pour générer cela en fn de mon nbre de ligne (-5) mais je
n'arrive pas à trouver la syntaxe OLE.
J'ai essayé cela

formulesomme="=SUM(R[-"+Numlig+"]C:R[-1]C)"
monXLS:EcrireValeur(nomfeuille+"!B"+Numlig+1,formulesomme)

mais si formulesomme est bien ce que j'attends, cette ordre plante.

Quelle est la syntaxe ?
peut être que :m_xExcel>>Range(sCellule)>>Value = sValeur
n'est pas adapté ?



Hum je craque ...
si je tente de mettre une formule "=SOMME(H2:H15), je retrouve dans
Excel, SOMME('H2':'H15') donc un #NOM. Je ne sais pas pkoi il me
rajoute des quotes alors que je ne lui en donne pas???
En plus il me fait une référence circulaire pour la colonne C car il me
fabrique uen drole de ref avec des $ pour la colonne C
pour xColonne=3 et ligne =2 ou 15 il me sort un truc bizarre avec ce
code :
xPlageÊract(64+xColonne)+NumériqueVersChaîne(xLigne)
et cela ne le fait pas pour les autres colonnes

si je tente une écriture comme "=SOMME(R[3]C[8]:R[15]C[8])" cela
n'enregistre rien.
Si j'essaie SUM marche pas ...
Bref j'en suis à mon nième essais et impossible de trouver la bonne
syntaxe.
mon dernier essai

PROCEDURE SommeColonne(xLigne,xColonne,deligne,àligne)
// Somme la colonne Xcolonne de la ligne deligne à la ligne àligne
// et met le résultat dans la cellule Xligne,xColonne.

xPlage,xPlagedeb,xPlageFin,xFormule est une chaîne
xPlageÊract(64+xColonne)+NumériqueVersChaîne(xLigne)
xPlagedeb="R["+deligne+"]C["+xColonne+"]"
xPlageFin="R["+àligne+"]C["+xColonne+"]"
xFormule="=SOMME("+xPlagedeb+":"+xPlageFin+")"
QUAND EXCEPTION
RENVOYER ""
FIN
:m_xExcel>>Range(xPlage)>>SELECT()

:m_xExcel>>Selection>>FormulaR1C1=xFormule

--
Eric Roumégou
Webmaster des wtablettes
http://cerbermail.com/?qE7t4Qvilo
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Roumegou Eric
Roumegou Eric a formulé la demande :
pfouuuhh ... c'est quand on a plus les yeux en face des trous qu'on
commence à voir clair ;-)

Voilà le truc qui marche
PROCEDURE SommeColonne(xLigne,xColonne,deligne,àligne)
// Somme la colonne Xcolonne de la ligne deligne à la ligne àligne
// et met le résultat dans la cellule Xligne,xColonne.
xPlage,xFormule est une chaîne
xPlageÊract(64+xColonne)+NumériqueVersChaîne(xLigne)
xFormule="=SOMME("+Caract(64+xColonne)+NumériqueVersChaîne(deligne)+":"+Caract(64+xColonne)+NumériqueVersChaîne(àligne)+")"
QUAND EXCEPTION
RENVOYER ""
FIN
:m_xExcel>>Range(xPlage)>>SELECT()
:m_xExcel>>Selection>>Formula=xFormule


donc c'est un Formula et non FormulaR1C1 qui transcrit ce que l'on met
dedans (???)
et faut faire un RANGE A15 et une SOMME(A13:A14)

Par contre ça cela ne marchera que sur un Excel Français
Comment le faire pour que cela marche aussi en Anglais ??

(quelle connerie ce VBA avec ces instructions traduites !!)

Je vais essayer avec un FormulaLocal

--
Eric Roumégou
Webmaster des wtablettes
http://cerbermail.com/?qE7t4Qvilo
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Roumegou Eric
Roumegou Eric avait prétendu :


Par contre ça cela ne marchera que sur un Excel Français
Comment le faire pour que cela marche aussi en Anglais ??

(quelle connerie ce VBA avec ces instructions traduites !!)

Je vais essayer avec un FormulaLocal



cela marche aussi ... mais je doute que cela resolve le pb en cas
d'excel anglais

--
Eric Roumégou
Webmaster des wtablettes
http://cerbermail.com/?qE7t4Qvilo
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Roumegou Eric
Roumegou Eric a formulé ce mardi :
Je commence à bien obtenir ce que je veux avec la classe cExcel (merci
Albert) en rajoutant quelques petites méthodes mais je n'arrive pas à trouver
comment initialiser une cellule par une somme. (et plus globalement par une
formule)

Après avoir enregistré une macro sous excel pour la manip attendue, j'en
arrive à cette formule:

=SUM(R[-5]C:R[-1]C)
donc pas de pb pour générer cela en fn de mon nbre de ligne (-5) mais je
n'arrive pas à trouver la syntaxe OLE.
J'ai essayé cela

formulesomme="=SUM(R[-"+Numlig+"]C:R[-1]C)"
monXLS:EcrireValeur(nomfeuille+"!B"+Numlig+1,formulesomme)

mais si formulesomme est bien ce que j'attends, cette ordre plante.

Quelle est la syntaxe ?
peut être que :m_xExcel>>Range(sCellule)>>Value = sValeur
n'est pas adapté ?



Dernière point et vous ferez de moi le plus heureux des informaticiens
(non j'déconne)

Je veux régler l'orientation de la feuille.
et je n'arrive pas à trouver la syntaxe. MEs recherches dans google
m'ont amené à un truc de ce style mais cela ne fonctionne pas.

PROCEDURE OrientationFeuille(sNomFeuille="",sMode="Portrait")
// Définit l'orientation de la feuille mode="Portrait" ou
mode="Paysage"
// On sélectionne la feuille désirée
SI sNomFeuille<>"" ALORS
:SelectionnerFeuille(sNomFeuille)
FIN

QUAND EXCEPTION DANS
SELON sMode
CAS "Paysage"
:m_xExcel>>ActiveSheet>>PageSetup>>Orientation = "xlLandscape"
AUTRE CAS
:m_xExcel>>ActiveSheet>>PageSetup>>Orientation = "xlPortrait"
FIN
//ActiveSheet.PageSetup.Orientation = "xlPortrait"
FAIRE
:MsgErreur("Impossible de changer l'orientation de la
feuille.",ExceptionInfo())
ExceptionActive()
RETOUR
FIN

--
Eric Roumégou
Webmaster des wtablettes
http://cerbermail.com/?qE7t4Qvilo
(cliquez sur le lien ci-dessus pour me contacter en privé)
Avatar
Roumegou Eric
excuser pour ce test
j'ai un pb de port smtp bloqué sur wanadoo
je voudrais voir si cela fait la meme chose avec les news.

--
Eric Roumégou
Webmaster des wtablettes
http://cerbermail.com/?qE7t4Qvilo
(cliquez sur le lien ci-dessus pour me contacter en privé)