Comment éviter qu'une fonction VBA d'un classeur soit lancée par un autre classeur ?

Danava

XLDnaute Nouveau
Bonjour,

Je réalise actuellement un récapitulatif de fiches clients.
J'ai une fiche client par onglet et un onglet récapitulatif qui reprend la totalité des informations de chaques onglets. Exemple en pièce jointe avec toto et maman... Il faut imaginer que j'ai en fait plus de 100 clients.

J'utilise deux fonctions VBA pour récupérer les noms des onglets en automatique dans l'onglet "Recap" :

Function nomOnglet(n)
Application.Volatile
nomOnglet = Sheets(n).Name
End Function

Function nbOnglets()
Application.Volatile
nbOnglets = Sheets.Count
End Function

Je me suis inspiré de codes VBA trouvé sur le net. Je compose, je n'ai pas le niveau pour créer...

Le problème :
Le fichier Excel "client.xlsm" fonctionne parfaitement lorsqu'il est ouvert seul mais il suffit que j'ouvre en parallèle un autre fichier Excel est que je rentre dans une cellule (en faisant F2 par exemple) pour que mon onglet "Recap" du fichier "client.xlsm" reprenne les noms des onglets du 2ème fichier Excel ouvert... Tout revient dans l'ordre lorsque je rentre dans une cellule du fichier "client.xlsm" mais cela ne fait pas très pro et le fichier est destiné à une trentaine d'utilisateurs qui n'auront pas la patience de faire ce type de manip...

En résumé, comment éviter qu'une fonction VBA d'un classeur soit lancée par un autre classeur ?
J'imagine qu'il s'agit d'une particularité de l'Application.Volatile mais serait-il possible que l'actualisation de l'onglet "Recap" soit dédié seulement au fichier Excel comprenant mes clients? L'objectif étant de pouvoir travailler sur d'autres fichiers Excel en même temps sans faire disparaître les informations de l'onglet "Recap" du fichier client...

J'ai essayé Application.Volatile (False) mais cela n'est pas satisfaisant car le fichier "client.xlsm" est sensé être "vivant", c'est à dire qu'il y aura des ajouts et suppressions de fiches clients (suppression et création de nouveaux onglets) qui doivent être pris en compte automatiquement par l'onglet "Recap"...

Merci encore pour vos conseils avisés.

Bien amicalement,
Danava
 

Pièces jointes

  • client.xlsm
    36.8 KB · Affichages: 42
  • client.xlsm
    36.8 KB · Affichages: 40
  • client.xlsm
    36.8 KB · Affichages: 39

Grand Chaman Excel

XLDnaute Impliqué
Re : Comment éviter qu'une fonction VBA d'un classeur soit lancée par un autre classe

Bonjour Danava et bienvenue sur le forum,

Sans avoir testé, peut-être ceci, afin de limiter ta fonction à ton classeur en spécifiant "ThisWorkbook"

VB:
Function nomOnglet(n)
Application.Volatile
nomOnglet = ThisWorkbook.Sheets(n).Name
End Function

Function nbOnglets()
Application.Volatile
nbOnglets = ThisWorkbook.Sheets.Count
End Function

A tester...
 

Danava

XLDnaute Nouveau
Re : Comment éviter qu'une fonction VBA d'un classeur soit lancée par un autre classe

Bonjour Grand Chaman Excel !

Ta solution fonctionne parfaitement !

Pour être certain, j'ai fait tous les tests possibles avec un deuxième fichier Excel ouvert et en réalisant simultanément des actions sur les deux fichiers Excel :
1- Insérer un onglet "fiche client" en le copiant d'un fichier Excel source vers le fichier cible "client.xlsm" + action sur fichier parallèle : OK
2- Créer un onglet "fiche client" directement dans le fichier cible "client.xlsm" + action sur fichier parallèle : OK
3- Insérer feuille (vierge) dans le fichier cible "client.xlsm" sans autre action : Non OK... mais dès qu'une action est réalisée dans le fichier cible "client.xlsm" (et seulement dans ce fichier) : OK !

Je me cassais réellement les dents sur cet aspect donc un GRAND MERCI Grand Chaman Excel !

PS : c'est sûrement le fruit du hasard mais je suis en train de lire actuellement une anthologie du chamanisme... ;) !
 

Discussions similaires

Statistiques des forums

Discussions
314 611
Messages
2 111 148
Membres
111 051
dernier inscrit
MANUREVALAND