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

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

5 réponses
Avatar
Mat
bonjour =E0 tous,

j'ai d=E9fini dans un module une fonction en VBA qui =E9quivaut =E0 un INDEX
- EQUIV dans un tableau "valeurs" :

Public Function tauxA(Col, Lig As String) As Double
tauxA =3D 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=E9es 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 =3D cell.Formula
Next cell

End Sub

5 réponses

Avatar
JB
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 wrote:
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


Avatar
Mat
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

Avatar
Trirème
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




Avatar
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" : colonneCALER(valeurs;;;;1) et ligneCALER(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


Avatar
papou
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" a écrit dans le message de news:

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