Excel VBA - Fonction utilisées comme formule excel

Bonjour,

J’ai créé une fonction vba que j’utilise directement dans certains onglets de mon classeur excel
(comme =Fonction(Param1, Param2, …)

Mon problème est le suivant:
=> si je copie ma feuille vers un nouveau classeur, la fonction n’est plus détectée et j’ai des erreurs de formule “#NOM?”

Existe-t-il un moyen de copier le module, ou mieux encore juste la fonction utilisée lors de la copie de l’onglet?

Par avance merci à celles et ceux qui sauront m’aiguiller
:jap::jap:
Note: je ne sais pas si mon message a plus ma place dans programmation ou dans logiciels

lors du collage veille à choisir collage avancée et choisi données et formules…

a+

Il faut effectivement que le module suive.

  • soit tu crées un module vide dans ton nouveau classeur, et tu fais un copier/coller de l’ancien
  • soit tu passes par les commandes “exporter” puis “importer” (clic droit sur le nom du module)

Ce message n’était pas conforme aux règles d’utilisation du nouveau forum :

RAS

pour préciser ma question, je souhaite quelque chose d’automatique
je sais que mes fonctions vba ne vont pas fonctionner si je copie l’onglet dans un nouveau fichier mais les utilisateurs du fichier non
c’est ça que je souhaite prendre en compte.

vyger => cf ma précision ci-dessous.
ce sont des fonctions vba que j’ai créé, elles ne fonctionnent plus lorsque l’onglet est copié vers un nouveau fichier

j’ai regardé du côté des macros complémentaires et des fichiers mais apparemment ça ne marche que pour le profil local???

Si tu regardes bien, tu as en plus de tes ongles un MODULE.
C’est là que sont les fonctions et c’est lui qu’il faut recopier
Le module est indépendant des feuilles (onglets) de manière à ce que les fonctions soient accessibles de l’ensemble du classeur

grande découverte!
lorsque j’ai créé mes fonctions, j’ai effectivement fait la procédure (créer un nouveau module, des fonctions, …)…:sarcastic::sarcastic:

avant d’aller plus loin, quelques rappels sur ce que je sais faire et ce que je ne sais pas faire:

ce que je sais faire:

  • je sais ce que c’est qu’un module (et de façon hors sujet également un module de clase) et comment l’utiliser
  • je sais créer mes fonctions et mes procédures, faire appel à des objets et tout le toutim

ce que je ne sais pas faire:

  • capturer l’évènement “Copier un onglet vers un autre fichier” pour lancer une procédure de copie du module
  • mon problème ne se situe qu’à un seul niveau: l’automatisation, et de façon plus général le côté transparent pour l’utilisateur

je ne veux en aucun cas que les utilisateurs que je vais avoir en face de moi, d’un niveau Excel limité aux fonctions de base (somme, moyenne et tutti quanti) ait à se préoccuper de quoi que ce soit

je recherche donc plus particulièrement:

  • à savoir s’il existe un évènement vba correspondant à l’action copie d’un onglet, chose que je n’ai pas trouvé (type Worksheet_Change() mais spécifique à la copie)
  • dans le cas où cet évènement n’existe pas s’il existe un substitut fonctionnel
  • et accessoirement la macro qui va me copier le module (mieux encore, la fonction spécifique) dans le nouveau fichier

as tu essaye avec:

SaveCopyAs

A+

Ce qui n’est écrit nulle part, mais que je crois comprendre au fil de tes messages, c’est que tu essaies de passer ton module d’un classeur à l’autre par programme et non en interactif …
Je ne pense pas que cette possibilité existe, heureusement pour l’intégrité des programmes.
Par contre, tu peux créer un classeur “vide” (au sens où toutes les feuilles seront vierges) comportant en module les fonctions qui t’intéressent.
Tu t’en sers comme modèle du classeur cible et tu copies dedans les feuilles qui t’intéressent comme tu le fais habituellement.

Autre solution : tu fais en sorte que le le classeur “client” ouvre également le classeur “vierge” évoqué plus haut. Les macros seront alors accessibles sans problème depuis tout le projet

Ce que le monsieur veut c’est simplement que les formules utilisateurs soient importées automatiquement lors qu’on copie colle une zone de données avec des formules utilisateurs; ce sans interaction autre que Copier, et Coller.

En gros, que ça crée les modules de fonctions associés dans le nouveau classeur automatiquement. Une sorte de réplication de formule, en outre.

Moi je connais pas Excel, mais ce genre de merdasse ça doit pas se faire facilement, même c’est ce qui est voulu dans l’absolu.
Edité le 01/12/2007 à 14:31

J’ai compris comme : Sans-Nom, et la fonction VBA : SaveCopyAs permet cela.

c’est exactement ça
mon fichier sera envoyé par mail, et non pas sur un réseau local, donc je coince sur le classeur cible

la fonction savecopyas fait une copie de sauvegarde d’un classeur, en quoi permet-elle de capturer l’action de copie de l’onglet par l’utilisateur

il faut vraiment se mettre dans la peau de l’utilisateur lambda pour comprendre ce que je veux faire:
=> je suis intéressé par une partie du classeur (l’onglet “Score”) dont je veux utiliser les données avec les formules actives dans un autre fichier
=> je sélectionne la feuille en question, je fais un click droit, je copie l’onglet vers un nouveau fichier
=> mes formules doivent continuer à fonctionner après avoir procédé de la sorte

=> je suis intéressé par une partie du classeur (l’onglet “Score”) dont je veux utiliser les données avec les formules actives dans un autre fichier
=> je sélectionne la feuille en question, je fais un click droit, je copie l’onglet vers un nouveau fichier
=> mes formules doivent continuer à fonctionner après avoir procédé de la sorte

je viens d’essayer à l’instant et je ne rencontre aucun problème.
en veillant à à renommer ma feuille par rapport au formules crées sur le classeur cible !!

Donc il faut bien passer par un modèle, mais sur ton micro, pas sur le micro client
1- tu crées le fichier “modèle” (1 feuille vierge, 1 module avec tes macros fonctions)
2- Dans ton fichier qui contient la feuille “Score” tu te crées une fonction copie qui effectue les actions suivantes :

  • copie du fichier “modèle” sous un autre nom par ex. par filecopy (on va l’appeler “client”)
  • ouverture du fichier “client”
  • copie de la feuille “scores” dans le fichier “client”
  • suppression de la feuille “feuil1” de “client”
  • sauvegarde et fermeture de “client”

3- Et tu n’as plus qu’à envoyer le dit fichier

as tu créé des fonctions dans un module vba?
ex:
function Fct(a as integer, b as integer) as integer
Fct = a+b
end function

dans ton exemple, si l’utilisateur copie l’onglet scores du fichier client, les fonctions vont bien continuer générer une erreur???
n’ayant pas le fichier sur lequel j’ai travaillé ici, ni même excel, je ne peux pas envoyer le fichier en question et la manip que je cherche à faire, faudra attendre lundi