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

Private Sub Worksheet_Change

19 réponses
Avatar
CAT
Bonjour à tous,

J'ai mit un code dans La macro 'Private Sub Worksheet_Change' qui efface la
valeur que l'on vient de saisir dans une cellule si la cellule à droite de
cette dernière est vide. Ce code fonctionne très bien quand je saisie une
valeur manuellement dans la cellule mais ne fonctionne pas si une valeur est
validée par un clic de souris dans une liste de coix (liste déroulante).

Existe-il une façon pour contourner ce problème ?

Merci pour votre aide.

10 réponses

1 2
Avatar
CAT
Re bonjour,

Je pense que le problème vient du fait qu'il n'y a pas de changement de
cellule quand on valide un choix dans une liste déroulante.

Mais ça ne me trouve pas la solution pour autant :)

A+

"CAT" a écrit dans le message de news:
%
Bonjour à tous,

J'ai mit un code dans La macro 'Private Sub Worksheet_Change' qui efface
la valeur que l'on vient de saisir dans une cellule si la cellule à droite
de cette dernière est vide. Ce code fonctionne très bien quand je saisie
une valeur manuellement dans la cellule mais ne fonctionne pas si une
valeur est validée par un clic de souris dans une liste de coix (liste
déroulante).

Existe-il une façon pour contourner ce problème ?

Merci pour votre aide.






Avatar
FFO
Salut à toi

L'évennement "Private Sub Worksheet_Change" réagit à tout changement de la
valeur d'une cellule de la feuille concernée que celui-ci survienne suite à
une saisie ou un choix d'une liste déroulante
Quel est ton code ????
Avatar
CAT
Voici le code qui ne fonctionne pas avec la liste déroulante mais fonctionne
bien avec une saisie directe.

Private Sub Worksheet_Change(ByVal Target As Range)
If Cells(Target.Row, 5).Value = "" Then
Cells(Target.Row, Target.Column).Value = ""
End If
End Sub

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

Salut à toi

L'évennement "Private Sub Worksheet_Change" réagit à tout changement de la
valeur d'une cellule de la feuille concernée que celui-ci survienne suite
à
une saisie ou un choix d'une liste déroulante
Quel est ton code ????




Avatar
Xavier
Bonjour CAT,
j'ai testé chez moi et ça marche(aussi bien en saisie manuelle qu'avec
modification par liste de validation

j'ai mis le code suivant
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Offset(0, 1) = "" Then Target = ""
End Sub

Xavier


CAT a écrit :
Re bonjour,

Je pense que le problème vient du fait qu'il n'y a pas de changement de
cellule quand on valide un choix dans une liste déroulante.

Mais ça ne me trouve pas la solution pour autant :)

A+

"CAT" a écrit dans le message de news:
%
Bonjour à tous,

J'ai mit un code dans La macro 'Private Sub Worksheet_Change' qui efface
la valeur que l'on vient de saisir dans une cellule si la cellule à droite
de cette dernière est vide. Ce code fonctionne très bien quand je saisie
une valeur manuellement dans la cellule mais ne fonctionne pas si une
valeur est validée par un clic de souris dans une liste de coix (liste
déroulante).

Existe-il une façon pour contourner ce problème ?

Merci pour votre aide.










Avatar
Xavier
J'ai testé avec ton code et ça marche chez moi

bizarre

Xavier


CAT a écrit :
Voici le code qui ne fonctionne pas avec la liste déroulante mais fonctionne
bien avec une saisie directe.

Private Sub Worksheet_Change(ByVal Target As Range)
If Cells(Target.Row, 5).Value = "" Then
Cells(Target.Row, Target.Column).Value = ""
End If
End Sub

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

Salut à toi

L'évennement "Private Sub Worksheet_Change" réagit à tout changement de la
valeur d'une cellule de la feuille concernée que celui-ci survienne suite
à
une saisie ou un choix d'une liste déroulante
Quel est ton code ????








Avatar
FFO
Rebonjour à toi

Essaies plutôt comme ceci :

Private Sub Worksheet_Change(ByVal Target As Range)
If Cells(Target.Row, 5).Value = "" Then
Application.EnableEvents = False
Cells(Target.Row, Target.Column).Value = ""
Application.EnableEvents = True
End If
End Sub

Et dis moi !!!!!
Avatar
michdenis
Bonjour CAT,

De mémoire, la version Excel 2000 se comporte tel que tu le décris.

Pour solutionner ton problème, tu peux insérer une feuille que tu
masqueras avec un bout de code
Worksheets("Nom_De_La_Feuille").visible = xlveryhidden
La feuille ne sera pas accessible par l'usager via l'interface de la
feuille de calcul.
Dans cette feuille, tu choisis une cellule, et tu inscris la formule
suivante :
=MaFeuille!A1
MaFeuille -> nom de la feuille où se trouve ta liste de validation
A1 la cellule qui contient la liste de validation

Et tu insères ta procédure 'Private Sub Worksheet_Change'
dans le module feuille de la feuille que tu viens d'ajouter.
Ceci fera déclencher la procédure événementielle à chaque fois
que tu modifieras dans ta liste de validation.


Exemple ta liste de validation est en Feuil2, cellule D1
Le code dans le module feuille de ta feuil2

Cette procédure est appelée par la procédure événementielle
de la feuille que tu as ajoutée. Tu dois enlever le mot "Private"
à la ligne de déclaration de la procédure :
'----------------------------------
Sub Worksheet_Change(ByVal Target As Range)

Set Target = ActiveCell
Cells(Target.Row, Target.Column).Value = ""

End Sub
'----------------------------------

Dans la feuille que tu as ajoutée et masquée, ce code :
'-----------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = Range("A1").Address Then
Feuil2.Worksheet_Change Target
End If
End Sub
'-----------------------------------------------

Tout ceci n'est qu'un exemple, il peut être adapté selon la
nécessité de ton application.





"CAT" a écrit dans le message de groupe de discussion :
#
Bonjour à tous,

J'ai mit un code dans La macro 'Private Sub Worksheet_Change' qui efface la
valeur que l'on vient de saisir dans une cellule si la cellule à droite de
cette dernière est vide. Ce code fonctionne très bien quand je saisie une
valeur manuellement dans la cellule mais ne fonctionne pas si une valeur est
validée par un clic de souris dans une liste de coix (liste déroulante).

Existe-il une façon pour contourner ce problème ?

Merci pour votre aide.
Avatar
Caetera
"CAT" a écrit dans le message de news:

Voici le code qui ne fonctionne pas avec la liste déroulante mais fonctionne
bien avec une saisie directe.



Si le Worksheet_Change ne réagit pas au changement de valeur avec une liste de
validation c'est que tu utilises XL 97 !
Pour contourner, utiliser l'évènement Calculate d'une autre feuille (cachée par
ex.)

Etc
Avatar
CAT
Ca ne fonctionne pas mieux chez moi bien que la commande s'exécute.
J'ai mis un point d'arret et je vois bien que l'évènement se produit, mais
l'effacement de la cellule semble être innéficace alors qu'elle que la
commande est bien exécutée.


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

Rebonjour à toi

Essaies plutôt comme ceci :

Private Sub Worksheet_Change(ByVal Target As Range)
If Cells(Target.Row, 5).Value = "" Then
Application.EnableEvents = False
Cells(Target.Row, Target.Column).Value = ""
Application.EnableEvents = True
End If
End Sub

Et dis moi !!!!!



Avatar
CAT
Je suis avec Excel 2003, mais ça ne fonctionne pas chez moi.

"Caetera" <EtiennePloufCahé@wanadoo.fr> a écrit dans le message de news:

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

Voici le code qui ne fonctionne pas avec la liste déroulante mais
fonctionne bien avec une saisie directe.



Si le Worksheet_Change ne réagit pas au changement de valeur avec une
liste de validation c'est que tu utilises XL 97 !
Pour contourner, utiliser l'évènement Calculate d'une autre feuille
(cachée par ex.)

Etc



1 2