Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Target.value="" & déclenchement de macro

8 réponses
Avatar
ManBas
Bonsoir à tous,

Je déclenche une macro qui compte des ajouts ou des annulations, selon la
valeur de la cellule.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 8 Then
If Target.Value = "" Then
If MsgBox("S'agit-il d'une annulation?") = vbYes Then
Range("AB10").Value = Range("AB10").Value - 1
Else
Range("AB10").Value = Range("AB10").Value
End If
Else
Range("AB10").Value = Range("AB10").Value + 1
End If

J'ai deux problemes:
-cette macro se "re-déclenche" à la fermeture du classeur s'il y a
effectivement des cellules vides: le décompte devient fastidieux pour
l'utilisateur et donne alors des résultats faux car déjà comptabilisés.
- cette macro ne "voit pas" les cellules dont le contenu est " " ou " " ou
" " (etc, etc,) dans le cas où l'utilisateur a utilisé la souris et la
touche espace pour effacer le contenu de la cellule.

Puis-je éviter le 2eme décompte à la fermeture?
Quelle autre formulation puis-je utiliser pour détecter les cellules qui
contiennent des "espaces vides"?

Merci +++ de vos suggestions

8 réponses

Avatar
LSteph
Bonsoir,

Qu'y a-t-il dans ThisWorkbook?

...

Bonsoir à tous,

Je déclenche une macro qui compte des ajouts ou des annulations, selon la
valeur de la cellule.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 8 Then
If Target.Value = "" Then
If MsgBox("S'agit-il d'une annulation?") = vbYes Then
Range("AB10").Value = Range("AB10").Value - 1
Else
Range("AB10").Value = Range("AB10").Value
End If
Else
Range("AB10").Value = Range("AB10").Value + 1
End If

J'ai deux problemes:
-cette macro se "re-déclenche" à la fermeture du classeur s'il y a
effectivement des cellules vides: le décompte devient fastidieux pour
l'utilisateur et donne alors des résultats faux car déjà comptabilisés.
- cette macro ne "voit pas" les cellules dont le contenu est " " ou " " ou
" " (etc, etc,) dans le cas où l'utilisateur a utilisé la souris et la
touche espace pour effacer le contenu de la cellule.

Puis-je éviter le 2eme décompte à la fermeture?
Quelle autre formulation puis-je utiliser pour détecter les cellules qui
contiennent des "espaces vides"?

Merci +++ de vos suggestions




Avatar
Daniel
Bonsoir.
Je n'ai pas bien compris pourquoi l'évènement se déclanchait à la fermeture
du classeur.
Ajoute application.enableeventsúlse en début de macro et
application.enableevents=true à la fin.
Pour les espaces :
If trim(Target.Value) = "" Then
au lieu de :
If Target.Value = "" Then
Cordialement.
Daniel
"ManBas" a écrit dans le message de news:

Bonsoir à tous,

Je déclenche une macro qui compte des ajouts ou des annulations, selon la
valeur de la cellule.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 8 Then
If Target.Value = "" Then
If MsgBox("S'agit-il d'une annulation?") = vbYes Then
Range("AB10").Value = Range("AB10").Value - 1
Else
Range("AB10").Value = Range("AB10").Value
End If
Else
Range("AB10").Value = Range("AB10").Value + 1
End If

J'ai deux problemes:
-cette macro se "re-déclenche" à la fermeture du classeur s'il y a
effectivement des cellules vides: le décompte devient fastidieux pour
l'utilisateur et donne alors des résultats faux car déjà comptabilisés.
- cette macro ne "voit pas" les cellules dont le contenu est " " ou " "
ou " " (etc, etc,) dans le cas où l'utilisateur a utilisé la souris
et la touche espace pour effacer le contenu de la cellule.

Puis-je éviter le 2eme décompte à la fermeture?
Quelle autre formulation puis-je utiliser pour détecter les cellules qui
contiennent des "espaces vides"?

Merci +++ de vos suggestions



Avatar
Jacky
Bonsoir,

J'ai pas bien saisie la nécessité de cette macro événementielle

En AB10
=NBVAL(H:H)

Selection de la colonne H
Donnée validation
Autoriser==> personnalisé
Formule==> =GAUCHE(H1;1)<>" "
--
Salutations
JJ



"ManBas" a écrit dans le message de news:

Bonsoir à tous,

Je déclenche une macro qui compte des ajouts ou des annulations, selon la
valeur de la cellule.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 8 Then
If Target.Value = "" Then
If MsgBox("S'agit-il d'une annulation?") = vbYes Then
Range("AB10").Value = Range("AB10").Value - 1
Else
Range("AB10").Value = Range("AB10").Value
End If
Else
Range("AB10").Value = Range("AB10").Value + 1
End If

J'ai deux problemes:
-cette macro se "re-déclenche" à la fermeture du classeur s'il y a
effectivement des cellules vides: le décompte devient fastidieux pour
l'utilisateur et donne alors des résultats faux car déjà comptabilisés.
- cette macro ne "voit pas" les cellules dont le contenu est " " ou " "
ou " " (etc, etc,) dans le cas où l'utilisateur a utilisé la souris
et la touche espace pour effacer le contenu de la cellule.

Puis-je éviter le 2eme décompte à la fermeture?
Quelle autre formulation puis-je utiliser pour détecter les cellules qui
contiennent des "espaces vides"?

Merci +++ de vos suggestions



Avatar
LSteph
re,

(pour le moment pas de retour sur les questions et suggestions...)
A l'aveugle, je complète
Si dans Thisworkbook, il y a un beforesave qui intervient, il faudrait
probablement mettre un application.enableevents = false dedans


@+

lSteph
Avatar
Jacky
Re.....
A l'aveugle, je complète
Non Steph, .....pas avec la canne blanche;o))

Ce Msgbox écrit de cette façon
MsgBox("S'agit-il d'une annulation?") = vbYes
ne contrôle pas de vbYes


--
Salutations
JJ



"LSteph" a écrit dans le message de news:
%


re,

(pour le moment pas de retour sur les questions et suggestions...)
A l'aveugle, je complète
Si dans Thisworkbook, il y a un beforesave qui intervient, il faudrait
probablement mettre un application.enableevents = false dedans


@+

lSteph



Avatar
ManBas
Bonjour Daniel,
Pardon de n'avoir pas été là pour ta réponse hier soir.
Merci beaucoup pour cet apport.
Evidemment ça marche.
A bientôt

"Daniel" a écrit dans le message de news:

Bonsoir.
Je n'ai pas bien compris pourquoi l'évènement se déclanchait à la
fermeture du classeur.
Ajoute application.enableeventsúlse en début de macro et
application.enableevents=true à la fin.
Pour les espaces :
If trim(Target.Value) = "" Then
au lieu de :
If Target.Value = "" Then
Cordialement.
Daniel
"ManBas" a écrit dans le message de news:

Bonsoir à tous,

Je déclenche une macro qui compte des ajouts ou des annulations, selon la
valeur de la cellule.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 8 Then
If Target.Value = "" Then
If MsgBox("S'agit-il d'une annulation?") = vbYes Then
Range("AB10").Value = Range("AB10").Value - 1
Else
Range("AB10").Value = Range("AB10").Value
End If
Else
Range("AB10").Value = Range("AB10").Value + 1
End If

J'ai deux problemes:
-cette macro se "re-déclenche" à la fermeture du classeur s'il y a
effectivement des cellules vides: le décompte devient fastidieux pour
l'utilisateur et donne alors des résultats faux car déjà comptabilisés.
- cette macro ne "voit pas" les cellules dont le contenu est " " ou " "
ou " " (etc, etc,) dans le cas où l'utilisateur a utilisé la souris
et la touche espace pour effacer le contenu de la cellule.

Puis-je éviter le 2eme décompte à la fermeture?
Quelle autre formulation puis-je utiliser pour détecter les cellules qui
contiennent des "espaces vides"?

Merci +++ de vos suggestions








Avatar
LSteph
Un peu à côté de la plaque Jacky...
la prochaine fois fais comme moi!

;o))

Re.....
A l'aveugle, je complète
Non Steph, .....pas avec la canne blanche;o))

Ce Msgbox écrit de cette façon
MsgBox("S'agit-il d'une annulation?") = vbYes
ne contrôle pas de vbYes






Avatar
ManBas
Merci de ta réponse Jacky.
C'est vrai qu'il y a une erreur de transcription.

"Jacky" a écrit dans le message de news:
eOdAT$
Re.....
A l'aveugle, je complète
Non Steph, .....pas avec la canne blanche;o))

Ce Msgbox écrit de cette façon
MsgBox("S'agit-il d'une annulation?") = vbYes
ne contrôle pas de vbYes


--
Salutations
JJ



"LSteph" a écrit dans le message de news:
%


re,

(pour le moment pas de retour sur les questions et suggestions...)
A l'aveugle, je complète
Si dans Thisworkbook, il y a un beforesave qui intervient, il faudrait
probablement mettre un application.enableevents = false dedans


@+

lSteph