"Calculer" inefficace pour rafraîchir des formules utilisant une fonction VBA

Le
Mat
bonjour à tous,

j'ai défini dans un module une fonction en VBA qui équivaut à un INDEX
- EQUIV dans un tableau "valeurs" :

Public Function tauxA(Col, Lig As String) As Double
tauxA = Application.Index(Range("valeurs"), Application.Match(Col,
Range("colonne"), 0), Application.Match(Lig, Range("ligne"), 0))
End Function

malheureusement, quand j'utilise cette fonction dans une cellule et
qu'ensuite les données du tableau changent, la valeur de la cellule
n'est pas rafraichie
il me fa



Sub RafraichirFormules()
For Each cell In ActiveSheet.UsedRange
cell.Formula = cell.Formula
Next cell

End Sub
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
JB
Le #4802211
Bonsoir,

-Je suis pas sûr que cette fonction soit très utile. Elle doit être
équivalente à Recherchev() tout en étant moins performante.
-C'est Application.Volatile en début de fonction qui provoque la Maj
automatique

JB
On 20 août, 21:19, Mat
bonjour à tous,

j'ai défini dans un module une fonction en VBA qui équivaut à un IN DEX
- EQUIV dans un tableau "valeurs" :

Public Function tauxA(Col, Lig As String) As Double
tauxA = Application.Index(Range("valeurs"), Application.Match(Col,
Range("colonne"), 0), Application.Match(Lig, Range("ligne"), 0))
End Function

malheureusement, quand j'utilise cette fonction dans une cellule et
qu'ensuite les données du tableau changent, la valeur de la cellule
n'est pas rafraichie ...
il me fa

Sub RafraichirFormules()
For Each cell In ActiveSheet.UsedRange
cell.Formula = cell.Formula
Next cell

End Sub


Mat
Le #4802171
bonsoir JB,

-C'est Application.Volatile en début de fonction qui provoque la Maj
automatique
merci pour ta réponse ! ça marche impeccable !

(je n'avais pas réussi à trouver dans les archives
mais avec le mot clef maintenant je trouve les messages ...)

-Je suis pas sûr que cette fonction soit très utile. Elle doit être
équivalente à Recherchev() tout en étant moins performante.


non, en fait c'est une rechercheVH ! pour remonter une valeur d'un
tableau alors que mes paramètres sont les noms des colonnes et ligne
(pas leur indice)
as-tu là aussi une solution élégante ?

Mat

Trirème
Le #4801971
Bonsoir,

as-tu là aussi une solution élégante ?
Rassure toi, je fais pareil mais sans VBA. La formule est donc plus longue

Avec "valeurs" étant un nom dynamique et "colonne" et "ligne" des noms dynamiques basés
sur "valeurs" : colonneÞCALER(valeurs;;;;1) et ligneÞCALER(valeurs;;;1;)

À l'usage il faut éviter les doublons dans ces marges définies.

Dans : Public Function tauxA(Col, Lig As String) As Double
ne devrais-tu pas définir Col as String ?

Cordialement,
Trirème

bonsoir JB,

-C'est Application.Volatile en début de fonction qui provoque la Maj
automatique
merci pour ta réponse ! ça marche impeccable !

(je n'avais pas réussi à trouver dans les archives
mais avec le mot clef maintenant je trouve les messages ...)

-Je suis pas sûr que cette fonction soit très utile. Elle doit être
équivalente à Recherchev() tout en étant moins performante.


non, en fait c'est une rechercheVH ! pour remonter une valeur d'un
tableau alors que mes paramètres sont les noms des colonnes et ligne
(pas leur indice)

Mat




Mat
Le #4801911
bonjour Trirème,

as-tu là aussi une solution élégante ?
Rassure toi, je fais pareil mais sans VBA. La formule est donc plus longue

Avec "valeurs" étant un nom dynamique et "colonne" et "ligne" des noms dynamiques basés
sur "valeurs" : colonneÞCALER(valeurs;;;;1) et ligneÞCALER(valeur s;;;1;)

À l'usage il faut éviter les doublons dans ces marges définies.
oui, c'est obligé


Dans : Public Function tauxA(Col, Lig As String) As Double
ne devrais-tu pas définir Col as String ?
cette syntaxe ne déclare pas Col dans la foulée ?


Mat


papou
Le #4801781
Bonjour Mat
Je me permets de répondre pour Trirème ;-)

Dans : Public Function tauxA(Col, Lig As String) As Double
ne devrais-tu pas définir Col as String ?
cette syntaxe ne déclare pas Col dans la foulée ?


Non, en VBA la syntaxe telle quelle déclare Col en tant que Variant par
défaut.
Il te faut donc stipuler :
Public Function taux(Col As String,Lig As String) As Double

Cordialement
Pascal

"Mat"
bonjour Trirème,

as-tu là aussi une solution élégante ?
Rassure toi, je fais pareil mais sans VBA. La formule est donc plus longue

Avec "valeurs" étant un nom dynamique et "colonne" et "ligne" des noms
dynamiques basés
sur "valeurs" : colonneÞCALER(valeurs;;;;1) et
ligneÞCALER(valeurs;;;1;)

À l'usage il faut éviter les doublons dans ces marges définies.
oui, c'est obligé


Dans : Public Function tauxA(Col, Lig As String) As Double
ne devrais-tu pas définir Col as String ?
cette syntaxe ne déclare pas Col dans la foulée ?


Mat


Publicité
Poster une réponse
Anonyme