Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.
  • Initiateur de la discussion Initiateur de la discussion vini
  • 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 !

V

vini

Guest
Bonjours, je suis débutant en VBA.
j'aimerais changer un procédure "change" en "calculate"...
Code:
Private Sub Worksheet_[COLOR="Red"]Change[/COLOR](ByVal Target As Range)
If Target.Address = "$A$9" Then 
If Target.Value = 1 Then
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
End If
End If

End Sub
ce code permet de lancer l'impression si la cellule A9 est = à 1,
mais la cellule est le resultat d'une formule, comment faire?
Merci pour vos aides🙂
 
Re : Calculate

bonjour,

tu changes :
Private Sub Worksheet_Change(ByVal Target As Range)
en
Private Sub Worksheet_SelectionCalculate(ByVal Target As Range)

mais attention tu as un double test :
1) il faut que la cellule A9 soit sélectionnée
2) il faut qu'elle contienne 1
c'est ton choix et tes raisons sont peu être justifiées, mais n'est ce pas trop restrictif ?

Bon courage
 
Re : Calculate

Bonjour José,

Je partage ton analyse, toutefois comme Vini voulait utiliser l'évènement "Calculate", je l'ai branché sur cette piste

Maintenant, je me demande si son code ne fonctionne pas , si ce n'est pas du aux tests réalisés

If Target.Address = "$A$9" Then
If Target.Value = 1 Then

Est-ce qu'un simple : If Range("A9").Value = 1 ne serait pas préférable ?

Cordialement
 
Re : Calculate

Bonjour

Pas vraiment d'accord avec vous les gars... si la cellule A9 contient une formule, la surveillance de cette cellule A9 dans l'évènement Change() ne déclenchera rien !

Par ailleurs, l'idée de notre ami vini d'utiliser l'évènement Calculate() me paraît un peu risquée... il risque fort de se retrouver avec une nouvelle impression à chaque recalcul de la feuille...

A mon avis, une façon de faire serait de "surveiller" dans l'évènement Change() les antécédents de la formule en question (une modification de ces antécédents signifie un changement de valeur de A9). Par exemple, si A9 = A1 + A2, on pourrait faire quelque chose comme ça :
Code:
[SIZE=2]Private [COLOR=navy]Sub[/COLOR] Worksheet_Change([COLOR=navy]ByVal[/COLOR] Target[COLOR=navy] As [/COLOR]Range)
      [COLOR=navy]If Not [/COLOR]Application.Intersect(Target, Range("[B]A1:A2[/B]"))[COLOR=navy] Is Nothing Then[/COLOR]
            [COLOR=navy]If [/COLOR]Range("A9").Value = 1 [COLOR=navy]Then[/COLOR]
                  ActiveWindow.[COLOR=navy]Select[/COLOR]edSheets.[COLOR=navy]Print[/COLOR]Out Copies:=1, Collate:=[COLOR=navy]True[/COLOR]
            [COLOR=navy]End If[/COLOR]
      [COLOR=navy]End If
End[/COLOR] Sub[/SIZE]
L'affaire se corse si les antécédents se trouvent sur une autre feuille...

Cordialement,
 
Re : Calculate

Bonjour Didier,

Merci pour cette mise au point
J'obtenais bien satisfaction avec le code suivant

Private Sub Worksheet_Change(ByVal Target As Range)
If Range("A9").Value = 1 Then
MsgBox ("OK")
End If
End Sub

Mais évidemment pour faire mes essais je me ne modifiais que les cellules antécédents A1 et A2, donc je ne m'étais pas aperçu que mon message était validé en cas de test positif quelle soit la cellule activée ... alors bonjour les dégats avec le code d'origine ( ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True)

Encore merci pour tes précieux conseils

Cordialement


Bonjour Robert

Tiens, tiens José, tu as retiré ton humour de là où tu l'avais placé ces jours derniers;
 
Re : Calculate

Re le fil, salut Robert,

Arf José, tu ne changeras jamais...🙂

Concernant la procédure ci-dessus, pour simplifier en cas de formule complexe, on peut également l'écrire comme ça :
Code:
[SIZE=2]Private [COLOR=navy]Sub[/COLOR] Worksheet_Change([COLOR=navy]ByVal[/COLOR] Target[COLOR=navy] As [/COLOR]Range)
      [COLOR=navy]If Not [/COLOR]Application.Intersect(Target, Range("A1").[B]Precedents[/B])[COLOR=navy] Is Nothing Then[/COLOR]
            [COLOR=navy]If [/COLOR]Range("A1").Value = 1 [COLOR=navy]Then[/COLOR]
                  ActiveWindow.[COLOR=navy]Select[/COLOR]edSheets.[COLOR=navy]Print[/COLOR]Out Copies:=1, Collate:=[COLOR=navy]True[/COLOR]
            [COLOR=navy]End If[/COLOR]
      [COLOR=navy]End If
End[/COLOR] Sub[/SIZE]
Mais ATTENTION, ça ne marchera que si les antécédents sont dans la même feuille !

Cordialement,
 
- 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
14
Affichages
484
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…