Appeler une fonction quand la cellule est modifiée

Salut à tous,

Je suis parti sur un nouveau projet de feuille de calcul, sur laquelle je voudrais appeler une function quand une cellule est modifiée, cette fonction permettant d'aller calculer une autre cellule.

Je vous ai mis un exemple rapide pour illustrer, j'ai une cellule A1 avec un nom, je compare le nom aux noms des onglets de mon classeur, si le nom existe alors ça lance le calcul dans la cellule B1. Le but est plus tard d'aller chercher des valeurs dans les onglets portant le nom pour calculer la case B1.

Pour la cellule à calculer pas de soucis, cela fonctionne. Le truc c'est que si je change le nom de ma cellule A1, pas de MAJ sauf si je retourne dans la case B1. J'ai donc essayé un Sub Worksheet_Change(ByVal Target As Range) pour appeler la fonction à chaque modification de la case A1, mais j'ai une erreur "Argument non facultatif.

J'ai encore beaucoup de mal avec les arguments et j'avoue que la je suis un peu perdu sur ce que je dois mettre, auriez-vous une idée pour m'aider ?

17classeur1.xlsm (20.71 Ko)

Bonjour Heelflip

Une fonction retourne une valeur, donc on l'appelle en remplissant une variable ou une cellule

Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Range("A:A"), Target) Is Nothing Then
    Range("B" & Target.Row).value = Calcul_Siège(Range("D" & Target.Row), Range("E" & Target.Row), Range("F" & Target.Row))
  End If
End Sub

A+

Bonsoir,

si vous avez un classeur qui ne demande pas trop de calcul (comme celui en exemple), vous pouvez simplement mettre en début de fonction : Application.Volatile, mais attention ! C'est un "gros mot" ! En effet, votre fonction sera alors recalculée à chaque changement de valeur sur les feuilles du classeurs, ce qui peut sur de gros projet ralentir l'ensemble du classeur avec les calculs à répétition.

Et comme l'a dit BrunoM45, une fonction renvoie une donnée, il faut donc un "contener" pour cette dernière, mais en plus et c'est le message d'erreur que vous avez eu, votre fonction attend des paramètres : Calcul_Siège(ByVal Ta As Double, ByVal Ts As Double, ByVal Te As Double), donc lors de son lancement, si c'est paramètres ne sont pas optionnels, il faut les lui communiquer, hors lorsque dans votre sub événementielle vous faites appelle à la fonction par :
Call Calcul_Siège, vous voyez bien qu'il n'y a pas les paramètres attendus, donc message d'erreur : "Argument non facultatif" (un argument = un paramètre dans mon message ! )

Pour moi vous aviez deux erreurs cumulées.

@ bientôt

LouReeD

Bonjour Bruno,

Ton code fait que si on clique dans la colonne A ça change la colonne B au niveau de la ligne ou on a cliqué c'est cela ?

Par contre il dit aussi quoi mettre dans la case, ce qui est gênant car ça veut dire que la case est vide avant. Moi j'avais mis la fonction dans la case afin que n'importe qui comprenne que la case fait appel à une macro.

Bonjour LouReeD,

Le soucis c'est que mon code va faire appel a énormément de calculs et de tables ou aller chercher des valeurs.

En gros ces tests ont pour but de réaliser une note de calcul, qui en fonction des températures et matières sélectionnées vont chercher des valeurs dans des tables pour déterminer des contraintes admissibles. J'ai pas trop mal avancé sur la recherche de valeurs mais j'ai du mal avec la fonction derrière et comme expliqué à Bruno, j'étais passé par un appel de fonction dans la case afin que les personnes qui vont contrôler mon fichier (Organismes notifiés) sachent que j'appelle une macro. Après si pas faisable je passerai tout en macro.

Finalement j'ai laissé tombé les valeurs dans les case et suis resté sur du VBA avec explication de l'origine de la valeur trouvée. Cela fonctionne bien désormais. Un grand merci à vous deux

Bonsoir,

merci pour vos remerciements !

@ bientôt

LouReeD

Rechercher des sujets similaires à "appeler fonction quand modifiee"