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

Python Excel : Raffraichissement des feuilles

7 réponses
Avatar
ReM
Bonjour,

J'utilise un fichier excel composé de 2 feuilles.
La premiere est un calculateur et la deuxieme sert à afficher les
reponses en fonction de cellule en colonne :

A B
1 50 ( issu du calculateur qui prend 1 en parametre )
2 100 ( issu du calculateur qui prend 2 en parametre )
etc....

J'arrive a récupérer les valeurs de la 2ème feuille, les mettre une a
une dans le calculateur, mais celui ci ne s'active pas.
J'obtiens toujours le resultat par défaut dans la colonne B

Quelqu'un connait il comme relancer le calcul dans ma 1ere feuille une
fois la valeur de A positionnée ?

Je comte surement migrer vers OO, peut etre est ce plus simple, avez
vous des conseils ou des utiles la dessus ( j'avoue ne pas encore avoir
chercher.... )

Merci

ReM

7 réponses

Avatar
Amaury Forgeot d'Arc
Bonjour,

J'utilise un fichier excel composé de 2 feuilles.
La premiere est un calculateur et la deuxieme sert à afficher les
reponses en fonction de cellule en colonne :

A B
1 50 ( issu du calculateur qui prend 1 en parametre )
2 100 ( issu du calculateur qui prend 2 en parametre )
etc....

J'arrive a récupérer les valeurs de la 2ème feuille, les mettre une a
une dans le calculateur, mais celui ci ne s'active pas.
J'obtiens toujours le resultat par défaut dans la colonne B

Quelqu'un connait il comme relancer le calcul dans ma 1ere feuille une
fois la valeur de A positionnée ?


As-tu essayé la commande Calculate ?
C'est un peu comme quand on appuie sur la touche F9 dans Excel.

Quelque chose comme:
excel.ActiveSheet.Range("A:C").Calculate()

Remarque: j'ai piqué l'idée sur un site qui parle de Visual Basic.
Ce sont vraiment les mêmes commandes, et la plupart des gens font encore
leurs macros Excel en basic...

--
Amaury

Avatar
MCI, Shadok Gouroudoudou
Bonjour !

Comme l'a dit Amaury, "Calculate()" est une fonction publique
OLE-automation d'Excel. Elle est également utilisée par le VBA (Basic)
interne d'Excel.
Le makepy a d'ailleurs déjà dû te donner cette info.

Par contre, tu ne précises pas quel mode de calcul tu utilises dans tes
feuilles. S'il s'agit du mode "automatique", le problème est autre.

Il est également possible de modifier ce paramètre avec Python :
exobj.application.calculation = -4135 (mode "calcul sur ordre")
exobj.application.calculation = -4105 (mode "calcul automatique")


Concernant OOo, le gros avantage de ce logiciel, c'est qu'il est
gratuit.
Mais, son pilotage via COM (Ole-automation), par Python, est plus
compliqué qu'Excel, moins puissant, et limité par un bug d'OOo, qui
plante le passage de paramètres tableaux/collection de/vers Python.

Néanmoins, on arrive à faire des choses.

Une alternative serait d'utiliser le Python (Python 2.3)) interne à
OOo. Mais, c'est plutôt lourd et contraignant (impossible d'installer
des modules comme PyWin dedans ; difficulté à l'utiliser "de
l'extérieur").


Tant qu'on y ait sur les trucs libres, je regrette que Gnumeric n'ait
ni macros, ni ouverture programmable, car c'est, par ailleurs un
excellent tableur (même s'il est plus lent et plus gourmand que ce
qu'en disent ses fans).






--
@-salutations

Michel Claveau
Avatar
jean-michel bain-cornu
Bonjour,
Tant qu'on y ait sur les trucs libres, je regrette que Gnumeric n'ait ni
macros, ni ouverture programmable, car c'est, par ailleurs un excellent
tableur (même s'il est plus lent et plus gourmand que ce qu'en disent
ses fans).


Il y a pourtant ceci (Python Programming in Gnumeric) :
http://www.csse.monash.edu.au/~ctwardy/starting-with-python.html
As-tu déjà jeté un oeil ? Mais sans doute cela n'est-il pas possible
sous windows.

Avatar
ReM
Bonjour,

J'utilise un fichier excel composé de 2 feuilles.
La premiere est un calculateur et la deuxieme sert à afficher les
reponses en fonction de cellule en colonne :

A B
1 50 ( issu du calculateur qui prend 1 en parametre )
2 100 ( issu du calculateur qui prend 2 en parametre )
etc....

J'arrive a récupérer les valeurs de la 2ème feuille, les mettre une a
une dans le calculateur, mais celui ci ne s'active pas.
J'obtiens toujours le resultat par défaut dans la colonne B

Quelqu'un connait il comme relancer le calcul dans ma 1ere feuille une
fois la valeur de A positionnée ?


As-tu essayé la commande Calculate ?
C'est un peu comme quand on appuie sur la touche F9 dans Excel.

Quelque chose comme:
excel.ActiveSheet.Range("A:C").Calculate()


Merci, je vais essayer cette solution


Remarque: j'ai piqué l'idée sur un site qui parle de Visual Basic.
Ce sont vraiment les mêmes commandes, et la plupart des gens font encore
leurs macros Excel en basic...




Avatar
ReM
Bonsoir

Je reviens tardivement sur mon problème que j'avais mis de coté un temps.
Après plusieurs essais avec la solution du Range().Calculate()
ou du application.calculation = -4105, je n'ai toujours pas de
raffraichissement de ma première feuille pour écrire le résultat dans la
deuxième.
Je joins mon code si qqun a une idée, je gagnerais beaucoup de temps
dans le remplissage des feuilles.

Merci

ReM

import win32com.client
excel = win32com.client.Dispatch('Excel.Application')
#excel.application.calculation = -4105

classeur = excel.Workbooks.Open("E:optiremusalcadre.xls")
fiche_paye = classeur.Sheets("FICHE DE PAYE")
fiche_auto = classeur.Sheets("Feuille automisée")

i = 11
max = 297

#Pour chaque ligne la fiche auto
while i < max:
#On récupère le salaire
paye = fiche_auto.Cells(i, 2).Value
print "Paye : ", paye

#On l'insère dans la fiche de calcul
fiche_paye.Cells(7, 5).Value = paye

#Controle de l'insertion
paye = fiche_paye.Cells(7, 5)
print "Paye : ", paye
#Jusque la OK


#ICI LA FICHE_PAYE DEVRAIT SE RECALCULER

#Affichage des données modifiées
cs = fiche_paye.Cells(39, 8)
print "CS : ", cs
cp = fiche_paye.Cells(39, 6)
print "CP : ", cp
tc = fiche_paye.Cells(39, 10)
print "TC : ", tc
prod = fiche_paye.Cells(57, 4)
print "PROD : ", prod
non_prod = fiche_paye.Cells(57, 6)
print "NON PROD : ", non_prod

i += 1

classeur.Close()
excel.Quit()


Bonjour !

Comme l'a dit Amaury, "Calculate()" est une fonction publique
OLE-automation d'Excel. Elle est également utilisée par le VBA (Basic)
interne d'Excel.
Le makepy a d'ailleurs déjà dû te donner cette info.

Par contre, tu ne précises pas quel mode de calcul tu utilises dans tes
feuilles. S'il s'agit du mode "automatique", le problème est autre.

Il est également possible de modifier ce paramètre avec Python :
exobj.application.calculation = -4135 (mode "calcul sur ordre")
exobj.application.calculation = -4105 (mode "calcul automatique")


Concernant OOo, le gros avantage de ce logiciel, c'est qu'il est gratuit.
Mais, son pilotage via COM (Ole-automation), par Python, est plus
compliqué qu'Excel, moins puissant, et limité par un bug d'OOo, qui
plante le passage de paramètres tableaux/collection de/vers Python.

Néanmoins, on arrive à faire des choses.

Une alternative serait d'utiliser le Python (Python 2.3)) interne à OOo.
Mais, c'est plutôt lourd et contraignant (impossible d'installer des
modules comme PyWin dedans ; difficulté à l'utiliser "de l'extérieur").


Tant qu'on y ait sur les trucs libres, je regrette que Gnumeric n'ait ni
macros, ni ouverture programmable, car c'est, par ailleurs un excellent
tableur (même s'il est plus lent et plus gourmand que ce qu'en disent
ses fans).








Avatar
ReM
Personne ne semble avoir de solution.
OpenOffice sera-t-il plus performant ?
Un dernière p'tit conseil, svp !!!

ReM

Bonsoir

Je reviens tardivement sur mon problème que j'avais mis de coté un temps.
Après plusieurs essais avec la solution du Range().Calculate()
ou du application.calculation = -4105, je n'ai toujours pas de
raffraichissement de ma première feuille pour écrire le résultat dans la
deuxième.
Je joins mon code si qqun a une idée, je gagnerais beaucoup de temps
dans le remplissage des feuilles.

Merci

ReM

import win32com.client
excel = win32com.client.Dispatch('Excel.Application')
#excel.application.calculation = -4105

classeur = excel.Workbooks.Open("E:optiremusalcadre.xls")
fiche_paye = classeur.Sheets("FICHE DE PAYE")
fiche_auto = classeur.Sheets("Feuille automisée")

i = 11
max = 297

#Pour chaque ligne la fiche auto
while i < max:
#On récupère le salaire
paye = fiche_auto.Cells(i, 2).Value
print "Paye : ", paye

#On l'insère dans la fiche de calcul
fiche_paye.Cells(7, 5).Value = paye

#Controle de l'insertion
paye = fiche_paye.Cells(7, 5)
print "Paye : ", paye
#Jusque la OK


#ICI LA FICHE_PAYE DEVRAIT SE RECALCULER

#Affichage des données modifiées
cs = fiche_paye.Cells(39, 8)
print "CS : ", cs
cp = fiche_paye.Cells(39, 6)
print "CP : ", cp
tc = fiche_paye.Cells(39, 10)
print "TC : ", tc
prod = fiche_paye.Cells(57, 4)
print "PROD : ", prod
non_prod = fiche_paye.Cells(57, 6)
print "NON PROD : ", non_prod

i += 1

classeur.Close()
excel.Quit()


Bonjour !

Comme l'a dit Amaury, "Calculate()" est une fonction publique
OLE-automation d'Excel. Elle est également utilisée par le VBA (Basic)
interne d'Excel.
Le makepy a d'ailleurs déjà dû te donner cette info.

Par contre, tu ne précises pas quel mode de calcul tu utilises dans
tes feuilles. S'il s'agit du mode "automatique", le problème est autre.

Il est également possible de modifier ce paramètre avec Python :
exobj.application.calculation = -4135 (mode "calcul sur ordre")
exobj.application.calculation = -4105 (mode "calcul automatique")


Concernant OOo, le gros avantage de ce logiciel, c'est qu'il est gratuit.
Mais, son pilotage via COM (Ole-automation), par Python, est plus
compliqué qu'Excel, moins puissant, et limité par un bug d'OOo, qui
plante le passage de paramètres tableaux/collection de/vers Python.

Néanmoins, on arrive à faire des choses.

Une alternative serait d'utiliser le Python (Python 2.3)) interne à
OOo. Mais, c'est plutôt lourd et contraignant (impossible d'installer
des modules comme PyWin dedans ; difficulté à l'utiliser "de
l'extérieur").


Tant qu'on y ait sur les trucs libres, je regrette que Gnumeric n'ait
ni macros, ni ouverture programmable, car c'est, par ailleurs un
excellent tableur (même s'il est plus lent et plus gourmand que ce
qu'en disent ses fans).










Avatar
Laurent Pointal
ReM wrote:

Personne ne semble avoir de solution.
OpenOffice sera-t-il plus performant ?
Un dernière p'tit conseil, svp !!!


Ben, si ça ne répond pas dans la commnauté francophone, aller poser la
question à la (plus large) communauté anglophone sur comp.lang.python (en
traduisant la question en patois bien entendu).

A+

Laurent.