OVH Cloud OVH Cloud

formule trop longue?

4 réponses
Avatar
Rhodan
bonjour

encore un petit souci,
quelle est la limite pour faire un calcul en VB ....

parce que la macro suivante donne une erreur :

Sub calculSomprod()

Range("D4").Select

ActiveCell.FormulaR1C1 = _

"=ISERROR(SUMPRODUCT(CtrlID*CtrlSemaines*BaseEvol)*100/SUMPRODUCT(CtrlID*Ctr
lSemaines*BaseEffectifs))=TRUE """" R2C1=1
SUMPRODUCT(CtrlID*CtrlSemaines*BaseEffectifs)?R2C1=11
SUMPRODUCT(CtrlID*CtrlSemaines*BaseEvolpH)"


End Sub

merci

4 réponses

Avatar
FxM
Bonjour,

A part la longueur (à vérifier), il y a nettement confusion dans la
formulation.
Peux-tu nous indiquer ta formule si tu l'entres dans une feuille de
calcul ou ce que tu veux faire ?

@+
FxM






bonjour

encore un petit souci,
quelle est la limite pour faire un calcul en VB ....

parce que la macro suivante donne une erreur :

Sub calculSomprod()

Range("D4").Select

ActiveCell.FormulaR1C1 = _

"=ISERROR(SUMPRODUCT(CtrlID*CtrlSemaines*BaseEvol)*100/SUMPRODUCT(CtrlID*Ctr
lSemaines*BaseEffectifs))=TRUE """" R2C1=1
SUMPRODUCT(CtrlID*CtrlSemaines*BaseEffectifs)?R2C1
SUMPRODUCT(CtrlID*CtrlSemaines*BaseEvolpH)"


End Sub

merci




Avatar
Rhodan
euh

le but de la formule est de calculer le % d'objets répondant à certaines
conditions....d'ou le sommeprod. à l'origine un TCD gérait cette histoire
mais
le nombre de TCD dans le classeur augmentaient sa taille (+15Mo) donc j'ai
transformé le TCD avec des sommeprod mais là le temps de calcul est devenu
insupportable (pls seconde à chaque clic sur le classeur) donc ...j'y viens

je compte mettre la formule dans une macro ...qui lorsque le calcul sera
demandé avec des listbox pour définir les conditions, le formule sera copié
dans la première cellule et etiré sur la plage désirée...

puis un petit copié/collage spéciale pour retirer ce sommeprod trop lent et
ne garde que des valeurs.

=SI(ESTERREUR(SOMMEPROD(CtrlID*CtrlSemaines*BaseEvol)*100/SOMMEPROD(CtrlID*C
trlSemaines*BaseEffectifs))=VRAI;"";SI($A$2=1;SOMMEPROD(CtrlID*CtrlSemaines*
BaseEffectifs);SI($A$2;SOMMEPRODCtrlID*CtrlSemaines*BaseEvolpH)/
SOMMEPROD(CtrlID*CtrlSemaines*BaseEffectifs);SOMMEPROD(CtrlID*CtrlSemaines*B
aseEvol)*100/SOMMEPROD(CtrlID*CtrlSemaines*BaseEffectifs))))


mais bon je pense avoir trouvé la solution , la formule est dans une cellule
et via une macro je la copie, étire la sélection et fait le copie/collage
spéciale valeur. c'est plus simple

"FxM" a écrit dans le message de
news:%
Bonjour,

A part la longueur (à vérifier), il y a nettement confusion dans la
formulation.
Peux-tu nous indiquer ta formule si tu l'entres dans une feuille de
calcul ou ce que tu veux faire ?

@+
FxM






bonjour

encore un petit souci,
quelle est la limite pour faire un calcul en VB ....

parce que la macro suivante donne une erreur :

Sub calculSomprod()

Range("D4").Select

ActiveCell.FormulaR1C1 = _


"=ISERROR(SUMPRODUCT(CtrlID*CtrlSemaines*BaseEvol)*100/SUMPRODUCT(CtrlID*Ctr


lSemaines*BaseEffectifs))=TRUE """" R2C1=1
SUMPRODUCT(CtrlID*CtrlSemaines*BaseEffectifs)?R2C1
SUMPRODUCT(CtrlID*CtrlSemaines*BaseEvolpH)"


End Sub

merci






Avatar
michdenis
Bonjour Rhodan,

Je te propose quelque chose ...je ne l'ai jamais essayé à proprement parler ... mais...

Dans une procédure :

Sub TransFormerUneFormuleEnVBA()

Dim A As String

' Remplace A1 par l'adresse de la cellule contenant la formule
A = Range("A1").Formula

'Dans une cellule quelconque de ta feuille
'Applique le format texte à la cellule
Range("B2").NumberFormat = "@"
'copie ta formule dans la cellule
'observe bien, toutes tes fonctions sont traduites en Anglais et les point-virgules entre les arguments ont été
remplacés par des virgules.
Range("B2") = A

Si tu sélectionnes le contenu de cette cellule et que tu retournes en VBA et que tu places cette formule entre Crochets
droits, tu devrais normalement obtenir le résultat directement dans une variable en VBA, il ne te reste plus qu'à
renseigner cette fois la bonne cellule et d'effacer le contenu de la cellule B2 et son format

Exemple simple : J'ai dans A1 ceci : =SI(C1="";D1;E1*F1)

A = Range("A1").Formula
En A(la variable) j'obtiens : =IF(C1="",D1,E1*F1)
Attribue le contenu de la variable en B2
B2 = =IF(C1="",D1,E1*F1)

Après avoir copié le contenu de B2 dans le presse-papier
je retourne en VBA et le copie entre Crochet droit,
tu vas obtenir la bonne syntaxe ...

Le résultat de la formule va être obtenu directement dans ta variable à l'exécution de ta procédure.
Résultat = [=IF(C1="",D1,E1*F1)]

Range("G1") = Résultat

Tu effaces les opérations préliminaires et tu obtiens ce que tu souhaitais !


Salutations!



"Rhodan" a écrit dans le message de news:40c33b2c$0$25503$

euh

le but de la formule est de calculer le % d'objets répondant à certaines
conditions....d'ou le sommeprod. à l'origine un TCD gérait cette histoire
mais
le nombre de TCD dans le classeur augmentaient sa taille (+15Mo) donc j'ai
transformé le TCD avec des sommeprod mais là le temps de calcul est devenu
insupportable (pls seconde à chaque clic sur le classeur) donc ...j'y viens

je compte mettre la formule dans une macro ...qui lorsque le calcul sera
demandé avec des listbox pour définir les conditions, le formule sera copié
dans la première cellule et etiré sur la plage désirée...

puis un petit copié/collage spéciale pour retirer ce sommeprod trop lent et
ne garde que des valeurs.

=SI(ESTERREUR(SOMMEPROD(CtrlID*CtrlSemaines*BaseEvol)*100/SOMMEPROD(CtrlID*C
trlSemaines*BaseEffectifs))=VRAI;"";SI($A$2=1;SOMMEPROD(CtrlID*CtrlSemaines*
BaseEffectifs);SI($A$2;SOMMEPRODCtrlID*CtrlSemaines*BaseEvolpH)/
SOMMEPROD(CtrlID*CtrlSemaines*BaseEffectifs);SOMMEPROD(CtrlID*CtrlSemaines*B
aseEvol)*100/SOMMEPROD(CtrlID*CtrlSemaines*BaseEffectifs))))


mais bon je pense avoir trouvé la solution , la formule est dans une cellule
et via une macro je la copie, étire la sélection et fait le copie/collage
spéciale valeur. c'est plus simple

"FxM" a écrit dans le message de
news:%
Bonjour,

A part la longueur (à vérifier), il y a nettement confusion dans la
formulation.
Peux-tu nous indiquer ta formule si tu l'entres dans une feuille de
calcul ou ce que tu veux faire ?

@+
FxM






bonjour

encore un petit souci,
quelle est la limite pour faire un calcul en VB ....

parce que la macro suivante donne une erreur :

Sub calculSomprod()

Range("D4").Select

ActiveCell.FormulaR1C1 = _


"=ISERROR(SUMPRODUCT(CtrlID*CtrlSemaines*BaseEvol)*100/SUMPRODUCT(CtrlID*Ctr


lSemaines*BaseEffectifs))=TRUE """" R2C1=1
SUMPRODUCT(CtrlID*CtrlSemaines*BaseEffectifs)?R2C1
SUMPRODUCT(CtrlID*CtrlSemaines*BaseEvolpH)"


End Sub

merci






Avatar
Rhodan
effectivement ca marche mais c'est un peu longué merci tout de même je met
ta soluce dans les tablettes perso
merci ++
"michdenis" a écrit dans le message de
news:uHq0PG%
Bonjour Rhodan,

Je te propose quelque chose ...je ne l'ai jamais essayé à proprement
parler ... mais...


Dans une procédure :

Sub TransFormerUneFormuleEnVBA()

Dim A As String

' Remplace A1 par l'adresse de la cellule contenant la formule
A = Range("A1").Formula

'Dans une cellule quelconque de ta feuille
'Applique le format texte à la cellule
Range("B2").NumberFormat = "@"
'copie ta formule dans la cellule
'observe bien, toutes tes fonctions sont traduites en Anglais et les
point-virgules entre les arguments ont été

remplacés par des virgules.
Range("B2") = A

Si tu sélectionnes le contenu de cette cellule et que tu retournes en VBA
et que tu places cette formule entre Crochets

droits, tu devrais normalement obtenir le résultat directement dans une
variable en VBA, il ne te reste plus qu'à

renseigner cette fois la bonne cellule et d'effacer le contenu de la
cellule B2 et son format


Exemple simple : J'ai dans A1 ceci : =SI(C1="";D1;E1*F1)

A = Range("A1").Formula
En A(la variable) j'obtiens : =IF(C1="",D1,E1*F1)
Attribue le contenu de la variable en B2
B2 = =IF(C1="",D1,E1*F1)

Après avoir copié le contenu de B2 dans le presse-papier
je retourne en VBA et le copie entre Crochet droit,
tu vas obtenir la bonne syntaxe ...

Le résultat de la formule va être obtenu directement dans ta variable à
l'exécution de ta procédure.

Résultat = [=IF(C1="",D1,E1*F1)]

Range("G1") = Résultat

Tu effaces les opérations préliminaires et tu obtiens ce que tu souhaitais
!



Salutations!



"Rhodan" a écrit dans le message de
news:40c33b2c$0$25503$


euh

le but de la formule est de calculer le % d'objets répondant à certaines
conditions....d'ou le sommeprod. à l'origine un TCD gérait cette histoire
mais
le nombre de TCD dans le classeur augmentaient sa taille (+15Mo) donc j'ai
transformé le TCD avec des sommeprod mais là le temps de calcul est devenu
insupportable (pls seconde à chaque clic sur le classeur) donc ...j'y
viens


je compte mettre la formule dans une macro ...qui lorsque le calcul sera
demandé avec des listbox pour définir les conditions, le formule sera
copié

dans la première cellule et etiré sur la plage désirée...

puis un petit copié/collage spéciale pour retirer ce sommeprod trop lent
et

ne garde que des valeurs.


=SI(ESTERREUR(SOMMEPROD(CtrlID*CtrlSemaines*BaseEvol)*100/SOMMEPROD(CtrlID*C


trlSemaines*BaseEffectifs))=VRAI;"";SI($A$2=1;SOMMEPROD(CtrlID*CtrlSemaines*

BaseEffectifs);SI($A$2;SOMMEPRODCtrlID*CtrlSemaines*BaseEvolpH)/

SOMMEPROD(CtrlID*CtrlSemaines*BaseEffectifs);SOMMEPROD(CtrlID*CtrlSemaines*B

aseEvol)*100/SOMMEPROD(CtrlID*CtrlSemaines*BaseEffectifs))))


mais bon je pense avoir trouvé la solution , la formule est dans une
cellule

et via une macro je la copie, étire la sélection et fait le copie/collage
spéciale valeur. c'est plus simple

"FxM" a écrit dans le message de
news:%
Bonjour,

A part la longueur (à vérifier), il y a nettement confusion dans la
formulation.
Peux-tu nous indiquer ta formule si tu l'entres dans une feuille de
calcul ou ce que tu veux faire ?

@+
FxM






bonjour

encore un petit souci,
quelle est la limite pour faire un calcul en VB ....

parce que la macro suivante donne une erreur :

Sub calculSomprod()

Range("D4").Select

ActiveCell.FormulaR1C1 = _





"=ISERROR(SUMPRODUCT(CtrlID*CtrlSemaines*BaseEvol)*100/SUMPRODUCT(CtrlID*Ctr

lSemaines*BaseEffectifs))=TRUE """" R2C1=1
SUMPRODUCT(CtrlID*CtrlSemaines*BaseEffectifs)?R2C1
SUMPRODUCT(CtrlID*CtrlSemaines*BaseEvolpH)"


End Sub

merci