Worksheet_Change actualisation de cellules

  • Initiateur de la discussion Initiateur de la discussion Nric
  • 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 !

N

Nric

Guest
Bonjour,

Je souhaite qu'un macro se lance automatiquement quand le contenu d'une cellule prend une certaine valeur. Pour ce faire, j'ai programmé ça:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

For n = 1 To 10

    If Not Application.Intersect(Target, Cells(n, 1)) Is Nothing Then

        If Cells(n, 1) = "NO" Then
            Cells(n, 2) = "12"
        Else
            Cells(n, 2) = "23"
        End If
    
    End If

Next n

End Sub

Jusque là ça semble marcher. Le problème que je rencontre est le suivant:

Le "NO" et le "YES" sont obtenus via une formule du genre IF(condition;"NO";"YES"). Conséquence: si la condition change et que la cellule passe de "NO" à "YES" et vice versa, le macro ne détecte pas le changement! Par contre si j'écris directement dans la cellule "YES" ou "NO" là ça marche sans problèmes!

C'est comme s'il n'arrive pas à actualiser le contenu d'une cellule obtenu via une formule.

Que puis-je faire pour remédier à cela? si toutefois c'est possible... 😉


P.S: l'exemple ci-dessus est simplement explicatif, le cas réel étant bcp plus complexe d'où mon intérêt à passer par des macros.
 
Re : Worksheet_Change actualisation de cellules

Bonsoir Nric,

Il doit bien y avoir une entrée dans une cellule qui fait passer le résultat de YES à NO. C'est cette cellule modifiée qui doit être Target et qu'il faut tester.

Sinon, on peut aussi utiliser l'évènement Calculate déclanchant la macro :

Private Sub Worksheet_Calculate()

A+
 
Re : Worksheet_Change actualisation de cellules

Hello,

Merci de vos réponses!

Alors oui je vois ce que vous voulez dire, le problème c'est qu'il y a plusieurs cellules qui servent de référence. Pour vous donner un exemple:

Code:
=SI(OU(I5="WW";I5="RET";F5="CLOSED";J5="YES");"NO";SI(OU(I5="";J5="");"";"YES"))

Donc ça m'arrangerai de pouvoir tester le résultat de ma formule.

Is it possible?
 
Re : Worksheet_Change actualisation de cellules

Re,

Quand une cellule contenant une formule se modifie, c'est que la formule est recalculée, et cela déclanche la macro Worksheet_Calculate comme je l'ai dit.

Dans cette macro, eh bien testez vos cellules.

A+
 
Re : Worksheet_Change actualisation de cellules

Je te remercie Job75!

Mais le macro me renvoie une erreur maintenant. Les lignes en gras ci-dessous semblent poser problème.

Si je les enlève ça marche mais j'ai le soucis que le macro se lance tout le temps. J'avais justement réussi à régler ce problème avec Worksheet_Change en rajoutant ces lignes. Y'a-t-il un moyen de faire de même avec Worsheet_calculate?


Code:
Private Sub Worksheet_Calculate([B]ByVal Target As Range[/B])

For n = 1 To 10


  [B]  If Not Application.Intersect(Target, Cells(n, 1)) Is Nothing Then
[/B]
        If Cells(n, 1) = "NO" Then
            Cells(n, 2) = "YES"
        Else
            Cells(n, 2) = "NO"
        End If
    
    End If

Next n

End Sub
 
Re : Worksheet_Change actualisation de cellules

Re,

Essayez de neutraliser l'action des évènements en écrivant en début de macro :

Application.EnableEvents = False

et impérativement en fin de macro :

Application.EnableEvents = True

A+
 
Re : Worksheet_Change actualisation de cellules

Re,
Code:
[I]If Not Application.Intersect(Target, Cells(n, 1)) Is Nothing Then[/I]
Ca aurait quelle utilité ?
Code:
Private Sub Worksheet_Calculate()
For n = 1 To 10
        If Cells(n, 1) = "NO" Then
            Cells(n, 2) = "12"
        Else
            Cells(n, 2) = "23"
        End If
Next n

End Sub
Si tu mettais une formule dans la colonne B qui teste le "NO" de la cellule adjacente en colonne A ?!
A+
kjin
 
Re : Worksheet_Change actualisation de cellules

Re bonsoir à vous 2,

et re-merci pour vos réponses! 🙂

Mais peut-être me suis-je mal exprimé.
En fait il faut que je fasse un scan d'une colonne qui contient soit "YES" soit "NO" pour une 100aine de lignes environ. Quand la cellule est vide rien ne doit se passer. Ensuite, après avoir rempli certains champs, dès que la cellule contient "YES" ou "NO", un macro se déclenche et effectue des opérations de mise en page relativement complexe.

Le problème:

Lorsque le macro scan chaque ligne, au lieu de me lancer le macro uniquement pour la ligne en cours de "scannage", il me relance tous les autres macros des autres lignes. En fait, il me réactualise tout au lieu d'actualiser seulement la ligne en question.

J'ai essayé de faire un truc avec Application.Calculation = xlCalculationManual et Application.Calculation = xlCalculationAutomatic mais sans succès.

En utilisant ce code dans Worksheet_change ça me réglait le problème
Code:
If Not Application.Intersect(Target, Cells(n, 1)) Is Nothing Then


Pas facile à expliquer!🙂 J'espère m'être fait comprendre!^^
 
Re : Worksheet_Change actualisation de cellules

Après réfléxion je crois que j aborde le problème de la mauvais façon. C'est ma boucle qui pose problème je pense.

En fait, il faudrait que je récupère la ligne de la cellule qui va se modifier en "YES" ou "NO".
Ensuite, il faut que le macro s'exécute uniquement pour la ligne en question. Actuellement, à cause de ma boucle, il me recalcule tout à chaque fois.


Code:
Private Sub Worksheet_Calculate()

Application.Calculation = xlCalculationManual

Dim n As Integer
n = 1

Do



If Cells(n, 1) = "YES" Then
    Cells(n, 2) = "ouiii"
    n = n + 1
ElseIf Cells(n, 1) = "NO" Then
    Cells(n, 2) = "nonnnn"
    n = n + 1
Else:
Cells(n, 2) = "rien"
n = n + 1
End If




   
Loop Until Cells(n, 1) = ""


Application.Calculation = xlCalculationAutomatic

End Sub

il faut que la valeur de n soit équivalente à la ligne de la cellule qui va varier en "YES", "NO".
Comment puis-je faire?
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
9
Affichages
508
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
Réponses
4
Affichages
522
Réponses
3
Affichages
644
Retour