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

17xxx-jdc-mpx-ind0.xlsm (191.99 Ko)

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

  1. 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.
  2. 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 Boolean

2. 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 Sub

3. 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 Function

Explication :

  • Variable globale doitCalculer : Cette variable contrôle si la fonction RECHERCHE_DATE doit être calculée. Elle est définie à True uniquement lorsque la feuille "FeuilleCible" est activée.
  • Événement Workbook_SheetActivate : Ce code vérifie quelle feuille est activée et définit la variable doitCalculer en conséquence.
  • Fonction UDF : La fonction ne s'exécute que si doitCalculer est 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.

Rechercher des sujets similaires à "calcul formule uniquement activant certaine feuille"