Function et ouverture fichier

Salut à tous,

Je reviens vers vous car j'ai encore un soucis VBA :

J'ai cette fonction personnalisée dans un module d'un 1er classeur :

Function rechVFiltre(champRech As Range, valeur, ChampRetour)
  For i = 1 To champRech.Count
     If Not champRech(i).EntireRow.Hidden Then
        If champRech(i) = valeur Then rechVFiltre = ChampRetour(i): Exit Function
     End If
  Next i
  rechVFiltre = ""
End Function

Et cette macro dans une feuille de ce même classeur qui me permet d'ouvrir un second classeur "********.xls

Sub BDD()
    Application.DisplayAlerts = False
    Application.Workbooks.Open "********.xls", UpdateLinks:=0, _
    ReadOnly:=True
End Sub

Lorsque j'active ma macro, à l'ouverture du second classeur, la macro switch automatiquement sur le module 2 et l'execute ce que je ne souhaite pas ... Je ne comprend pas pourquoi, nulle par dans ma macro je fait appelle au Module2 contenant ma fonction et la fonction personnalisée n'est utilisée que dans mon 1er classeur ...

Une idée ?

Est-il possible de n'activer une fonction personnalisée que sur demande ?

J'espère ne pas avoir été trop brouillon.

PS : Désolé si le code ne vous plaît pas, je débute et essaie de progresser comme je peux

Merci d'avance !

Bonjour,

Ton propos me paraît un peu obscur... Tu parles de fonction personnalisée : on appelle ainsi une procédure Function VBA conçue pour être utilisée en feuille de calcul Excel, à l'instar des fonctions Excel.

Il faut donc savoir où et comment est alors utilisée cette fonction.

Si elle intervient, c'est qu'elle est amenée à se recalculer dans le contexte.

Il faut savoir aussi si des procédures l'utilisent...

On manque d'informations donc !

Bonjour MFerrand !

Tout à fait cette fonction est utilisée sur une feuille de mon 1er classeur (cf pièce jointe).

Admettons que je créé un fichier vierge Test.xls sur mon bureau, la macro m'ouvre bien mon fichier, puis bascule directement sur le module 2, sauf que je ne le souhaite pas car la macro est censé accomplir d'autre tâche (non détaillée dans le code du classeur joint).

En fait c'est le basculement auto vers le module immédiatement après ouverture du fichier (et même pas après End Sub) qui m'intrigue, je pensais que la procédure Function une fois déclarée fonctionnait également comme une fonction rentrée dans Excel.

J'espère que c'est plus clair avec un fichier test

Pour résumé en pas à pas détaillé :

  • J'active ma Sub BDD
  • Le second classeur s'ouvre en lecture seule
  • Puis la Function RechVFiltre définie dans le module du 1er classeur s'active alors que la Sub BDD n'est pas terminée

Ce que j'aimerais :

  • J'active ma Sub BDD
  • La Sub BDD s'execute entièrement avant de passer au module Function qui n'a aucun lien avec la Sub BDD
8classeur1.xlsm (17.22 Ko)

Désolé, mais ton classeur n'apporte rien de plus !

La fonction est en erreur, utilisant des noms de champs absents...

La proc. BDD (qui ne devrait pas être là où elle est, mais c'est une autre question...), lorsqu'elle est exécutée, ouvre un classeur, et une fois le classeur ouvert est terminée. En contradiction avec ton propos sur la suite qui ne s'exécuterait pas...

Bon voilà un classeur qui ressemble un peu plus sur quoi je travaille ^^

Le classeur .xlsm contient ma macro BDD en module1 :

  • Ouverture du fichier Classeur1.xlsx -> OK
  • Et là pendant l'ouverture il m'active le module2 avec la fonction RechVFiltre, c'est cette étape que je ne comprend pas, que fait Excel durant cette étape ? J'aurai aimé la faire sauter mais impossible ..
  • Et enfin il retourne sur le module1 pour terminer la macro BDD et afficher toutes les valeurs (plus d'autres action par la suite mais j'ai pas présent dans la macro le petit bout de texte étant suffisant pour faire apparaître mon soucis).

- Pour info la fonction RechVFiltre est utilisée dans la feuille A faire du classeur1.xlsm dans la colonne "A faire avant le"

Ca devrait être plus détaillé maintenant ?

Et pourquoi ne conseilles-tu pas de mettre la procédure dans la feuille ? Ca m'intéresse pour ma culture gé.

Merciiii !

Apparemment, elle se déclenche deux fois, à l'ouverture du classeur, puis à la fin...

(recalcul !)

Essaie de mettre en tête de la fonction :

    Application.Volatile False

Il semble qu'elle ne se déclenche plus dans ce cas.

J(avais essayé en supprimant carrément cette ligne de code mais j'ai pas pensé à changer la valeur de la propriété

Comment perdre plusieurs heures et des neurones pour une simple histoire de vrai/faux.

Comme à ton habitude toujours au top MFerrand !

Et du coup tu n'as pas répondu à ma dernière question : Pourquoi ne conseilles-tu pas que les procédures soient placées directement dans les codes des feuilles ? Les modules sont-ils mieux ? J'y connais vraiment rien en optimisation VBA ...

Rechercher des sujets similaires à "function ouverture fichier"