Calcul d'une formule uniquement en activant une certaine feuille
Bonjour,
Pour le travail, je suis entrain de créer un fichier excel de suivi de chantier. Dans lequel j'ai crée 2 fonctions.
L'objectif de la deuxième formule RECHERCHE_DATE est de sortir la date de réalisation du pieux dans la feuille CONTROLE en recherchant dans toutes les autres feuilles. Le problème que j'ai est que cette formule ralentit mon fichier excel (31 pages + 1000 lignes ou est renseigné la formule RECHERCHE DATE...) et donc je souhaiterai que cette formule se calcule uniquement quand je rentre sur la feuille CONTROLE et donc ne calcule rien et ne ralentit pas mon fichier quand je renseigne une valeur dans la feuille 2, 3, ...
j'ai essayé de mettre la fonction dans le module de la feuille CONTROLE mais sans succès, j'ai essayé la conditions worksheeet.activate mais sans succès non plus et je vous avoue je commence à secher..
J'ai essayé de chercher sur le forum mais je n'ai rien trouvé pouvant régler mon problème
Avez vous des solutions pour m'aider ?
Le fichier excel en pièce jointe est légèrement simplifié (il y a 31 feuilles au total pour 31j dans le mois)
Merci pour votre aide ! et bonne soirée
Bonjour,
Possiblement ceci (pas testé) :
Oui, il est possible de déclencher le calcul d'une formule uniquement en activant une certaine feuille. Cependant, il est important de noter qu'en Excel, les fonctions définies par l'utilisateur (UDF) ne peuvent pas directement détecter un changement d'état, comme l'activation d'une feuille. Pour cela, vous devrez combiner une UDF avec des événements de feuille (comme Workbook_SheetActivate).
Solution possible
- Utilisation d'un événement
Workbook_SheetActivate: Cet événement se déclenche chaque fois qu'une feuille est activée. Vous pouvez alors définir une variable globale ou écrire directement dans une cellule pour déclencher une action lorsque la feuille cible est activée. - Modification de la fonction UDF : Vous pouvez modifier votre fonction UDF pour qu'elle se comporte en fonction de la feuille activée, mais cette fonction ne sera recalculée que si elle est appelée ou si une dépendance change.
Exemple d'implémentation
Voici un exemple où l'événement Workbook_SheetActivate est utilisé pour recalculer une formule uniquement lorsque la feuille "FeuilleCible" est activée.
1. Déclaration d'une variable globale dans un module standard
vbaCopier le code<code>Public doitCalculer As Boolean2. Gestion de l'événement
Placez ce code dans le module ThisWorkbook :
vbaCopier le code<code>Private Sub Workbook_SheetActivate(ByVal Sh As Object)
If Sh.Name = "FeuilleCible" Then
doitCalculer = True
Else
doitCalculer = False
End If
End Sub3. Fonction UDF modifiée
Voici votre fonction modifiée pour dépendre de l'activation de la feuille :
vbaCopier le code<code>Function RECHERCHE_DATE(valeurRecherchee As Variant) As Variant
Dim ws As Worksheet
Dim resultat As Variant
Dim texte As String
' Initialisation du résultat par défaut
RECHERCHE_DATE = "-"
' Si la feuille n'est pas activée, ne pas exécuter la fonction
If Not doitCalculer Then Exit Function
' Boucle à travers chaque feuille du classeur
For Each ws In ThisWorkbook.Worksheets
' Sauter la feuille "CONTROLE"
If ws.Name <> "CONTROLE" Then
' Cherche la valeur dans la plage F18:F29
If Not IsError(Application.Match(valeurRecherchee, ws.Range("F18:F29"), 0)) Then
' Si trouvé, récupérer les 10 premiers caractères de T1
texte = Left(ws.Range("T1").Value, 10)
' Essayer de convertir en date
On Error Resume Next
resultat = CDate(texte)
On Error GoTo 0
' Vérifier si la conversion en date a réussi
If IsDate(resultat) Then
RECHERCHE_DATE = resultat
Else
RECHERCHE_DATE = "Problème de date"
End If
Exit Function
End If
End If
Next ws
End FunctionExplication :
- Variable globale
doitCalculer: Cette variable contrôle si la fonctionRECHERCHE_DATEdoit être calculée. Elle est définie àTrueuniquement lorsque la feuille "FeuilleCible" est activée. - Événement
Workbook_SheetActivate: Ce code vérifie quelle feuille est activée et définit la variabledoitCalculeren conséquence. - Fonction UDF : La fonction ne s'exécute que si
doitCalculerest vrai, c'est-à-dire uniquement lorsque la feuille cible est activée.
Limitation :
Ce type de solution fonctionne mieux pour des déclenchements dépendant de l'événement plutôt que pour des calculs en temps réel typiques des UDF classiques. Il est important de noter que cela ne forcera pas un recalcul automatique des cellules utilisant la fonction lorsque vous changez de feuille ; un autre événement, comme un changement de cellule, pourrait être nécessaire pour forcer le recalcul.
Bonjour à tous,
en fait tu veux un calcul sur demande.
Plus simplement supprime tes formules et appelle (bouton ou événement) ta fonction depuis un sub qui met à jour les cellules concernées en dur.
J'y verrai bien un bouton plutôt que l'activation de la feuille pour la totale, et un clic-droit sur une sélection de pieux pour ne calculer que le nécessaire sans être obligé de tout se retaper ce que tu sais bon.
eric
Bonsoir Alexurvivor, le Fil,
Par Fichier Options puis Formules. Sur Mode de calcul, choisir Manuel au lieu d'automatique.
Pour recalculer les formules appuyer sur la touche F9. Sinon renseigner les cellules avec les valeurs dans les feuilles souhaitées, aucun recalcul n'interviendra.