OVH Cloud OVH Cloud

Problème de formule

2 réponses
Avatar
andre.l'hoir
Bonjour
J'ai crée une formule moi-même qui fait simplement la somme de nombres. Ces
nombres sont dans des chaines de caractères. Rien de compliqué. Sur la feuille
Excel, dans une cellule j'ai écris '=carried(E3:E5)'
Elle fonctionne très bien.

Mon problème:
Cette application est un générateur de fichiers Excel. Je reproduis les 12 mois
de l'année pour pouvoir encoder les présences de personnes. Je crée, par VBA, de
nouveaux fichiers Excel,j'ajoute 12x la feuille principale (qui contient la
fonction ci-dessous), je recopie le module contenant le VBA pour ma fonction et
enfin, je recopie les éventuels pointages existant de la personne. Une fois
terminé, le nouveau fichier est sauvé et fermé.

Lorsque j'ouvre le nouveau fichier crée, la valeur retourné par ma fonction est
figée. Comme si il ne calculais pas. Je dois réellement encoder ou modifier une
cellule quelconque pour que la formule fonctionne.

Par exemple: En Janvier Mr x a travaillé réellement 10h (valeur bidon), en
février, Mr x à travaillé 15h. Lorsque j'ouvre son fichier, en janvier, ma
formule retourne bien 10h, en février, il affiche également 10h, si j'ouvre le
mois de juillet, il affiche également 10h (malgré que la feuille est vide). Si
je modifie une cellule quelconque en février, le montant se remettra à 15h.

Si je regarde la configuration d'Excel, je suis en calcul automatique. Ce que
j'ai également essayé, lors de la copie des feuilles, je modifie le contenu
d'une cellule (par VBA) en espérant de faire réagir la formule. Rien à faire.

Quelqu'un aurais une idée?

Voici ma fonction:
function carried(zone as Range) as string
total = 0
for each c in zone
total = total + cdbl(zone.value) ' la valeur est dans un String
next c
if total > 0 then
carried = "Carried Forward : +" + total + " hours"
else
carried = "Carried Forward : -" + total + " hours"
end if
end function

Merci d'avance
André


--
NewsGuy.Com 30Gb $9.95 Carry Forward and On Demand Bandwidth

2 réponses

Avatar
bourby
bonjour,

à mon avis il n'y a pas besoin de fonction personnalisée pour faire ce
travail: tu peux utiliser les fonctions de conversion dans Excel, et
afficher le résultat comme un nombre avec un format personnalisé, ou
avec un si(...).

Si tu tiens à cette fonction (mais ça ralentit beaucoup l'exécution),
as-tu regardé du côté de
Calculate
ou déclarer la fonction Volatile?

cordialement






andre.l' wrote:
Bonjour
J'ai crée une formule moi-même qui fait simplement la somme de nombres. Ces
nombres sont dans des chaines de caractères. Rien de compliqué. Sur la feuille
Excel, dans une cellule j'ai écris 'Êrried(E3:E5)'
Elle fonctionne très bien.

Mon problème:
Cette application est un générateur de fichiers Excel. Je reproduis les 12 mois
de l'année pour pouvoir encoder les présences de personnes. Je crée, par VBA, de
nouveaux fichiers Excel,j'ajoute 12x la feuille principale (qui contient la
fonction ci-dessous), je recopie le module contenant le VBA pour ma fonction et
enfin, je recopie les éventuels pointages existant de la personne. Une fois
terminé, le nouveau fichier est sauvé et fermé.

Lorsque j'ouvre le nouveau fichier crée, la valeur retourné par ma fonction est
figée. Comme si il ne calculais pas. Je dois réellement encoder ou modifier une
cellule quelconque pour que la formule fonctionne.

Par exemple: En Janvier Mr x a travaillé réellement 10h (valeur bidon), en
février, Mr x à travaillé 15h. Lorsque j'ouvre son fichier, en janvier, ma
formule retourne bien 10h, en février, il affiche également 10h, si j'ouvre le
mois de juillet, il affiche également 10h (malgré que la feuille est vide). Si
je modifie une cellule quelconque en février, le montant se remettra à 15h.

Si je regarde la configuration d'Excel, je suis en calcul automatique. Ce que
j'ai également essayé, lors de la copie des feuilles, je modifie le contenu
d'une cellule (par VBA) en espérant de faire réagir la formule. Rien à faire.

Quelqu'un aurais une idée?

Voici ma fonction:
function carried(zone as Range) as string
total = 0
for each c in zone
total = total + cdbl(zone.value) ' la valeur est dans un String
next c
if total > 0 then
carried = "Carried Forward : +" + total + " hours"
else
carried = "Carried Forward : -" + total + " hours"
end if
end function

Merci d'avance
André




Avatar
andre.l'hoir
Bonjour,

Merci pour votre réponse. Pouvez-vous me dire comment déclarer la fonction
Volatile?

Merci d'avance

André

In article , bourby says...

bonjour,

à mon avis il n'y a pas besoin de fonction personnalisée pour faire ce
travail: tu peux utiliser les fonctions de conversion dans Excel, et
afficher le résultat comme un nombre avec un format personnalisé, ou
avec un si(...).

Si tu tiens à cette fonction (mais ça ralentit beaucoup l'exécution),
as-tu regardé du côté de
Calculate
ou déclarer la fonction Volatile?

cordialement






andre.l' wrote:
Bonjour
J'ai crée une formule moi-même qui fait simplement la somme de nombres. Ces
nombres sont dans des chaines de caractères. Rien de compliqué. Sur la feuille
Excel, dans une cellule j'ai écris 'Êrried(E3:E5)'
Elle fonctionne très bien.

Mon problème:
Cette application est un générateur de fichiers Excel. Je reproduis les 12 mois
de l'année pour pouvoir encoder les présences de personnes. Je crée, par VBA, de
nouveaux fichiers Excel,j'ajoute 12x la feuille principale (qui contient la
fonction ci-dessous), je recopie le module contenant le VBA pour ma fonction et
enfin, je recopie les éventuels pointages existant de la personne. Une fois
terminé, le nouveau fichier est sauvé et fermé.

Lorsque j'ouvre le nouveau fichier crée, la valeur retourné par ma fonction est
figée. Comme si il ne calculais pas. Je dois réellement encoder ou modifier une
cellule quelconque pour que la formule fonctionne.

Par exemple: En Janvier Mr x a travaillé réellement 10h (valeur bidon), en
février, Mr x à travaillé 15h. Lorsque j'ouvre son fichier, en janvier, ma
formule retourne bien 10h, en février, il affiche également 10h, si j'ouvre le
mois de juillet, il affiche également 10h (malgré que la feuille est vide). Si
je modifie une cellule quelconque en février, le montant se remettra à 15h.

Si je regarde la configuration d'Excel, je suis en calcul automatique. Ce que
j'ai également essayé, lors de la copie des feuilles, je modifie le contenu
d'une cellule (par VBA) en espérant de faire réagir la formule. Rien à faire.

Quelqu'un aurais une idée?

Voici ma fonction:
function carried(zone as Range) as string
total = 0
for each c in zone
total = total + cdbl(zone.value) ' la valeur est dans un String
next c
if total > 0 then
carried = "Carried Forward : +" + total + " hours"
else
carried = "Carried Forward : -" + total + " hours"
end if
end function

Merci d'avance
André






--
NewsGuy.Com 30Gb $9.95 Carry Forward and On Demand Bandwidth