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

refuser suppression valeur

32 réponses
Avatar
j-pascal
Bonjour,

Problème :

Dans la colonne A, j'ai des noms.

Est-il possible d'empêcher la suppression du nom (et d'avoir une bulle pour
informer l'utilisateur !) si les colonnes B et C (ie) de la ligne
correspondante contiennent des valeurs non nulles ?

Merci d'avance pour vos lumières ...

--
Cordialement @+
JP

10 réponses

1 2 3 4
Avatar
JB
Correction du message 'Sup interdit':
http://boisgontierjacques.free.fr/fichiers/Evenementiel/WorkSheetChangeMemo riseShape.xls

JB

On 26 juil, 14:42, "j-pascal" wrote:
Bonjour,

Magnifique !

Mais si je reprends ton fichier joint (et sauf erreur de ma part),
si je tape "toto" en A15
si je tape "v" (ie) en B15
en C15, jai le Shape "Sup Interdit" (bien que toute saisie ou toute
suppression doit être possible au niveau des colonnes B et C !). Ce mes sage
n'empêche pas la saisie ni la suppression des valeur mais il peut indui re en
erreur.

(Pour info)
Dans mon fichier, la target est en colonne C, les saisies sont faites sur
les Colonnes P à AT et les colonnes évaluées (pour supprimer ou non les
valeurs de "C") sont F à M.

J'ai inséré le code pour l'affichage de mon "bouton", mais malgré p lusieurs
essais, l'affichage ne se réinitialise pas !

Voici le code pour le Tri lancé à partir de ce bouton :

'-------------(début code Tri) ----------------------------

Sub TriPlageAtrier()

If Range("AX6") = "DOUBLON" Then
MsgBox "Veuillez éliminer le(s) doublon(s) avant d'effectuer le tri
!"
Exit Sub
Else
If Range("AW6") <> "TRI" Then
MsgBox "La liste est déjà triée !"
Exit Sub
Else
Range("PlageAtrier").Select 'B422:AZ801

Selection.Sort Key1:=Range("C9"), Order1:=xlAscending,
Header:=xlGuess _
, OrderCustom:=1, MatchCase:úlse, Orientation:=xlTop ToBottom,
_
DataOption1:=xlSortNormal
Range("C9").Select
Selection.End(xlDown).offset(1, 0).Select
End If
End If
End Sub

'----------------------(fin code Tri)---------------------------

Tout le code de ma page :

' ---------------------(début code Feuil)----------------------
'Option Explicit
Dim reponse As Variant
'Private ModifCol_A

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As
Boolean)
If Target.Count = 1 Then
With Target
If .NoteText = "" Then
reponse = InputBox("Commentaire?")
If reponse <> "" Then
'.AddComment reponse & Chr(10) & "[" & Hour(Now) &
":" & Minute(Now) & "]"
'.AddComment reponse & Chr(10) & "[" & dd / mm /
yy(Now) & " - " & Hour(Now) & ":" & Minute(Now) & "]"
.AddComment reponse & Chr(10) & "[" & Now() & "]"
With .Comment.Shape.OLEFormat.Object.Font
.Name = "Tverdana"
.Size = 8
.FontStyle = "Normal"
.ColorIndex = 3
End With
.Comment.Visible = True
.Comment.Shape.Select
Selection.AutoSize = True
.Comment.Visible = False
End If
'Else
'.Comment.Delete
End If
End With
End If
Cancel = True
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [c9:c250]) Is Nothing And Target.Count = 1 Th en
Application.EnableEvents = False
'If Cells(Target.Row, 2) <> "" Or Cells(Target.Row, 3) <> "" Then
If Application.Sum(Range("f" & Target.Row & ":" & "m" & Target.Row)) >
0 Then
Target = [mémo]
MsgBox "Interdit"
End If
End If
Application.EnableEvents = True

'----------------- ajout ---------------

If Range("D6") = " >>>" Then
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = Range("AW3")
Range("C9").Activate
Else
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = Range("AW3")
Range("C9").Activate
End If

' If Range("D6") = " >>>" Then
' ActiveSheet.Shapes("Button 98").Select
' Selection.Characters.Text = "TRIER ici"
' Range("D6").Select
' Else
' ActiveSheet.Shapes("Button 98").Select
' Selection.Characters.Text = "Liste Ok"
' End If

'----------------- fin ajout -----------------

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 3 And Target.Count = 1 Then
ActiveWorkbook.Names.Add Name:="mémo", RefersToR1C1:="=" & Ch r(34) &
Target.Value & Chr(34)
End If
If Application.Sum(Range("f" & Target.Row & ":" & "m" & Target.Row)) > 0
Then
On Error Resume Next
Shapes("monshape").Visible = True
If Err <> 0 Then creeShape: Target.Select
Shapes("monshape").Left = ActiveCell.Left
Shapes("monshape").Top = ActiveCell.Top + ActiveCell.Height + 3
Shapes("monshape").TextFrame.Characters.Text = "Sup interdit"
Else
On Error Resume Next
Shapes("monshape").Visible = False
End If
End Sub

Sub creeShape()
Shapes.AddTextbox(msoTextOrientationHorizontal, 1, 1, 50, 10).Select
Selection.Font.Name = "Verdana"
Selection.Font.Size = 7
Selection.Name = "monshape"
Shapes("monshape").Left = ActiveCell.Left
Shapes("monshape").Top = ActiveCell.Top + ActiveCell.Height + 3
End Sub

'--------------------(fin code Feuil)------------------------------

Cordialement,

JP

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

Bonjour,

Avec message avertissement:

http://boisgontierjacques.free.fr/fichiers/Evenementiel/WorkSheetChan...

On 24 juil, 13:55, "j-pascal" wrote:



Bonjour,

Problème :

Dans la colonne A, j'ai des noms.

Est-il possible d'empêcher la suppression du nom (et d'avoir une bulle
pour
informer l'utilisateur !) si les colonnes B et C (ie) de la ligne
correspondante contiennent des valeurs non nulles ?

Merci d'avance pour vos lumières ...

--
Cordialement @+
JP- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -



Avatar
j-pascal
Re,

C'est magnifique !

Merci ++

JP

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

Correction du message 'Sup interdit':
http://boisgontierjacques.free.fr/fichiers/Evenementiel/WorkSheetChangeMemoriseShape.xls

JB

On 26 juil, 14:42, "j-pascal" wrote:
Bonjour,

Magnifique !

Mais si je reprends ton fichier joint (et sauf erreur de ma part),
si je tape "toto" en A15
si je tape "v" (ie) en B15
en C15, jai le Shape "Sup Interdit" (bien que toute saisie ou toute
suppression doit être possible au niveau des colonnes B et C !). Ce
message
n'empêche pas la saisie ni la suppression des valeur mais il peut induire
en
erreur.

(Pour info)
Dans mon fichier, la target est en colonne C, les saisies sont faites sur
les Colonnes P à AT et les colonnes évaluées (pour supprimer ou non les
valeurs de "C") sont F à M.

J'ai inséré le code pour l'affichage de mon "bouton", mais malgré
plusieurs
essais, l'affichage ne se réinitialise pas !

Voici le code pour le Tri lancé à partir de ce bouton :

'-------------(début code Tri) ----------------------------

Sub TriPlageAtrier()

If Range("AX6") = "DOUBLON" Then
MsgBox "Veuillez éliminer le(s) doublon(s) avant d'effectuer le
tri
!"
Exit Sub
Else
If Range("AW6") <> "TRI" Then
MsgBox "La liste est déjà triée !"
Exit Sub
Else
Range("PlageAtrier").Select 'B422:AZ801

Selection.Sort Key1:=Range("C9"), Order1:=xlAscending,
Header:=xlGuess _
, OrderCustom:=1, MatchCase:úlse,
Orientation:=xlTopToBottom,
_
DataOption1:=xlSortNormal
Range("C9").Select
Selection.End(xlDown).offset(1, 0).Select
End If
End If
End Sub

'----------------------(fin code Tri)---------------------------

Tout le code de ma page :

' ---------------------(début code Feuil)----------------------
'Option Explicit
Dim reponse As Variant
'Private ModifCol_A

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As
Boolean)
If Target.Count = 1 Then
With Target
If .NoteText = "" Then
reponse = InputBox("Commentaire?")
If reponse <> "" Then
'.AddComment reponse & Chr(10) & "[" & Hour(Now) &
":" & Minute(Now) & "]"
'.AddComment reponse & Chr(10) & "[" & dd / mm /
yy(Now) & " - " & Hour(Now) & ":" & Minute(Now) & "]"
.AddComment reponse & Chr(10) & "[" & Now() & "]"
With .Comment.Shape.OLEFormat.Object.Font
.Name = "Tverdana"
.Size = 8
.FontStyle = "Normal"
.ColorIndex = 3
End With
.Comment.Visible = True
.Comment.Shape.Select
Selection.AutoSize = True
.Comment.Visible = False
End If
'Else
'.Comment.Delete
End If
End With
End If
Cancel = True
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [c9:c250]) Is Nothing And Target.Count = 1 Then
Application.EnableEvents = False
'If Cells(Target.Row, 2) <> "" Or Cells(Target.Row, 3) <> "" Then
If Application.Sum(Range("f" & Target.Row & ":" & "m" & Target.Row))

0 Then

Target = [mémo]
MsgBox "Interdit"
End If
End If
Application.EnableEvents = True

'----------------- ajout ---------------

If Range("D6") = " >>>" Then
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = Range("AW3")
Range("C9").Activate
Else
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = Range("AW3")
Range("C9").Activate
End If

' If Range("D6") = " >>>" Then
' ActiveSheet.Shapes("Button 98").Select
' Selection.Characters.Text = "TRIER ici"
' Range("D6").Select
' Else
' ActiveSheet.Shapes("Button 98").Select
' Selection.Characters.Text = "Liste Ok"
' End If

'----------------- fin ajout -----------------

End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 3 And Target.Count = 1 Then
ActiveWorkbook.Names.Add Name:="mémo", RefersToR1C1:="=" & Chr(34) &
Target.Value & Chr(34)
End If
If Application.Sum(Range("f" & Target.Row & ":" & "m" & Target.Row)) > 0
Then
On Error Resume Next
Shapes("monshape").Visible = True
If Err <> 0 Then creeShape: Target.Select
Shapes("monshape").Left = ActiveCell.Left
Shapes("monshape").Top = ActiveCell.Top + ActiveCell.Height + 3
Shapes("monshape").TextFrame.Characters.Text = "Sup interdit"
Else
On Error Resume Next
Shapes("monshape").Visible = False
End If
End Sub

Sub creeShape()
Shapes.AddTextbox(msoTextOrientationHorizontal, 1, 1, 50, 10).Select
Selection.Font.Name = "Verdana"
Selection.Font.Size = 7
Selection.Name = "monshape"
Shapes("monshape").Left = ActiveCell.Left
Shapes("monshape").Top = ActiveCell.Top + ActiveCell.Height + 3
End Sub

'--------------------(fin code Feuil)------------------------------

Cordialement,

JP

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

Bonjour,

Avec message avertissement:

http://boisgontierjacques.free.fr/fichiers/Evenementiel/WorkSheetChan...

On 24 juil, 13:55, "j-pascal" wrote:



Bonjour,

Problème :

Dans la colonne A, j'ai des noms.

Est-il possible d'empêcher la suppression du nom (et d'avoir une bulle
pour
informer l'utilisateur !) si les colonnes B et C (ie) de la ligne
correspondante contiennent des valeurs non nulles ?

Merci d'avance pour vos lumières ...

--
Cordialement @+
JP- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -



Avatar
j-pascal
Bonsoir,

Merci pour ces pistes, néanmoins :

1 - La saisie de nouveaux nomx doit pouvoir être faite par l'utilisateur...

2 - Je me réserve le "userinterfaceonly" pour la fin, lorsqu'il sera
question de protéger le reste de la feuille. Mais je crains le pire car ce
truc m'a laissé de très mauvais souvenirs lors d'une utilisation antérieure.
Il faut que je relise mes notes ;-)

JP

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

Bonjour,

Si toi tu as le mot de passe pour saisir dans la colonne,
tu ne vas pas supprimer les noms!
Sinon peut-être
protèger la feuille par macro avec userinterfaceonly
et prévoir l'entrée des données dans la colonne par macro exclusivement.
Enfin ce serait une hypothése...!

Cordialement.

lSteph

Bonjour LSteph ;-)

Non !

cf stp la réponse que je viens de faire à Jacky. Je dois pouvoir saisir
des données dans cette colonne !

JP


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

Bonsoir,

Protèger la feuille.

Cordialement

lSteph

Bonjour,

Problème :

Dans la colonne A, j'ai des noms.

Est-il possible d'empêcher la suppression du nom (et d'avoir une bulle
pour informer l'utilisateur !) si les colonnes B et C (ie) de la ligne
correspondante contiennent des valeurs non nulles ?

Merci d'avance pour vos lumières ...










Avatar
j-pascal
Bonjour Jacki,

J'ignore si tu repasseras sur ce fil "ancien", mais dans le même ordre
d'idée que ta dernière réponse, je souhaitais limité les message "interdit"
aux lignes 9 à 250. j'ai donc ajouté ce qui suit, et ça ne fonctionne pas !

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [c9:c250]) Is Nothing And Target.Count = 1 Then
Application.EnableEvents = False

If Target.Row > 8 And Target.Row < 251 Then 'ce que j'ai ajouté !

If Application.Sum(Range("f" & Target.Row & ":" & "m" & Target.Row)) >
0 Then
Target = [mémo]
MsgBox "Interdit"
End If
End If 'ajout
End If
Application.EnableEvents = True

A bientôt ?

JP


"Jacky" a écrit dans le message de news:
%
Re....
Est-il possible de les différencier ??
Non, il faudra te débrouiller de les mettre dans le même
"Worksheet_Change(ByVal Target As Range)"
Mais sans le fichier, il est difficile de voir.....
Si tu le souhaites, sur
http://www.cjoint.com/
A toi de voir.....

je ne sais pas comment adapter le "Target.Row" !!
'--------

If Application.Sum(Range("f" & Target.Row & ":" & "m" & Target.Row)) Then
'-------------

Le code avec la modif. de JB et adapté à ta plage
'------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [c9:c250]) Is Nothing Then
Application.EnableEvents = False
If Application.Sum(Range("f" & Target.Row & ":" & "m" &
Target.Row)) Then
Target = [ModifCol_A]
MsgBox "Modif. interdite"
End If
End If
Application.EnableEvents = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, [c9:c250]) Is Nothing Then
ActiveWorkbook.Names.Add Name:="ModifCol_A", RefersToR1C1:="=" &
Chr(34) & Target.Value & Chr(34)
End If
End Sub
'----------------------------------------

--
Salutations
JJ


"j-pascal" a écrit dans le message de news:

Oups !

J'ai un msg indiquant "Nom ambigu..." j'ai déjà une
"Worksheet_Change(ByVal Target As Range)" dans la code de la feuille.
Est-il possible de les différencier ??

Tout est ici :

------------------------------------------------------------------------
Option Explicit
Dim reponse As Variant

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As
Boolean)
If Target.Count = 1 Then
With Target
If .NoteText = "" Then
reponse = InputBox("Commentaire?")
If reponse <> "" Then
.AddComment reponse & Chr(10) & "[" & Now() & "]"
With .Comment.Shape.OLEFormat.Object.Font
.Name = "Tverdana"
.Size = 8
.FontStyle = "Normal"
.ColorIndex = 3
End With
.Comment.Visible = True
.Comment.Shape.Select
Selection.AutoSize = True
.Comment.Visible = False
End If
'Else
'.Comment.Delete
End If
End With
End If
Cancel = True
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

If Range("D6") = " >>>" Then '2 espaces
ActiveSheet.Shapes("Button 98").Select
'Selection.Characters.Text = "Semaine du " & Range("F4")
Selection.Characters.Text = "TRIER ici"
Range("D6").Select
Else
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "Liste Ok"
'Range("D6").Select
Range("D6").Activate
End If
'Range("D6").Select
Range("D6").Activate
End Sub


Private ModifCol_A
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, [c9:c250]) Is Nothing Then
Application.EnableEvents = False
If Range("f" & Target.Row) <> "" Or Range("m" & Target.Row) <> ""
Then
Target = ModifCol_A
MsgBox "Modif. interdite"
'End If
End If
'Application.EnableEvents = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, [c9:c250]) Is Nothing Then
ModifCol_A = Target
End If
End Sub

------------------------------------------------------------------

Si j'osais ( ;-) ) je poserais une question subsidiaire ...
En fait dans mon classeur, le "test" ne porte pas sur le fait que les
colonnes B, C et D soient vides, mais sur la somme des valeurs des
colonnes F à M.
Je peux inscrire :
"If Range("f" & Target.Row) > 0 Or Range("g" & Target.Row) > 0 (etc
jusqu'à "m") Then"
mais ça me semble très lourd. Je peux faire référence à "Range ("f:m")
mais je ne sais pas comment adapter le "Target.Row" !!
Question : comment ajuster la formule pour que la suppression d'une
valeur de la colonne "c" soit impossible si le somme des valeurs de F à M
est positive ?

@+ ?

JP

"Jacky" a écrit dans le message de news:
%
Re...
Je dois pouvoir ajouter des noms dans la liste. Je dois pouvoir
supprimer
des noms de cette même liste, mais à la seule condition qu'il n'y ait
pas
de valeur sur la ligne correspondante.


Il me semble que le code proposé fait cela, non ??
voir ici
http://cjoint.com/?hzkpXnMcCM

--
Salutations
JJ


"j-pascal" a écrit dans le message de news:

Merci Jacky,

Ca marche effectivement très bien pour empêcher la suppression des
valeurs
saisies dans la colonne A, mais je ne peux plus saisir de nouvelles
valeurs (dans cette même colonne A) !

L'idée, c'est qu'il y a une colonne (A) de noms. Ces noms sont
accessibles
par "donnée/validation/liste". En face de certains noms (sur la même
ligne), il y a des valeurs ...
Je dois pouvoir ajouter des noms dans la liste. Je dois pouvoir
supprimer
des noms de cette même liste, mais à la seule condition qu'il n'y ait
pas
de valeur sur la ligne correspondante.

Désolé de ne pas avoir été plus précis plus tôt ;-(

@+ ?

JP

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

Re....
Je te propose ceci:
'---------
Private ModifCol_A

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [a2:a5000]) Is Nothing Then ' a adapter
Application.EnableEvents = False
If Range("b" & Target.Row) <> "" Or Range("c" & Target.Row) <> ""
Then
Target = ModifCol_A
MsgBox "Modif. interdite"
End If
End If
Application.EnableEvents = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, [a2:a5000]) Is Nothing Then ' a adapter
ModifCol_A = Target
End If
End Sub
'----------
'A coller dans le module de la feuille en question

--
Salutations
JJ


"j-pascal" a écrit dans le message de news:

Bonsoir Jacky,

Merci.

Je n'avais certes pas pensé au menu donnée/validation ...
Mais dans ton exemple, (si je comprends bien) cela empêche de saisir
une
valeur dans la colonne A si les colonnes B et C ne sont pas vides ...
mais cela n'empêche pas l'utilisateur de supprimer la valeur de la
colonne A !

(Autre) problème), les noms de la colonne A sont déjà récupérés par
"donnée/validation/liste" ;-(

@+ ?

JP

"Jacky" a écrit dans le message de news:
OT0%
Bonjour,

Le menu donnée/validation pourrait le faire
Sélection de la plage(commence en B2 pour l'exemple)
Donnée/validation
Autoriser==> personnalisé
Formule ==> ²&C2=""
Eventellement configurer les messages d'alerte
--
Salutations
JJ


"j-pascal" a écrit dans le message de
news:
Ot6H%
Bonjour,

Problème :

Dans la colonne A, j'ai des noms.

Est-il possible d'empêcher la suppression du nom (et d'avoir une
bulle
pour informer l'utilisateur !) si les colonnes B et C (ie) de la
ligne
correspondante contiennent des valeurs non nulles ?

Merci d'avance pour vos lumières ...

--
Cordialement @+
JP




























Avatar
Jacky
Re...
Il serait souhaitable que cette plage d'interdit soir nommée
Par exemple "Interdit"
-Tu sélectionnes la plage en question
-Dans le petit carré blanc à gauche de la validation des formule tu entres
interdit (ou par le menu insertion/nom/définir)
-Dans le code vba tu modifies
If Not Intersect(Target, [interdit]) Is Nothing And Target.Count = 1
Then
ainsi que dans :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

ps: Attention, il y a un "Application.EnableEvents = False".....
Si pendant les essais un plantage se produit à l'intérieur de
"Application.EnableEvents = False" et de "Application.EnableEvents =True",
il faudra enregistrer et relancer Excel. Comme les événements sont
désactivées au moment du plantage, il ne sont pas activées automatiquement,
et plus rein ne fonctionne à l'intérieur de la "Private Sub
Worksheet_Change()".


--
Salutations
JJ


"j-pascal" a écrit dans le message de news:

Bonjour Jacki,

J'ignore si tu repasseras sur ce fil "ancien", mais dans le même ordre
d'idée que ta dernière réponse, je souhaitais limité les message
"interdit" aux lignes 9 à 250. j'ai donc ajouté ce qui suit, et ça ne
fonctionne pas !

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [c9:c250]) Is Nothing And Target.Count = 1 Then
Application.EnableEvents = False

If Target.Row > 8 And Target.Row < 251 Then 'ce que j'ai ajouté !

If Application.Sum(Range("f" & Target.Row & ":" & "m" & Target.Row)) >
0 Then
Target = [mémo]
MsgBox "Interdit"
End If
End If 'ajout
End If
Application.EnableEvents = True

A bientôt ?

JP


"Jacky" a écrit dans le message de news:
%
Re....
Est-il possible de les différencier ??
Non, il faudra te débrouiller de les mettre dans le même
"Worksheet_Change(ByVal Target As Range)"
Mais sans le fichier, il est difficile de voir.....
Si tu le souhaites, sur
http://www.cjoint.com/
A toi de voir.....

je ne sais pas comment adapter le "Target.Row" !!
'--------

If Application.Sum(Range("f" & Target.Row & ":" & "m" & Target.Row)) Then
'-------------

Le code avec la modif. de JB et adapté à ta plage
'------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [c9:c250]) Is Nothing Then
Application.EnableEvents = False
If Application.Sum(Range("f" & Target.Row & ":" & "m" &
Target.Row)) Then
Target = [ModifCol_A]
MsgBox "Modif. interdite"
End If
End If
Application.EnableEvents = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, [c9:c250]) Is Nothing Then
ActiveWorkbook.Names.Add Name:="ModifCol_A", RefersToR1C1:="=" &
Chr(34) & Target.Value & Chr(34)
End If
End Sub
'----------------------------------------

--
Salutations
JJ


"j-pascal" a écrit dans le message de news:

Oups !

J'ai un msg indiquant "Nom ambigu..." j'ai déjà une
"Worksheet_Change(ByVal Target As Range)" dans la code de la feuille.
Est-il possible de les différencier ??

Tout est ici :

------------------------------------------------------------------------
Option Explicit
Dim reponse As Variant

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As
Boolean)
If Target.Count = 1 Then
With Target
If .NoteText = "" Then
reponse = InputBox("Commentaire?")
If reponse <> "" Then
.AddComment reponse & Chr(10) & "[" & Now() & "]"
With .Comment.Shape.OLEFormat.Object.Font
.Name = "Tverdana"
.Size = 8
.FontStyle = "Normal"
.ColorIndex = 3
End With
.Comment.Visible = True
.Comment.Shape.Select
Selection.AutoSize = True
.Comment.Visible = False
End If
'Else
'.Comment.Delete
End If
End With
End If
Cancel = True
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

If Range("D6") = " >>>" Then '2 espaces
ActiveSheet.Shapes("Button 98").Select
'Selection.Characters.Text = "Semaine du " & Range("F4")
Selection.Characters.Text = "TRIER ici"
Range("D6").Select
Else
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "Liste Ok"
'Range("D6").Select
Range("D6").Activate
End If
'Range("D6").Select
Range("D6").Activate
End Sub


Private ModifCol_A
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, [c9:c250]) Is Nothing Then
Application.EnableEvents = False
If Range("f" & Target.Row) <> "" Or Range("m" & Target.Row) <> ""
Then
Target = ModifCol_A
MsgBox "Modif. interdite"
'End If
End If
'Application.EnableEvents = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, [c9:c250]) Is Nothing Then
ModifCol_A = Target
End If
End Sub

------------------------------------------------------------------

Si j'osais ( ;-) ) je poserais une question subsidiaire ...
En fait dans mon classeur, le "test" ne porte pas sur le fait que les
colonnes B, C et D soient vides, mais sur la somme des valeurs des
colonnes F à M.
Je peux inscrire :
"If Range("f" & Target.Row) > 0 Or Range("g" & Target.Row) > 0 (etc
jusqu'à "m") Then"
mais ça me semble très lourd. Je peux faire référence à "Range ("f:m")
mais je ne sais pas comment adapter le "Target.Row" !!
Question : comment ajuster la formule pour que la suppression d'une
valeur de la colonne "c" soit impossible si le somme des valeurs de F à
M est positive ?

@+ ?

JP

"Jacky" a écrit dans le message de news:
%
Re...
Je dois pouvoir ajouter des noms dans la liste. Je dois pouvoir
supprimer
des noms de cette même liste, mais à la seule condition qu'il n'y ait
pas
de valeur sur la ligne correspondante.


Il me semble que le code proposé fait cela, non ??
voir ici
http://cjoint.com/?hzkpXnMcCM

--
Salutations
JJ


"j-pascal" a écrit dans le message de news:

Merci Jacky,

Ca marche effectivement très bien pour empêcher la suppression des
valeurs
saisies dans la colonne A, mais je ne peux plus saisir de nouvelles
valeurs (dans cette même colonne A) !

L'idée, c'est qu'il y a une colonne (A) de noms. Ces noms sont
accessibles
par "donnée/validation/liste". En face de certains noms (sur la même
ligne), il y a des valeurs ...
Je dois pouvoir ajouter des noms dans la liste. Je dois pouvoir
supprimer
des noms de cette même liste, mais à la seule condition qu'il n'y ait
pas
de valeur sur la ligne correspondante.

Désolé de ne pas avoir été plus précis plus tôt ;-(

@+ ?

JP

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

Re....
Je te propose ceci:
'---------
Private ModifCol_A

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [a2:a5000]) Is Nothing Then ' a adapter
Application.EnableEvents = False
If Range("b" & Target.Row) <> "" Or Range("c" & Target.Row) <>
""
Then
Target = ModifCol_A
MsgBox "Modif. interdite"
End If
End If
Application.EnableEvents = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, [a2:a5000]) Is Nothing Then ' a adapter
ModifCol_A = Target
End If
End Sub
'----------
'A coller dans le module de la feuille en question

--
Salutations
JJ


"j-pascal" a écrit dans le message de news:

Bonsoir Jacky,

Merci.

Je n'avais certes pas pensé au menu donnée/validation ...
Mais dans ton exemple, (si je comprends bien) cela empêche de saisir
une
valeur dans la colonne A si les colonnes B et C ne sont pas vides
...
mais cela n'empêche pas l'utilisateur de supprimer la valeur de la
colonne A !

(Autre) problème), les noms de la colonne A sont déjà récupérés par
"donnée/validation/liste" ;-(

@+ ?

JP

"Jacky" a écrit dans le message de news:
OT0%
Bonjour,

Le menu donnée/validation pourrait le faire
Sélection de la plage(commence en B2 pour l'exemple)
Donnée/validation
Autoriser==> personnalisé
Formule ==> ²&C2=""
Eventellement configurer les messages d'alerte
--
Salutations
JJ


"j-pascal" a écrit dans le message de
news:
Ot6H%
Bonjour,

Problème :

Dans la colonne A, j'ai des noms.

Est-il possible d'empêcher la suppression du nom (et d'avoir une
bulle
pour informer l'utilisateur !) si les colonnes B et C (ie) de la
ligne
correspondante contiennent des valeurs non nulles ?

Merci d'avance pour vos lumières ...

--
Cordialement @+
JP































Avatar
j-pascal
Re,

"Jacky" a écrit dans le message de news:
%23d0z$
Re...
Il serait souhaitable que cette plage d'interdit soir nommée
Par exemple "Interdit"
-Tu sélectionnes la plage en question
-Dans le petit carré blanc à gauche de la validation des formule tu entres
interdit (ou par le menu insertion/nom/définir)
-Dans le code vba tu modifies
If Not Intersect(Target, [interdit]) Is Nothing And Target.Count = 1
Then


Cela me donne ça :

Private Sub Worksheet_Change(ByVal Target As Range)
'If Not Intersect(Target, [c9:c250]) Is Nothing And Target.Count = 1 Then
If Not Intersect(Target, [MoisInterdit]) Is Nothing And Target.Count = 1
Then
Application.EnableEvents = False
'If Target.Row > 8 And Target.Row < 251 Then 'ajout
If Application.Sum(Range("f" & Target.Row & ":" & "m" & Target.Row)) >
0 Then
Target = [mémo]
MsgBox "Interdit"
End If
'End If 'ajout
End If
Application.EnableEvents = True


ainsi que dans :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)


Désolé, je ne comprends pas ! Je ne vois pas où insérer la modif ;-( Le
code est là :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 3 And Target.Count = 1 Then
ActiveWorkbook.Names.Add Name:="mémo", RefersToR1C1:="=" & Chr(34) &
Target.Value & Chr(34)
End If
If Application.Sum(Range("f" & Target.Row & ":" & "m" & Target.Row)) > 0
Then
On Error Resume Next
Shapes("monshape").Visible = True
If Err <> 0 Then creeShape: Target.Select
Shapes("monshape").Left = ActiveCell.Left
Shapes("monshape").Top = ActiveCell.Top + ActiveCell.Height + 3
Shapes("monshape").TextFrame.Characters.Text = "Sup interdit"
Else
On Error Resume Next
Shapes("monshape").Visible = False
End If
End Sub

@+ ?

JP




ps: Attention, il y a un "Application.EnableEvents = False".....
Si pendant les essais un plantage se produit à l'intérieur de
"Application.EnableEvents = False" et de "Application.EnableEvents =True",
il faudra enregistrer et relancer Excel. Comme les événements sont
désactivées au moment du plantage, il ne sont pas activées
automatiquement, et plus rein ne fonctionne à l'intérieur de la "Private
Sub Worksheet_Change()".


--
Salutations
JJ


"j-pascal" a écrit dans le message de news:

Bonjour Jacki,

J'ignore si tu repasseras sur ce fil "ancien", mais dans le même ordre
d'idée que ta dernière réponse, je souhaitais limité les message
"interdit" aux lignes 9 à 250. j'ai donc ajouté ce qui suit, et ça ne
fonctionne pas !

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [c9:c250]) Is Nothing And Target.Count = 1 Then
Application.EnableEvents = False

If Target.Row > 8 And Target.Row < 251 Then 'ce que j'ai ajouté !

If Application.Sum(Range("f" & Target.Row & ":" & "m" & Target.Row))
0 Then
Target = [mémo]

MsgBox "Interdit"
End If
End If 'ajout
End If
Application.EnableEvents = True

A bientôt ?

JP


"Jacky" a écrit dans le message de news:
%
Re....
Est-il possible de les différencier ??
Non, il faudra te débrouiller de les mettre dans le même
"Worksheet_Change(ByVal Target As Range)"
Mais sans le fichier, il est difficile de voir.....
Si tu le souhaites, sur
http://www.cjoint.com/
A toi de voir.....

je ne sais pas comment adapter le "Target.Row" !!
'--------

If Application.Sum(Range("f" & Target.Row & ":" & "m" & Target.Row))
Then
'-------------

Le code avec la modif. de JB et adapté à ta plage
'------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [c9:c250]) Is Nothing Then
Application.EnableEvents = False
If Application.Sum(Range("f" & Target.Row & ":" & "m" &
Target.Row)) Then
Target = [ModifCol_A]
MsgBox "Modif. interdite"
End If
End If
Application.EnableEvents = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, [c9:c250]) Is Nothing Then
ActiveWorkbook.Names.Add Name:="ModifCol_A", RefersToR1C1:="=" &
Chr(34) & Target.Value & Chr(34)
End If
End Sub
'----------------------------------------

--
Salutations
JJ


"j-pascal" a écrit dans le message de news:

Oups !

J'ai un msg indiquant "Nom ambigu..." j'ai déjà une
"Worksheet_Change(ByVal Target As Range)" dans la code de la feuille.
Est-il possible de les différencier ??

Tout est ici :

------------------------------------------------------------------------
Option Explicit
Dim reponse As Variant

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel
As Boolean)
If Target.Count = 1 Then
With Target
If .NoteText = "" Then
reponse = InputBox("Commentaire?")
If reponse <> "" Then
.AddComment reponse & Chr(10) & "[" & Now() & "]"
With .Comment.Shape.OLEFormat.Object.Font
.Name = "Tverdana"
.Size = 8
.FontStyle = "Normal"
.ColorIndex = 3
End With
.Comment.Visible = True
.Comment.Shape.Select
Selection.AutoSize = True
.Comment.Visible = False
End If
'Else
'.Comment.Delete
End If
End With
End If
Cancel = True
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

If Range("D6") = " >>>" Then '2 espaces
ActiveSheet.Shapes("Button 98").Select
'Selection.Characters.Text = "Semaine du " & Range("F4")
Selection.Characters.Text = "TRIER ici"
Range("D6").Select
Else
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "Liste Ok"
'Range("D6").Select
Range("D6").Activate
End If
'Range("D6").Select
Range("D6").Activate
End Sub


Private ModifCol_A
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, [c9:c250]) Is Nothing Then
Application.EnableEvents = False
If Range("f" & Target.Row) <> "" Or Range("m" & Target.Row) <> ""
Then
Target = ModifCol_A
MsgBox "Modif. interdite"
'End If
End If
'Application.EnableEvents = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, [c9:c250]) Is Nothing Then
ModifCol_A = Target
End If
End Sub

------------------------------------------------------------------

Si j'osais ( ;-) ) je poserais une question subsidiaire ...
En fait dans mon classeur, le "test" ne porte pas sur le fait que les
colonnes B, C et D soient vides, mais sur la somme des valeurs des
colonnes F à M.
Je peux inscrire :
"If Range("f" & Target.Row) > 0 Or Range("g" & Target.Row) > 0 (etc
jusqu'à "m") Then"
mais ça me semble très lourd. Je peux faire référence à "Range ("f:m")
mais je ne sais pas comment adapter le "Target.Row" !!
Question : comment ajuster la formule pour que la suppression d'une
valeur de la colonne "c" soit impossible si le somme des valeurs de F à
M est positive ?

@+ ?

JP

"Jacky" a écrit dans le message de news:
%
Re...
Je dois pouvoir ajouter des noms dans la liste. Je dois pouvoir
supprimer
des noms de cette même liste, mais à la seule condition qu'il n'y ait
pas
de valeur sur la ligne correspondante.


Il me semble que le code proposé fait cela, non ??
voir ici
http://cjoint.com/?hzkpXnMcCM

--
Salutations
JJ


"j-pascal" a écrit dans le message de news:

Merci Jacky,

Ca marche effectivement très bien pour empêcher la suppression des
valeurs
saisies dans la colonne A, mais je ne peux plus saisir de nouvelles
valeurs (dans cette même colonne A) !

L'idée, c'est qu'il y a une colonne (A) de noms. Ces noms sont
accessibles
par "donnée/validation/liste". En face de certains noms (sur la même
ligne), il y a des valeurs ...
Je dois pouvoir ajouter des noms dans la liste. Je dois pouvoir
supprimer
des noms de cette même liste, mais à la seule condition qu'il n'y ait
pas
de valeur sur la ligne correspondante.

Désolé de ne pas avoir été plus précis plus tôt ;-(

@+ ?

JP

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

Re....
Je te propose ceci:
'---------
Private ModifCol_A

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [a2:a5000]) Is Nothing Then ' a adapter
Application.EnableEvents = False
If Range("b" & Target.Row) <> "" Or Range("c" & Target.Row) <>
""
Then
Target = ModifCol_A
MsgBox "Modif. interdite"
End If
End If
Application.EnableEvents = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, [a2:a5000]) Is Nothing Then ' a adapter
ModifCol_A = Target
End If
End Sub
'----------
'A coller dans le module de la feuille en question

--
Salutations
JJ


"j-pascal" a écrit dans le message de
news:

Bonsoir Jacky,

Merci.

Je n'avais certes pas pensé au menu donnée/validation ...
Mais dans ton exemple, (si je comprends bien) cela empêche de
saisir une
valeur dans la colonne A si les colonnes B et C ne sont pas vides
...
mais cela n'empêche pas l'utilisateur de supprimer la valeur de la
colonne A !

(Autre) problème), les noms de la colonne A sont déjà récupérés par
"donnée/validation/liste" ;-(

@+ ?

JP

"Jacky" a écrit dans le message de news:
OT0%
Bonjour,

Le menu donnée/validation pourrait le faire
Sélection de la plage(commence en B2 pour l'exemple)
Donnée/validation
Autoriser==> personnalisé
Formule ==> ²&C2=""
Eventellement configurer les messages d'alerte
--
Salutations
JJ


"j-pascal" a écrit dans le message de
news:
Ot6H%
Bonjour,

Problème :

Dans la colonne A, j'ai des noms.

Est-il possible d'empêcher la suppression du nom (et d'avoir une
bulle
pour informer l'utilisateur !) si les colonnes B et C (ie) de la
ligne
correspondante contiennent des valeurs non nulles ?

Merci d'avance pour vos lumières ...

--
Cordialement @+
JP



































Avatar
Jacky
Re...
Je ne suis pas sur d'avoir compris ta demande, peux-tu remettre en ligne un
bout de ton fichier avec le résultat souhaité.
http://www.cjoint.com/

--
Salutations
JJ


"j-pascal" a écrit dans le message de news:

Re,

"Jacky" a écrit dans le message de news:
%23d0z$
Re...
Il serait souhaitable que cette plage d'interdit soir nommée
Par exemple "Interdit"
-Tu sélectionnes la plage en question
-Dans le petit carré blanc à gauche de la validation des formule tu
entres interdit (ou par le menu insertion/nom/définir)
-Dans le code vba tu modifies
If Not Intersect(Target, [interdit]) Is Nothing And Target.Count =
1 Then


Cela me donne ça :

Private Sub Worksheet_Change(ByVal Target As Range)
'If Not Intersect(Target, [c9:c250]) Is Nothing And Target.Count = 1 Then
If Not Intersect(Target, [MoisInterdit]) Is Nothing And Target.Count = 1
Then
Application.EnableEvents = False
'If Target.Row > 8 And Target.Row < 251 Then 'ajout
If Application.Sum(Range("f" & Target.Row & ":" & "m" & Target.Row)) >
0 Then
Target = [mémo]
MsgBox "Interdit"
End If
'End If 'ajout
End If
Application.EnableEvents = True


ainsi que dans :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)


Désolé, je ne comprends pas ! Je ne vois pas où insérer la modif ;-( Le
code est là :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 3 And Target.Count = 1 Then
ActiveWorkbook.Names.Add Name:="mémo", RefersToR1C1:="=" & Chr(34) &
Target.Value & Chr(34)
End If
If Application.Sum(Range("f" & Target.Row & ":" & "m" & Target.Row)) > 0
Then
On Error Resume Next
Shapes("monshape").Visible = True
If Err <> 0 Then creeShape: Target.Select
Shapes("monshape").Left = ActiveCell.Left
Shapes("monshape").Top = ActiveCell.Top + ActiveCell.Height + 3
Shapes("monshape").TextFrame.Characters.Text = "Sup interdit"
Else
On Error Resume Next
Shapes("monshape").Visible = False
End If
End Sub

@+ ?

JP




ps: Attention, il y a un "Application.EnableEvents = False".....
Si pendant les essais un plantage se produit à l'intérieur de
"Application.EnableEvents = False" et de "Application.EnableEvents
=True", il faudra enregistrer et relancer Excel. Comme les événements
sont désactivées au moment du plantage, il ne sont pas activées
automatiquement, et plus rein ne fonctionne à l'intérieur de la "Private
Sub Worksheet_Change()".


--
Salutations
JJ


"j-pascal" a écrit dans le message de news:

Bonjour Jacki,

J'ignore si tu repasseras sur ce fil "ancien", mais dans le même ordre
d'idée que ta dernière réponse, je souhaitais limité les message
"interdit" aux lignes 9 à 250. j'ai donc ajouté ce qui suit, et ça ne
fonctionne pas !

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [c9:c250]) Is Nothing And Target.Count = 1 Then
Application.EnableEvents = False

If Target.Row > 8 And Target.Row < 251 Then 'ce que j'ai ajouté !

If Application.Sum(Range("f" & Target.Row & ":" & "m" & Target.Row))
0 Then
Target = [mémo]

MsgBox "Interdit"
End If
End If 'ajout
End If
Application.EnableEvents = True

A bientôt ?

JP


"Jacky" a écrit dans le message de news:
%
Re....
Est-il possible de les différencier ??
Non, il faudra te débrouiller de les mettre dans le même
"Worksheet_Change(ByVal Target As Range)"
Mais sans le fichier, il est difficile de voir.....
Si tu le souhaites, sur
http://www.cjoint.com/
A toi de voir.....

je ne sais pas comment adapter le "Target.Row" !!
'--------

If Application.Sum(Range("f" & Target.Row & ":" & "m" & Target.Row))
Then
'-------------

Le code avec la modif. de JB et adapté à ta plage
'------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [c9:c250]) Is Nothing Then
Application.EnableEvents = False
If Application.Sum(Range("f" & Target.Row & ":" & "m" &
Target.Row)) Then
Target = [ModifCol_A]
MsgBox "Modif. interdite"
End If
End If
Application.EnableEvents = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, [c9:c250]) Is Nothing Then
ActiveWorkbook.Names.Add Name:="ModifCol_A", RefersToR1C1:="=" &
Chr(34) & Target.Value & Chr(34)
End If
End Sub
'----------------------------------------

--
Salutations
JJ


"j-pascal" a écrit dans le message de news:

Oups !

J'ai un msg indiquant "Nom ambigu..." j'ai déjà une
"Worksheet_Change(ByVal Target As Range)" dans la code de la feuille.
Est-il possible de les différencier ??

Tout est ici :

------------------------------------------------------------------------
Option Explicit
Dim reponse As Variant

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel
As Boolean)
If Target.Count = 1 Then
With Target
If .NoteText = "" Then
reponse = InputBox("Commentaire?")
If reponse <> "" Then
.AddComment reponse & Chr(10) & "[" & Now() & "]"
With .Comment.Shape.OLEFormat.Object.Font
.Name = "Tverdana"
.Size = 8
.FontStyle = "Normal"
.ColorIndex = 3
End With
.Comment.Visible = True
.Comment.Shape.Select
Selection.AutoSize = True
.Comment.Visible = False
End If
'Else
'.Comment.Delete
End If
End With
End If
Cancel = True
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

If Range("D6") = " >>>" Then '2 espaces
ActiveSheet.Shapes("Button 98").Select
'Selection.Characters.Text = "Semaine du " & Range("F4")
Selection.Characters.Text = "TRIER ici"
Range("D6").Select
Else
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "Liste Ok"
'Range("D6").Select
Range("D6").Activate
End If
'Range("D6").Select
Range("D6").Activate
End Sub


Private ModifCol_A
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, [c9:c250]) Is Nothing Then
Application.EnableEvents = False
If Range("f" & Target.Row) <> "" Or Range("m" & Target.Row) <> ""
Then
Target = ModifCol_A
MsgBox "Modif. interdite"
'End If
End If
'Application.EnableEvents = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, [c9:c250]) Is Nothing Then
ModifCol_A = Target
End If
End Sub

------------------------------------------------------------------

Si j'osais ( ;-) ) je poserais une question subsidiaire ...
En fait dans mon classeur, le "test" ne porte pas sur le fait que les
colonnes B, C et D soient vides, mais sur la somme des valeurs des
colonnes F à M.
Je peux inscrire :
"If Range("f" & Target.Row) > 0 Or Range("g" & Target.Row) > 0 (etc
jusqu'à "m") Then"
mais ça me semble très lourd. Je peux faire référence à "Range ("f:m")
mais je ne sais pas comment adapter le "Target.Row" !!
Question : comment ajuster la formule pour que la suppression d'une
valeur de la colonne "c" soit impossible si le somme des valeurs de F
à M est positive ?

@+ ?

JP

"Jacky" a écrit dans le message de news:
%
Re...
Je dois pouvoir ajouter des noms dans la liste. Je dois pouvoir
supprimer
des noms de cette même liste, mais à la seule condition qu'il n'y
ait pas
de valeur sur la ligne correspondante.


Il me semble que le code proposé fait cela, non ??
voir ici
http://cjoint.com/?hzkpXnMcCM

--
Salutations
JJ


"j-pascal" a écrit dans le message de news:

Merci Jacky,

Ca marche effectivement très bien pour empêcher la suppression des
valeurs
saisies dans la colonne A, mais je ne peux plus saisir de nouvelles
valeurs (dans cette même colonne A) !

L'idée, c'est qu'il y a une colonne (A) de noms. Ces noms sont
accessibles
par "donnée/validation/liste". En face de certains noms (sur la même
ligne), il y a des valeurs ...
Je dois pouvoir ajouter des noms dans la liste. Je dois pouvoir
supprimer
des noms de cette même liste, mais à la seule condition qu'il n'y
ait pas
de valeur sur la ligne correspondante.

Désolé de ne pas avoir été plus précis plus tôt ;-(

@+ ?

JP

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

Re....
Je te propose ceci:
'---------
Private ModifCol_A

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [a2:a5000]) Is Nothing Then ' a adapter
Application.EnableEvents = False
If Range("b" & Target.Row) <> "" Or Range("c" & Target.Row) <>
""
Then
Target = ModifCol_A
MsgBox "Modif. interdite"
End If
End If
Application.EnableEvents = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, [a2:a5000]) Is Nothing Then ' a adapter
ModifCol_A = Target
End If
End Sub
'----------
'A coller dans le module de la feuille en question

--
Salutations
JJ


"j-pascal" a écrit dans le message de
news:

Bonsoir Jacky,

Merci.

Je n'avais certes pas pensé au menu donnée/validation ...
Mais dans ton exemple, (si je comprends bien) cela empêche de
saisir une
valeur dans la colonne A si les colonnes B et C ne sont pas vides
...
mais cela n'empêche pas l'utilisateur de supprimer la valeur de la
colonne A !

(Autre) problème), les noms de la colonne A sont déjà récupérés
par
"donnée/validation/liste" ;-(

@+ ?

JP

"Jacky" a écrit dans le message de news:
OT0%
Bonjour,

Le menu donnée/validation pourrait le faire
Sélection de la plage(commence en B2 pour l'exemple)
Donnée/validation
Autoriser==> personnalisé
Formule ==> ²&C2=""
Eventellement configurer les messages d'alerte
--
Salutations
JJ


"j-pascal" a écrit dans le message de
news:
Ot6H%
Bonjour,

Problème :

Dans la colonne A, j'ai des noms.

Est-il possible d'empêcher la suppression du nom (et d'avoir une
bulle
pour informer l'utilisateur !) si les colonnes B et C (ie) de la
ligne
correspondante contiennent des valeurs non nulles ?

Merci d'avance pour vos lumières ...

--
Cordialement @+
JP






































Avatar
j-pascal
Re,

Un (tout petit) bout du fichier avec un cadre pour résumer la question ;-)

http://cjoint.com/?hDvJ7PyeiL

Je n'ai pas ajusté le code pour les Tris, etc, mais théoriquement tu n'en as
pas besoin.

D'avance, merci !

JP

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

Re...
Je ne suis pas sur d'avoir compris ta demande, peux-tu remettre en ligne
un bout de ton fichier avec le résultat souhaité.
http://www.cjoint.com/

--
Salutations
JJ


"j-pascal" a écrit dans le message de news:

Re,

"Jacky" a écrit dans le message de news:
%23d0z$
Re...
Il serait souhaitable que cette plage d'interdit soir nommée
Par exemple "Interdit"
-Tu sélectionnes la plage en question
-Dans le petit carré blanc à gauche de la validation des formule tu
entres interdit (ou par le menu insertion/nom/définir)
-Dans le code vba tu modifies
If Not Intersect(Target, [interdit]) Is Nothing And Target.Count =
1 Then


Cela me donne ça :

Private Sub Worksheet_Change(ByVal Target As Range)
'If Not Intersect(Target, [c9:c250]) Is Nothing And Target.Count = 1 Then
If Not Intersect(Target, [MoisInterdit]) Is Nothing And Target.Count = 1
Then
Application.EnableEvents = False
'If Target.Row > 8 And Target.Row < 251 Then 'ajout
If Application.Sum(Range("f" & Target.Row & ":" & "m" & Target.Row))
0 Then
Target = [mémo]

MsgBox "Interdit"
End If
'End If 'ajout
End If
Application.EnableEvents = True


ainsi que dans :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)


Désolé, je ne comprends pas ! Je ne vois pas où insérer la modif ;-( Le
code est là :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Column = 3 And Target.Count = 1 Then
ActiveWorkbook.Names.Add Name:="mémo", RefersToR1C1:="=" & Chr(34) &
Target.Value & Chr(34)
End If
If Application.Sum(Range("f" & Target.Row & ":" & "m" & Target.Row)) > 0
Then
On Error Resume Next
Shapes("monshape").Visible = True
If Err <> 0 Then creeShape: Target.Select
Shapes("monshape").Left = ActiveCell.Left
Shapes("monshape").Top = ActiveCell.Top + ActiveCell.Height + 3
Shapes("monshape").TextFrame.Characters.Text = "Sup interdit"
Else
On Error Resume Next
Shapes("monshape").Visible = False
End If
End Sub

@+ ?

JP




ps: Attention, il y a un "Application.EnableEvents = False".....
Si pendant les essais un plantage se produit à l'intérieur de
"Application.EnableEvents = False" et de "Application.EnableEvents
=True", il faudra enregistrer et relancer Excel. Comme les événements
sont désactivées au moment du plantage, il ne sont pas activées
automatiquement, et plus rein ne fonctionne à l'intérieur de la "Private
Sub Worksheet_Change()".


--
Salutations
JJ


"j-pascal" a écrit dans le message de news:

Bonjour Jacki,

J'ignore si tu repasseras sur ce fil "ancien", mais dans le même ordre
d'idée que ta dernière réponse, je souhaitais limité les message
"interdit" aux lignes 9 à 250. j'ai donc ajouté ce qui suit, et ça ne
fonctionne pas !

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [c9:c250]) Is Nothing And Target.Count = 1
Then
Application.EnableEvents = False

If Target.Row > 8 And Target.Row < 251 Then 'ce que j'ai ajouté !

If Application.Sum(Range("f" & Target.Row & ":" & "m" &
Target.Row)) > 0 Then
Target = [mémo]
MsgBox "Interdit"
End If
End If 'ajout
End If
Application.EnableEvents = True

A bientôt ?

JP


"Jacky" a écrit dans le message de news:
%
Re....
Est-il possible de les différencier ??
Non, il faudra te débrouiller de les mettre dans le même
"Worksheet_Change(ByVal Target As Range)"
Mais sans le fichier, il est difficile de voir.....
Si tu le souhaites, sur
http://www.cjoint.com/
A toi de voir.....

je ne sais pas comment adapter le "Target.Row" !!
'--------

If Application.Sum(Range("f" & Target.Row & ":" & "m" & Target.Row))
Then
'-------------

Le code avec la modif. de JB et adapté à ta plage
'------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [c9:c250]) Is Nothing Then
Application.EnableEvents = False
If Application.Sum(Range("f" & Target.Row & ":" & "m" &
Target.Row)) Then
Target = [ModifCol_A]
MsgBox "Modif. interdite"
End If
End If
Application.EnableEvents = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, [c9:c250]) Is Nothing Then
ActiveWorkbook.Names.Add Name:="ModifCol_A", RefersToR1C1:="=" &
Chr(34) & Target.Value & Chr(34)
End If
End Sub
'----------------------------------------

--
Salutations
JJ


"j-pascal" a écrit dans le message de news:

Oups !

J'ai un msg indiquant "Nom ambigu..." j'ai déjà une
"Worksheet_Change(ByVal Target As Range)" dans la code de la feuille.
Est-il possible de les différencier ??

Tout est ici :

------------------------------------------------------------------------
Option Explicit
Dim reponse As Variant

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel
As Boolean)
If Target.Count = 1 Then
With Target
If .NoteText = "" Then
reponse = InputBox("Commentaire?")
If reponse <> "" Then
.AddComment reponse & Chr(10) & "[" & Now() & "]"
With .Comment.Shape.OLEFormat.Object.Font
.Name = "Tverdana"
.Size = 8
.FontStyle = "Normal"
.ColorIndex = 3
End With
.Comment.Visible = True
.Comment.Shape.Select
Selection.AutoSize = True
.Comment.Visible = False
End If
'Else
'.Comment.Delete
End If
End With
End If
Cancel = True
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)

If Range("D6") = " >>>" Then '2 espaces
ActiveSheet.Shapes("Button 98").Select
'Selection.Characters.Text = "Semaine du " & Range("F4")
Selection.Characters.Text = "TRIER ici"
Range("D6").Select
Else
ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = "Liste Ok"
'Range("D6").Select
Range("D6").Activate
End If
'Range("D6").Select
Range("D6").Activate
End Sub


Private ModifCol_A
Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, [c9:c250]) Is Nothing Then
Application.EnableEvents = False
If Range("f" & Target.Row) <> "" Or Range("m" & Target.Row) <>
"" Then
Target = ModifCol_A
MsgBox "Modif. interdite"
'End If
End If
'Application.EnableEvents = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, [c9:c250]) Is Nothing Then
ModifCol_A = Target
End If
End Sub

------------------------------------------------------------------

Si j'osais ( ;-) ) je poserais une question subsidiaire ...
En fait dans mon classeur, le "test" ne porte pas sur le fait que les
colonnes B, C et D soient vides, mais sur la somme des valeurs des
colonnes F à M.
Je peux inscrire :
"If Range("f" & Target.Row) > 0 Or Range("g" & Target.Row) > 0 (etc
jusqu'à "m") Then"
mais ça me semble très lourd. Je peux faire référence à "Range
("f:m") mais je ne sais pas comment adapter le "Target.Row" !!
Question : comment ajuster la formule pour que la suppression d'une
valeur de la colonne "c" soit impossible si le somme des valeurs de F
à M est positive ?

@+ ?

JP

"Jacky" a écrit dans le message de news:
%
Re...
Je dois pouvoir ajouter des noms dans la liste. Je dois pouvoir
supprimer
des noms de cette même liste, mais à la seule condition qu'il n'y
ait pas
de valeur sur la ligne correspondante.


Il me semble que le code proposé fait cela, non ??
voir ici
http://cjoint.com/?hzkpXnMcCM

--
Salutations
JJ


"j-pascal" a écrit dans le message de
news:

Merci Jacky,

Ca marche effectivement très bien pour empêcher la suppression des
valeurs
saisies dans la colonne A, mais je ne peux plus saisir de nouvelles
valeurs (dans cette même colonne A) !

L'idée, c'est qu'il y a une colonne (A) de noms. Ces noms sont
accessibles
par "donnée/validation/liste". En face de certains noms (sur la
même
ligne), il y a des valeurs ...
Je dois pouvoir ajouter des noms dans la liste. Je dois pouvoir
supprimer
des noms de cette même liste, mais à la seule condition qu'il n'y
ait pas
de valeur sur la ligne correspondante.

Désolé de ne pas avoir été plus précis plus tôt ;-(

@+ ?

JP

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

Re....
Je te propose ceci:
'---------
Private ModifCol_A

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [a2:a5000]) Is Nothing Then ' a adapter
Application.EnableEvents = False
If Range("b" & Target.Row) <> "" Or Range("c" & Target.Row)
<> ""
Then
Target = ModifCol_A
MsgBox "Modif. interdite"
End If
End If
Application.EnableEvents = True
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, [a2:a5000]) Is Nothing Then ' a adapter
ModifCol_A = Target
End If
End Sub
'----------
'A coller dans le module de la feuille en question

--
Salutations
JJ


"j-pascal" a écrit dans le message de
news:

Bonsoir Jacky,

Merci.

Je n'avais certes pas pensé au menu donnée/validation ...
Mais dans ton exemple, (si je comprends bien) cela empêche de
saisir une
valeur dans la colonne A si les colonnes B et C ne sont pas vides
...
mais cela n'empêche pas l'utilisateur de supprimer la valeur de
la
colonne A !

(Autre) problème), les noms de la colonne A sont déjà récupérés
par
"donnée/validation/liste" ;-(

@+ ?

JP

"Jacky" a écrit dans le message de news:
OT0%
Bonjour,

Le menu donnée/validation pourrait le faire
Sélection de la plage(commence en B2 pour l'exemple)
Donnée/validation
Autoriser==> personnalisé
Formule ==> ²&C2=""
Eventellement configurer les messages d'alerte
--
Salutations
JJ


"j-pascal" a écrit dans le message de
news:
Ot6H%
Bonjour,

Problème :

Dans la colonne A, j'ai des noms.

Est-il possible d'empêcher la suppression du nom (et d'avoir
une bulle
pour informer l'utilisateur !) si les colonnes B et C (ie) de
la ligne
correspondante contiennent des valeurs non nulles ?

Merci d'avance pour vos lumières ...

--
Cordialement @+
JP










































Avatar
Jacky
Re...
Essaie ceci
'---------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [c9:c20]) Is Nothing And Target.Count = 1 Then
Application.EnableEvents = False
' If Target.Row > 8 And Target.Row < 251 Then 'ajout (ne fonctionne
pas !)
If Application.Sum(Range("f" & Target.Row & ":" & "m" &
Target.Row)) > 0 Then
Target = [mémo]
MsgBox "Interdit"
End If
'End If 'ajout
End If
Application.EnableEvents = True

ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = Range("AW3").Value
Range("D6").Select '(j'ai mis ça pour désélectionner le bouton !)

End Sub
'-----------------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, [c9:c20]) Is Nothing And Target.Count = 1 Then
ActiveWorkbook.Names.Add Name:="mémo", RefersToR1C1:="=" & Chr(34) &
Target.Value & Chr(34)
'End If

If Application.Sum(Range("f" & Target.Row & ":" & "m" & Target.Row)) > 0
Then
On Error Resume Next
Shapes("monshape").Visible = True
If Err <> 0 Then creeShape: Target.Select
Shapes("monshape").Left = ActiveCell.Left
Shapes("monshape").Top = ActiveCell.Top + ActiveCell.Height + 3
Shapes("monshape").TextFrame.Characters.Text = "Sup interdit"
Else
On Error Resume Next
Shapes("monshape").Visible = False
End If
End If
End Sub
'---------------------------
--
Salutations
JJ


"j-pascal" a écrit dans le message de news:

Re,

Un (tout petit) bout du fichier avec un cadre pour résumer la question ;-)

http://cjoint.com/?hDvJ7PyeiL

Je n'ai pas ajusté le code pour les Tris, etc, mais théoriquement tu n'en
as pas besoin.

D'avance, merci !

JP


Avatar
j-pascal
Re,

Magnifique +++

Merci beaucoup !

Si j'osais ... Que faudrait-il ajouter à la ligne suivante pour "détecter"
(en plus) la présence d'un
commentaire situé entre les colonnes P et AT ? :

"If Application.Sum(Range("f" & Target.Row & ":" & "m" & Target.Row)) > 0"

A bientôt ?

JP



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

Re...
Essaie ceci
'---------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [c9:c20]) Is Nothing And Target.Count = 1 Then
Application.EnableEvents = False
' If Target.Row > 8 And Target.Row < 251 Then 'ajout (ne fonctionne
pas !)
If Application.Sum(Range("f" & Target.Row & ":" & "m" &
Target.Row)) > 0 Then
Target = [mémo]
MsgBox "Interdit"
End If
'End If 'ajout
End If
Application.EnableEvents = True

ActiveSheet.Shapes("Button 98").Select
Selection.Characters.Text = Range("AW3").Value
Range("D6").Select '(j'ai mis ça pour désélectionner le bouton !)

End Sub
'-----------------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, [c9:c20]) Is Nothing And Target.Count = 1 Then
ActiveWorkbook.Names.Add Name:="mémo", RefersToR1C1:="=" & Chr(34) &
Target.Value & Chr(34)
'End If

If Application.Sum(Range("f" & Target.Row & ":" & "m" & Target.Row)) > 0
Then
On Error Resume Next
Shapes("monshape").Visible = True
If Err <> 0 Then creeShape: Target.Select
Shapes("monshape").Left = ActiveCell.Left
Shapes("monshape").Top = ActiveCell.Top + ActiveCell.Height + 3
Shapes("monshape").TextFrame.Characters.Text = "Sup interdit"
Else
On Error Resume Next
Shapes("monshape").Visible = False
End If
End If
End Sub
'---------------------------
--
Salutations
JJ


"j-pascal" a écrit dans le message de news:

Re,

Un (tout petit) bout du fichier avec un cadre pour résumer la question
;-)

http://cjoint.com/?hDvJ7PyeiL

Je n'ai pas ajusté le code pour les Tris, etc, mais théoriquement tu n'en
as pas besoin.

D'avance, merci !

JP






1 2 3 4