Bonjour,
Sans voir la fonction, c'est difficile de se prononcer !
Tu devrais la publier.
"ttcpp" a écrit dans le message de groupe de discussion
:
Bonjour,
J'ai créé une fonction en vba avec 2 critères en entrée. J'ai mis
Application volatile true pour que celle-ci se recalcule automatiquement en
cas de changement d'un ou 2 paramètres.
Le problème c'est que j'utlise le résultat de la fonction dans une autre
feuille et que si je fait des maj dedans le résultat de la fonction se trouve
changé alors que les paramètres ne le sont pas. Que je sois en calcul manuel
ou auto, c'est pareil.
Merci pour votre aide
Thierry
Bonjour,
Sans voir la fonction, c'est difficile de se prononcer !
Tu devrais la publier.
"ttcpp" <ttcpp@discussions.microsoft.com> a écrit dans le message de groupe de discussion
: 66AF6581-BFA7-4A6E-A151-6E0E2C5D3E41@microsoft.com...
Bonjour,
J'ai créé une fonction en vba avec 2 critères en entrée. J'ai mis
Application volatile true pour que celle-ci se recalcule automatiquement en
cas de changement d'un ou 2 paramètres.
Le problème c'est que j'utlise le résultat de la fonction dans une autre
feuille et que si je fait des maj dedans le résultat de la fonction se trouve
changé alors que les paramètres ne le sont pas. Que je sois en calcul manuel
ou auto, c'est pareil.
Merci pour votre aide
Thierry
Bonjour,
Sans voir la fonction, c'est difficile de se prononcer !
Tu devrais la publier.
"ttcpp" a écrit dans le message de groupe de discussion
:
Bonjour,
J'ai créé une fonction en vba avec 2 critères en entrée. J'ai mis
Application volatile true pour que celle-ci se recalcule automatiquement en
cas de changement d'un ou 2 paramètres.
Le problème c'est que j'utlise le résultat de la fonction dans une autre
feuille et que si je fait des maj dedans le résultat de la fonction se trouve
changé alors que les paramètres ne le sont pas. Que je sois en calcul manuel
ou auto, c'est pareil.
Merci pour votre aide
Thierry
Bonjour,
Sans voir la fonction, c'est difficile de se prononcer !
Tu devrais la publier.
"ttcpp" a écrit dans le message de groupe de
discussion
:
Bonjour,
J'ai créé une fonction en vba avec 2 critères en entrée. J'ai mis
Application volatile true pour que celle-ci se recalcule automatiquement en
cas de changement d'un ou 2 paramètres.
Le problème c'est que j'utlise le résultat de la fonction dans une autre
feuille et que si je fait des maj dedans le résultat de la fonction se trouve
changé alors que les paramètres ne le sont pas. Que je sois en calcul manuel
ou auto, c'est pareil.
Merci pour votre aide
Thierry
Bonjour,
Sans voir la fonction, c'est difficile de se prononcer !
Tu devrais la publier.
"ttcpp" <ttcpp@discussions.microsoft.com> a écrit dans le message de groupe de
discussion
: 66AF6581-BFA7-4A6E-A151-6E0E2C5D3E41@microsoft.com...
Bonjour,
J'ai créé une fonction en vba avec 2 critères en entrée. J'ai mis
Application volatile true pour que celle-ci se recalcule automatiquement en
cas de changement d'un ou 2 paramètres.
Le problème c'est que j'utlise le résultat de la fonction dans une autre
feuille et que si je fait des maj dedans le résultat de la fonction se trouve
changé alors que les paramètres ne le sont pas. Que je sois en calcul manuel
ou auto, c'est pareil.
Merci pour votre aide
Thierry
Bonjour,
Sans voir la fonction, c'est difficile de se prononcer !
Tu devrais la publier.
"ttcpp" a écrit dans le message de groupe de
discussion
:
Bonjour,
J'ai créé une fonction en vba avec 2 critères en entrée. J'ai mis
Application volatile true pour que celle-ci se recalcule automatiquement en
cas de changement d'un ou 2 paramètres.
Le problème c'est que j'utlise le résultat de la fonction dans une autre
feuille et que si je fait des maj dedans le résultat de la fonction se trouve
changé alors que les paramètres ne le sont pas. Que je sois en calcul manuel
ou auto, c'est pareil.
Merci pour votre aide
Thierry
End Sub
Voici ta fonction modifiée :
A ) Ta fonction n'a pas à être "volatile"... dès que tu changeras
un des 2 paramètres que tu passes à la fonction, cette dernière
sera d'elle-même relancée et réévaluée.
B ) Je n'ai pas vu ton application, mais ta fonction ressemble plus
à une procédure événementielle de ce type existant pour chaque
feuille dans leur feuille respective. Si cela s'applique à un grand
nombre de feuille, il y a un autre événement du ThisWorkbook
qui fait le travail.
'-------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
End Sub
'-------------------------------
Voilà une suggestion :
'-------------------------------------
Function Mois_Budget(arg1 As Range, arg2 As Double) As Double
'arg1 = cellule sur lequel il y a la chaine de
'caractére qui determine le mois sur lequel on
'calcul le prorata
'arg2 = coefficient multiplicateur
Dim N_Ligne, N_Colonne As Integer
Dim Adresse_Fonction As String
Dim Nom_Feuille As String
N_Ligne = arg1.Row
N_Colonne = arg1.Column
Nom_Feuille = arg1.Parent.Name
If arg1.Value Like "*Q1*" Then Mois_Budget = _
Worksheets(Nom_Feuille).Cells(N_Ligne - 8, N_Colonne).Value * arg2
If arg1.Value Like "*Q2*" Then Mois_Budget = _
Worksheets(Nom_Feuille).Cells(N_Ligne - 6, N_Colonne).Value * arg2
If arg1.Value Like "*Q3*" Then Mois_Budget = _
Worksheets(Nom_Feuille).Cells(N_Ligne - 4, N_Colonne).Value * arg2
If arg1.Value Like "*Q4*" Then Mois_Budget = _
Worksheets(Nom_Feuille).Cells(N_Ligne - 2, N_Colonne).Value * arg2
End Function
'-------------------------------------
"ttcpp" a écrit dans le message de groupe de discussion
:
Voici le code de la fonction :
Option Explicit
Public Ref_Nom_fichier As String
Public Pos_Control As Integer
Public Function Mois_Budget(arg1 As Range, arg2 As Double) As Double
'arg1 = cellule sur lequel il y a la chaine de caractére qui determine le
mois sur lequel on calcul le prorata
'arg2 = coefficient multiplicateur
Application.Volatile True
Dim N_Ligne, N_Colonne As Integer
Dim Adresse_Fonction As String
N_Ligne = Test_Ligne(arg1)
Adresse_Fonction = Application.Caller.Address(ReferenceStyle:=xlR1C1)
N_Colonne = Val(Right(Adresse_Fonction, Len(Adresse_Fonction) - InStr(1,
Adresse_Fonction, "C")))
If arg1.Value Like "*Q1*" Then Mois_Budget = ActiveSheet.Cells(N_Ligne - 8,
N_Colonne).Value * arg2
If arg1.Value Like "*Q2*" Then Mois_Budget = ActiveSheet.Cells(N_Ligne - 6,
N_Colonne).Value * arg2
If arg1.Value Like "*Q3*" Then Mois_Budget = ActiveSheet.Cells(N_Ligne - 4,
N_Colonne).Value * arg2
If arg1.Value Like "*Q4*" Then Mois_Budget = ActiveSheet.Cells(N_Ligne - 2,
N_Colonne).Value * arg2
'Application.Volatile False
End Function
Public Function Test_Ligne(r As Range) As Integer
Test_Ligne = r.Row
End Function
"michdenis" wrote:
> Bonjour,
>
> Sans voir la fonction, c'est difficile de se prononcer !
> Tu devrais la publier.
>
>
>
>
>
> "ttcpp" a écrit dans le message de groupe de
> discussion
> :
> Bonjour,
>
> J'ai créé une fonction en vba avec 2 critères en entrée. J'ai mis
> Application volatile true pour que celle-ci se recalcule automatiquement en
> cas de changement d'un ou 2 paramètres.
> Le problème c'est que j'utlise le résultat de la fonction dans une autre
> feuille et que si je fait des maj dedans le résultat de la fonction se trouve
> changé alors que les paramètres ne le sont pas. Que je sois en calcul manuel
> ou auto, c'est pareil.
>
> Merci pour votre aide
>
> Thierry
>
End Sub
Voici ta fonction modifiée :
A ) Ta fonction n'a pas à être "volatile"... dès que tu changeras
un des 2 paramètres que tu passes à la fonction, cette dernière
sera d'elle-même relancée et réévaluée.
B ) Je n'ai pas vu ton application, mais ta fonction ressemble plus
à une procédure événementielle de ce type existant pour chaque
feuille dans leur feuille respective. Si cela s'applique à un grand
nombre de feuille, il y a un autre événement du ThisWorkbook
qui fait le travail.
'-------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
End Sub
'-------------------------------
Voilà une suggestion :
'-------------------------------------
Function Mois_Budget(arg1 As Range, arg2 As Double) As Double
'arg1 = cellule sur lequel il y a la chaine de
'caractére qui determine le mois sur lequel on
'calcul le prorata
'arg2 = coefficient multiplicateur
Dim N_Ligne, N_Colonne As Integer
Dim Adresse_Fonction As String
Dim Nom_Feuille As String
N_Ligne = arg1.Row
N_Colonne = arg1.Column
Nom_Feuille = arg1.Parent.Name
If arg1.Value Like "*Q1*" Then Mois_Budget = _
Worksheets(Nom_Feuille).Cells(N_Ligne - 8, N_Colonne).Value * arg2
If arg1.Value Like "*Q2*" Then Mois_Budget = _
Worksheets(Nom_Feuille).Cells(N_Ligne - 6, N_Colonne).Value * arg2
If arg1.Value Like "*Q3*" Then Mois_Budget = _
Worksheets(Nom_Feuille).Cells(N_Ligne - 4, N_Colonne).Value * arg2
If arg1.Value Like "*Q4*" Then Mois_Budget = _
Worksheets(Nom_Feuille).Cells(N_Ligne - 2, N_Colonne).Value * arg2
End Function
'-------------------------------------
"ttcpp" <ttcpp@discussions.microsoft.com> a écrit dans le message de groupe de discussion
: 35D5FD0A-D355-4266-B111-D21452831ED4@microsoft.com...
Voici le code de la fonction :
Option Explicit
Public Ref_Nom_fichier As String
Public Pos_Control As Integer
Public Function Mois_Budget(arg1 As Range, arg2 As Double) As Double
'arg1 = cellule sur lequel il y a la chaine de caractére qui determine le
mois sur lequel on calcul le prorata
'arg2 = coefficient multiplicateur
Application.Volatile True
Dim N_Ligne, N_Colonne As Integer
Dim Adresse_Fonction As String
N_Ligne = Test_Ligne(arg1)
Adresse_Fonction = Application.Caller.Address(ReferenceStyle:=xlR1C1)
N_Colonne = Val(Right(Adresse_Fonction, Len(Adresse_Fonction) - InStr(1,
Adresse_Fonction, "C")))
If arg1.Value Like "*Q1*" Then Mois_Budget = ActiveSheet.Cells(N_Ligne - 8,
N_Colonne).Value * arg2
If arg1.Value Like "*Q2*" Then Mois_Budget = ActiveSheet.Cells(N_Ligne - 6,
N_Colonne).Value * arg2
If arg1.Value Like "*Q3*" Then Mois_Budget = ActiveSheet.Cells(N_Ligne - 4,
N_Colonne).Value * arg2
If arg1.Value Like "*Q4*" Then Mois_Budget = ActiveSheet.Cells(N_Ligne - 2,
N_Colonne).Value * arg2
'Application.Volatile False
End Function
Public Function Test_Ligne(r As Range) As Integer
Test_Ligne = r.Row
End Function
"michdenis" wrote:
> Bonjour,
>
> Sans voir la fonction, c'est difficile de se prononcer !
> Tu devrais la publier.
>
>
>
>
>
> "ttcpp" <ttcpp@discussions.microsoft.com> a écrit dans le message de groupe de
> discussion
> : 66AF6581-BFA7-4A6E-A151-6E0E2C5D3E41@microsoft.com...
> Bonjour,
>
> J'ai créé une fonction en vba avec 2 critères en entrée. J'ai mis
> Application volatile true pour que celle-ci se recalcule automatiquement en
> cas de changement d'un ou 2 paramètres.
> Le problème c'est que j'utlise le résultat de la fonction dans une autre
> feuille et que si je fait des maj dedans le résultat de la fonction se trouve
> changé alors que les paramètres ne le sont pas. Que je sois en calcul manuel
> ou auto, c'est pareil.
>
> Merci pour votre aide
>
> Thierry
>
End Sub
Voici ta fonction modifiée :
A ) Ta fonction n'a pas à être "volatile"... dès que tu changeras
un des 2 paramètres que tu passes à la fonction, cette dernière
sera d'elle-même relancée et réévaluée.
B ) Je n'ai pas vu ton application, mais ta fonction ressemble plus
à une procédure événementielle de ce type existant pour chaque
feuille dans leur feuille respective. Si cela s'applique à un grand
nombre de feuille, il y a un autre événement du ThisWorkbook
qui fait le travail.
'-------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
End Sub
'-------------------------------
Voilà une suggestion :
'-------------------------------------
Function Mois_Budget(arg1 As Range, arg2 As Double) As Double
'arg1 = cellule sur lequel il y a la chaine de
'caractére qui determine le mois sur lequel on
'calcul le prorata
'arg2 = coefficient multiplicateur
Dim N_Ligne, N_Colonne As Integer
Dim Adresse_Fonction As String
Dim Nom_Feuille As String
N_Ligne = arg1.Row
N_Colonne = arg1.Column
Nom_Feuille = arg1.Parent.Name
If arg1.Value Like "*Q1*" Then Mois_Budget = _
Worksheets(Nom_Feuille).Cells(N_Ligne - 8, N_Colonne).Value * arg2
If arg1.Value Like "*Q2*" Then Mois_Budget = _
Worksheets(Nom_Feuille).Cells(N_Ligne - 6, N_Colonne).Value * arg2
If arg1.Value Like "*Q3*" Then Mois_Budget = _
Worksheets(Nom_Feuille).Cells(N_Ligne - 4, N_Colonne).Value * arg2
If arg1.Value Like "*Q4*" Then Mois_Budget = _
Worksheets(Nom_Feuille).Cells(N_Ligne - 2, N_Colonne).Value * arg2
End Function
'-------------------------------------
"ttcpp" a écrit dans le message de groupe de discussion
:
Voici le code de la fonction :
Option Explicit
Public Ref_Nom_fichier As String
Public Pos_Control As Integer
Public Function Mois_Budget(arg1 As Range, arg2 As Double) As Double
'arg1 = cellule sur lequel il y a la chaine de caractére qui determine le
mois sur lequel on calcul le prorata
'arg2 = coefficient multiplicateur
Application.Volatile True
Dim N_Ligne, N_Colonne As Integer
Dim Adresse_Fonction As String
N_Ligne = Test_Ligne(arg1)
Adresse_Fonction = Application.Caller.Address(ReferenceStyle:=xlR1C1)
N_Colonne = Val(Right(Adresse_Fonction, Len(Adresse_Fonction) - InStr(1,
Adresse_Fonction, "C")))
If arg1.Value Like "*Q1*" Then Mois_Budget = ActiveSheet.Cells(N_Ligne - 8,
N_Colonne).Value * arg2
If arg1.Value Like "*Q2*" Then Mois_Budget = ActiveSheet.Cells(N_Ligne - 6,
N_Colonne).Value * arg2
If arg1.Value Like "*Q3*" Then Mois_Budget = ActiveSheet.Cells(N_Ligne - 4,
N_Colonne).Value * arg2
If arg1.Value Like "*Q4*" Then Mois_Budget = ActiveSheet.Cells(N_Ligne - 2,
N_Colonne).Value * arg2
'Application.Volatile False
End Function
Public Function Test_Ligne(r As Range) As Integer
Test_Ligne = r.Row
End Function
"michdenis" wrote:
> Bonjour,
>
> Sans voir la fonction, c'est difficile de se prononcer !
> Tu devrais la publier.
>
>
>
>
>
> "ttcpp" a écrit dans le message de groupe de
> discussion
> :
> Bonjour,
>
> J'ai créé une fonction en vba avec 2 critères en entrée. J'ai mis
> Application volatile true pour que celle-ci se recalcule automatiquement en
> cas de changement d'un ou 2 paramètres.
> Le problème c'est que j'utlise le résultat de la fonction dans une autre
> feuille et que si je fait des maj dedans le résultat de la fonction se trouve
> changé alors que les paramètres ne le sont pas. Que je sois en calcul manuel
> ou auto, c'est pareil.
>
> Merci pour votre aide
>
> Thierry
>
End Sub
Voici ta fonction modifiée :
A ) Ta fonction n'a pas à être "volatile"... dès que tu changeras
un des 2 paramètres que tu passes à la fonction, cette dernière
sera d'elle-même relancée et réévaluée.
B ) Je n'ai pas vu ton application, mais ta fonction ressemble plus
à une procédure événementielle de ce type existant pour chaque
feuille dans leur feuille respective. Si cela s'applique à un grand
nombre de feuille, il y a un autre événement du ThisWorkbook
qui fait le travail.
'-------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
End Sub
'-------------------------------
Voilà une suggestion :
'-------------------------------------
Function Mois_Budget(arg1 As Range, arg2 As Double) As Double
'arg1 = cellule sur lequel il y a la chaine de
'caractére qui determine le mois sur lequel on
'calcul le prorata
'arg2 = coefficient multiplicateur
Dim N_Ligne, N_Colonne As Integer
Dim Adresse_Fonction As String
Dim Nom_Feuille As String
N_Ligne = arg1.Row
N_Colonne = arg1.Column
Nom_Feuille = arg1.Parent.Name
If arg1.Value Like "*Q1*" Then Mois_Budget = _
Worksheets(Nom_Feuille).Cells(N_Ligne - 8, N_Colonne).Value * arg2
If arg1.Value Like "*Q2*" Then Mois_Budget = _
Worksheets(Nom_Feuille).Cells(N_Ligne - 6, N_Colonne).Value * arg2
If arg1.Value Like "*Q3*" Then Mois_Budget = _
Worksheets(Nom_Feuille).Cells(N_Ligne - 4, N_Colonne).Value * arg2
If arg1.Value Like "*Q4*" Then Mois_Budget = _
Worksheets(Nom_Feuille).Cells(N_Ligne - 2, N_Colonne).Value * arg2
End Function
'-------------------------------------
"ttcpp" a écrit dans le message de groupe de
discussion
:
Voici le code de la fonction :
Option Explicit
Public Ref_Nom_fichier As String
Public Pos_Control As Integer
Public Function Mois_Budget(arg1 As Range, arg2 As Double) As Double
'arg1 = cellule sur lequel il y a la chaine de caractére qui determine le
mois sur lequel on calcul le prorata
'arg2 = coefficient multiplicateur
Application.Volatile True
Dim N_Ligne, N_Colonne As Integer
Dim Adresse_Fonction As String
N_Ligne = Test_Ligne(arg1)
Adresse_Fonction = Application.Caller.Address(ReferenceStyle:=xlR1C1)
N_Colonne = Val(Right(Adresse_Fonction, Len(Adresse_Fonction) - InStr(1,
Adresse_Fonction, "C")))
If arg1.Value Like "*Q1*" Then Mois_Budget = ActiveSheet.Cells(N_Ligne - 8,
N_Colonne).Value * arg2
If arg1.Value Like "*Q2*" Then Mois_Budget = ActiveSheet.Cells(N_Ligne - 6,
N_Colonne).Value * arg2
If arg1.Value Like "*Q3*" Then Mois_Budget = ActiveSheet.Cells(N_Ligne - 4,
N_Colonne).Value * arg2
If arg1.Value Like "*Q4*" Then Mois_Budget = ActiveSheet.Cells(N_Ligne - 2,
N_Colonne).Value * arg2
'Application.Volatile False
End Function
Public Function Test_Ligne(r As Range) As Integer
Test_Ligne = r.Row
End Function
"michdenis" wrote:
> Bonjour,
>
> Sans voir la fonction, c'est difficile de se prononcer !
> Tu devrais la publier.
>
>
>
>
>
> "ttcpp" a écrit dans le message de groupe de
> discussion
> :
> Bonjour,
>
> J'ai créé une fonction en vba avec 2 critères en entrée. J'ai mis
> Application volatile true pour que celle-ci se recalcule automatiquement en
> cas de changement d'un ou 2 paramètres.
> Le problème c'est que j'utlise le résultat de la fonction dans une autre
> feuille et que si je fait des maj dedans le résultat de la fonction se trouve
> changé alors que les paramètres ne le sont pas. Que je sois en calcul manuel
> ou auto, c'est pareil.
>
> Merci pour votre aide
>
> Thierry
>
End Sub
Voici ta fonction modifiée :
A ) Ta fonction n'a pas à être "volatile"... dès que tu changeras
un des 2 paramètres que tu passes à la fonction, cette dernière
sera d'elle-même relancée et réévaluée.
B ) Je n'ai pas vu ton application, mais ta fonction ressemble plus
à une procédure événementielle de ce type existant pour chaque
feuille dans leur feuille respective. Si cela s'applique à un grand
nombre de feuille, il y a un autre événement du ThisWorkbook
qui fait le travail.
'-------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
End Sub
'-------------------------------
Voilà une suggestion :
'-------------------------------------
Function Mois_Budget(arg1 As Range, arg2 As Double) As Double
'arg1 = cellule sur lequel il y a la chaine de
'caractére qui determine le mois sur lequel on
'calcul le prorata
'arg2 = coefficient multiplicateur
Dim N_Ligne, N_Colonne As Integer
Dim Adresse_Fonction As String
Dim Nom_Feuille As String
N_Ligne = arg1.Row
N_Colonne = arg1.Column
Nom_Feuille = arg1.Parent.Name
If arg1.Value Like "*Q1*" Then Mois_Budget = _
Worksheets(Nom_Feuille).Cells(N_Ligne - 8, N_Colonne).Value * arg2
If arg1.Value Like "*Q2*" Then Mois_Budget = _
Worksheets(Nom_Feuille).Cells(N_Ligne - 6, N_Colonne).Value * arg2
If arg1.Value Like "*Q3*" Then Mois_Budget = _
Worksheets(Nom_Feuille).Cells(N_Ligne - 4, N_Colonne).Value * arg2
If arg1.Value Like "*Q4*" Then Mois_Budget = _
Worksheets(Nom_Feuille).Cells(N_Ligne - 2, N_Colonne).Value * arg2
End Function
'-------------------------------------
"ttcpp" <ttcpp@discussions.microsoft.com> a écrit dans le message de groupe de
discussion
: 35D5FD0A-D355-4266-B111-D21452831ED4@microsoft.com...
Voici le code de la fonction :
Option Explicit
Public Ref_Nom_fichier As String
Public Pos_Control As Integer
Public Function Mois_Budget(arg1 As Range, arg2 As Double) As Double
'arg1 = cellule sur lequel il y a la chaine de caractére qui determine le
mois sur lequel on calcul le prorata
'arg2 = coefficient multiplicateur
Application.Volatile True
Dim N_Ligne, N_Colonne As Integer
Dim Adresse_Fonction As String
N_Ligne = Test_Ligne(arg1)
Adresse_Fonction = Application.Caller.Address(ReferenceStyle:=xlR1C1)
N_Colonne = Val(Right(Adresse_Fonction, Len(Adresse_Fonction) - InStr(1,
Adresse_Fonction, "C")))
If arg1.Value Like "*Q1*" Then Mois_Budget = ActiveSheet.Cells(N_Ligne - 8,
N_Colonne).Value * arg2
If arg1.Value Like "*Q2*" Then Mois_Budget = ActiveSheet.Cells(N_Ligne - 6,
N_Colonne).Value * arg2
If arg1.Value Like "*Q3*" Then Mois_Budget = ActiveSheet.Cells(N_Ligne - 4,
N_Colonne).Value * arg2
If arg1.Value Like "*Q4*" Then Mois_Budget = ActiveSheet.Cells(N_Ligne - 2,
N_Colonne).Value * arg2
'Application.Volatile False
End Function
Public Function Test_Ligne(r As Range) As Integer
Test_Ligne = r.Row
End Function
"michdenis" wrote:
> Bonjour,
>
> Sans voir la fonction, c'est difficile de se prononcer !
> Tu devrais la publier.
>
>
>
>
>
> "ttcpp" <ttcpp@discussions.microsoft.com> a écrit dans le message de groupe de
> discussion
> : 66AF6581-BFA7-4A6E-A151-6E0E2C5D3E41@microsoft.com...
> Bonjour,
>
> J'ai créé une fonction en vba avec 2 critères en entrée. J'ai mis
> Application volatile true pour que celle-ci se recalcule automatiquement en
> cas de changement d'un ou 2 paramètres.
> Le problème c'est que j'utlise le résultat de la fonction dans une autre
> feuille et que si je fait des maj dedans le résultat de la fonction se trouve
> changé alors que les paramètres ne le sont pas. Que je sois en calcul manuel
> ou auto, c'est pareil.
>
> Merci pour votre aide
>
> Thierry
>
End Sub
Voici ta fonction modifiée :
A ) Ta fonction n'a pas à être "volatile"... dès que tu changeras
un des 2 paramètres que tu passes à la fonction, cette dernière
sera d'elle-même relancée et réévaluée.
B ) Je n'ai pas vu ton application, mais ta fonction ressemble plus
à une procédure événementielle de ce type existant pour chaque
feuille dans leur feuille respective. Si cela s'applique à un grand
nombre de feuille, il y a un autre événement du ThisWorkbook
qui fait le travail.
'-------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
End Sub
'-------------------------------
Voilà une suggestion :
'-------------------------------------
Function Mois_Budget(arg1 As Range, arg2 As Double) As Double
'arg1 = cellule sur lequel il y a la chaine de
'caractére qui determine le mois sur lequel on
'calcul le prorata
'arg2 = coefficient multiplicateur
Dim N_Ligne, N_Colonne As Integer
Dim Adresse_Fonction As String
Dim Nom_Feuille As String
N_Ligne = arg1.Row
N_Colonne = arg1.Column
Nom_Feuille = arg1.Parent.Name
If arg1.Value Like "*Q1*" Then Mois_Budget = _
Worksheets(Nom_Feuille).Cells(N_Ligne - 8, N_Colonne).Value * arg2
If arg1.Value Like "*Q2*" Then Mois_Budget = _
Worksheets(Nom_Feuille).Cells(N_Ligne - 6, N_Colonne).Value * arg2
If arg1.Value Like "*Q3*" Then Mois_Budget = _
Worksheets(Nom_Feuille).Cells(N_Ligne - 4, N_Colonne).Value * arg2
If arg1.Value Like "*Q4*" Then Mois_Budget = _
Worksheets(Nom_Feuille).Cells(N_Ligne - 2, N_Colonne).Value * arg2
End Function
'-------------------------------------
"ttcpp" a écrit dans le message de groupe de
discussion
:
Voici le code de la fonction :
Option Explicit
Public Ref_Nom_fichier As String
Public Pos_Control As Integer
Public Function Mois_Budget(arg1 As Range, arg2 As Double) As Double
'arg1 = cellule sur lequel il y a la chaine de caractére qui determine le
mois sur lequel on calcul le prorata
'arg2 = coefficient multiplicateur
Application.Volatile True
Dim N_Ligne, N_Colonne As Integer
Dim Adresse_Fonction As String
N_Ligne = Test_Ligne(arg1)
Adresse_Fonction = Application.Caller.Address(ReferenceStyle:=xlR1C1)
N_Colonne = Val(Right(Adresse_Fonction, Len(Adresse_Fonction) - InStr(1,
Adresse_Fonction, "C")))
If arg1.Value Like "*Q1*" Then Mois_Budget = ActiveSheet.Cells(N_Ligne - 8,
N_Colonne).Value * arg2
If arg1.Value Like "*Q2*" Then Mois_Budget = ActiveSheet.Cells(N_Ligne - 6,
N_Colonne).Value * arg2
If arg1.Value Like "*Q3*" Then Mois_Budget = ActiveSheet.Cells(N_Ligne - 4,
N_Colonne).Value * arg2
If arg1.Value Like "*Q4*" Then Mois_Budget = ActiveSheet.Cells(N_Ligne - 2,
N_Colonne).Value * arg2
'Application.Volatile False
End Function
Public Function Test_Ligne(r As Range) As Integer
Test_Ligne = r.Row
End Function
"michdenis" wrote:
> Bonjour,
>
> Sans voir la fonction, c'est difficile de se prononcer !
> Tu devrais la publier.
>
>
>
>
>
> "ttcpp" a écrit dans le message de groupe de
> discussion
> :
> Bonjour,
>
> J'ai créé une fonction en vba avec 2 critères en entrée. J'ai mis
> Application volatile true pour que celle-ci se recalcule automatiquement en
> cas de changement d'un ou 2 paramètres.
> Le problème c'est que j'utlise le résultat de la fonction dans une autre
> feuille et que si je fait des maj dedans le résultat de la fonction se trouve
> changé alors que les paramètres ne le sont pas. Que je sois en calcul manuel
> ou auto, c'est pareil.
>
> Merci pour votre aide
>
> Thierry
>