Macro mise à jour auto valeur par cellule?

Résolu/Fermé
jemakaku Messages postés 11 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 9 juin 2009 - 14 avril 2009 à 09:15
jemakaku Messages postés 11 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 9 juin 2009 - 14 avril 2009 à 10:44
Bonjour,
j'ai une fonction qui fonctionne très bien :
"""
Function ValColonneCm()
ValColonneCm = Format(Selection.ColumnWidth / 4.663, "0.000")
End Function
"""
Elle affiche la taille, en cm, de la colonne de la cellule où elle est exécutée. (la cellule contient donc sa largeur)

Le problème c'est que cette fonction ne se met pas à jour automatiquement quand je change la taille de la colonne, je suis obligé de rentré dans la cellule, faire F2 puis ENTER. Ce qui, vu le nombre d'ajustements que je dois faire, me faire perdre beaucoup de temps.

J'ai tenté un :
"""
Application.Volatile
"""
En début de fonction, ca fonctionne déjà mieux (toutes les fonctions se mettent à jour au lieu d'une seule quand je fais la même manipulation) Sauf que la valeur n'est calculée qu'une seule fois et qu'elle est donc affichée partout pareil.
Exemple une colonne de 4cm, une de 2 et une de 6, je fais F2 puis ENTER sur celle de 6cm et, dans toutes les colonnes, serra affiché 6cm.

Cette fréquence de rafraîchissement des informations me suffirait si c'était calculé correctement donc si quelqu'un a une idée pour que j'ai les bonnes informations qui s'affichent au lieu de tout le temps la même, je suis preneur.
Cependant l'idéal serrait que cette information soit mise à jour automatiquement à chaque modification de taille de colonne.

Merci d'avance pour votre aide. :-)

Jema
A voir également:

3 réponses

lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
14 avril 2009 à 10:43
Bonjour,
Normale que tu ai toujours la même largeur vu que tu travaille sur la sélection, faut faire..
Public Function LgColonne()
    Application.Volatile
    LgColonne = Format(Application.Caller.ColumnWidth / 4.663, "0.000")
End Function

Et après avoir changer une ou plusieurs largeurs tu tape F9 pour forcer un recalcul.
A+
2
jemakaku Messages postés 11 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 9 juin 2009 1
14 avril 2009 à 10:43
Merci à Pierrot93 sur un autre forum pour sa réponse. (question de rapidité! ;-) )

Je poste pour ceux que ca intéresse.

La fonction devient :
"""
Function ValColonneCm(maplage As Range)
Application.Volatile
ValColonneCm = Format(maplage.ColumnWidth / 4.663, "0.000")
End Function
"""
et pour l'appel, ce n'est plus simplement "=ValColonneCm()" mais "=ValColonneCm(A1)" (A1 représente les coordonnées de la cellule où se trouve la fonction)

Jema
0
jemakaku Messages postés 11 Date d'inscription jeudi 22 novembre 2007 Statut Membre Dernière intervention 9 juin 2009 1
14 avril 2009 à 10:44
Yeahhhhhh, ta solution est plus élégante et plus facile à utiliser.

Tu es le vainqueur, question d'efficacité! ^^

Merci beaucoup! :-)

Jema
0