Acutalisation du résultat d'une fonction sous vba si on change la valeur d'1 cellule

  • Initiateur de la discussion Initiateur de la discussion MaximeC
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

MaximeC

XLDnaute Junior
Bonjour,

Je travaille sur un tableau de données, qui s'actualise manuellement à différents instant t.

J'ai réaliser une fonction, qui parcours une plage de cellules, et qui permet de calculer un nombre d'heures, en fonction du contenu de la cellule voisine. (Fichier 1)

Lorsque j'appelle cette fonction, j'obtien le résultat voulu. Cependant, si je modifie la valeur d'une des cellules "heures", la fonction ne s'actualise pas (Fichier 2). Il faut pour cela que je clique sur la cellule ou j'ai rentré la fonction (dans le fichier 2, cellule P50) et que je valide de nouveau la fonction. Est-il possible qu'elle s'actualise automatiquement sans que j'ai à utiliser cette manipulation? Avez vous une idée?

Voici ma fonction et les documents :

Code:
Private Function HTGC()

'Déclaration des variables

Dim i As Long
Dim j As Long
Dim heures As Long

'Programme de la fonction

heures = 0
For j = 2 To 25
    For i = 8 To 47
        If Cells(i, j).Value = "TGC" Then
            j = j + 1
            heures = heures + Cells(i, j).Value
            j = j - 1
        End If
    Next i
Next j

HTGC = heures
        
End Function

Merci,

Maxime
 
Re : Acutalisation du résultat d'une fonction sous vba si on change la valeur d'1 ce

Bonjour,

Transforme ta fonction comme ceci :

Et dans la cellule contenant la fonction suivante, tu écris : =HTGC(B7:Y46)
Tu peux adapter B7:Y46 pour la plage de cellules désirées.

'---------------------------------------------------
VB:
Private Function HTGC(Rg As Range)
'Déclaration des variables
Dim i As Long
Dim j As Long
Dim heures As Long

'Programme de la fonction
heures = 0
For j = Rg(, 1).Column To Rg.Columns.Count
    For i = Rg(1).Row To Rg.Rows.Count
        If Cells(i, j).Value = "TGC" Then
            j = j + 1
            heures = heures + Cells(i, j).Value
            j = j - 1
        End If
    Next i
Next j
HTGC = heures        
End Function
'---------------------------------------------------
 
Re : Acutalisation du résultat d'une fonction sous vba si on change la valeur d'1 ce

Bonjour Maxime,

Oui, c'est possible, mais 2 méthodes possibles
La 1ère, c'est de rendre ta fonction volatile, ça veut dire que quel que soit la cellule modifiée dans un classeur ouvert, elle se recalculera
Si tu l'utilise à plein d'endroits, ça peut s'avérer assez lourd en calcul
Sinon, c'est très simple il suffit d'ajouter "Application.Volatile" au début du code de ta fonction

La 2ème possibilité, c'est de passer en paramètre d'entrée de ta fonction les cellules avec lesquelles elle devra travailler, auquel cas elle se recalculera seulement si une des cellules concernée change de valeur, mais ça ça demanderait de modifier ta fonction un peu plus
Dans ton cas particulier, peut-être que la solution 1 est envisageable mais la deuxième est indéniablement plus propre, à toi de voir

Edit : Bonjour MichD 🙂
 
Re : Acutalisation du résultat d'une fonction sous vba si on change la valeur d'1 ce

Bonjour MichD et tototiti2008,

J'ai utilisé la fonction que MichD m'a proposé... sans pour autant obtenir le résultat escompté .. J'obtient le résultat "58" au lieu de 143.
J'ai remarqué que le programme fonction uniquement sur les 4 premières lignes grisées, y compris l'actualisation.
Je pense donc qu'une petite erreur a du être commise dans les boucle for, nan?

A quoi correspond le: "Rg.Columns.Count"? Rg pour plage, columns pour colonnes, mais Count?

Merci
 
Dernière édition:
Re : Acutalisation du résultat d'une fonction sous vba si on change la valeur d'1 ce

En remplaçant "Rg.Columns.Count" par 25 et "Rg.Rows.Count" par 47, ça fonctionne! Avais-tu, MichD, un quelquconque objectif (plus rapide, ne traite que les cellules pleines ..) quant à l'utilisation de ses instructions?
 
Re : Acutalisation du résultat d'une fonction sous vba si on change la valeur d'1 ce

Bonjour à tous,

essaye peut-être de modifier comme ça

For j = 1 To Rg.Columns.Count
For i = 1 To Rg.Rows.Count
If Rg.Cells(i, j).Value = "TGC" Then
heures = heures + Rg.Cells(i, j+1).Value
End If
Next i
Next j

Pas testé 🙄

Edit : Count ça veut dire Compte, donc le nombre colonnes et de lignes de la plage concernée
 
Re : Acutalisation du résultat d'une fonction sous vba si on change la valeur d'1 ce

Je viens de tester ça ne marche pas non plus, mais entre temps j'ai trouvé une solution, qui certes n'est pas propre au niveau du code, mais qui fonctionne. J'ai fait un mix de mon code et de celui de MichD. en faite j'ai simplement rajouté le "(Rg as Range)" dans l'intitulé de ma fonction.

Code:
Private Function HTGC(Rg As Range)
'Déclaration des variables
Dim i As Long
Dim j As Long
Dim heures As Long

'Programme de la fonction
heures = 0
For j = 2 To 25
    For i = 8 To 47
        If Cells(i, j).Value = "TGC" Then
            j = j + 1
            heures = heures + Cells(i, j).Value
            j = j - 1
        End If
    Next i
Next j
HTGC = heures
End Function
 
Re : Acutalisation du résultat d'une fonction sous vba si on change la valeur d'1 ce

Re,

pourtant moi, en testant, ça marche....

VB:
Private Function HTGC(Rg As Range)
'Déclaration des variables
Dim i As Long
Dim j As Long
Dim heures As Long

'Programme de la fonction
heures = 0
For j = 1 To Rg.Columns.Count
    For i = 1 To Rg.Rows.Count
        If Rg.Cells(i, j).Value = "TGC" Then
            heures = heures + Rg.Cells(i, j + 1).Value
        End If
    Next i
Next j
HTGC = heures
End Function
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
177
  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
649
Réponses
3
Affichages
582
Réponses
3
Affichages
665
Retour