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

Message d'erreur avec VBA

8 réponses
Avatar
Caroline L.
Bonjour à tous,

J'ai une macro qui fonctionne très bien. Le problème c'est que je veux la
copier dans un autre fichier et voilà que le message d'erreur suivant
s'affiche toujours :
Erreur d'exécution '1004'
Impossible de définir la propriété Locked de la classe Range.
En cliquant sur Débogage, la ligne suivante est en jaune :
plage.Locked = False
Le message d'erreur apparaît lorsque je suis sur la feuille et que je clique
n'importe où (n'importe quelle cellule). Je cherche dans l'aide mais je ne
vois pas.

Voici la macro :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim ws As Worksheet
Set ws = ActiveSheet
Set plage = Union(Range("B1"), Range("D9:J22"), Range("D26:J39"),
Range("D43:J45"))

If ws.ProtectContents Then
ws.Unprotect "1234"
plage.Locked = True
ws.Protect "1234"
Else
plage.Locked = False <------------------------ligne en jaune (dans le
débogage)
Application.EnableEvents = False


If Not Intersect(Target, plage) Is Nothing Then
' MsgBox "vous êtes autorisé à selectionner ces cellules"
Else
' MsgBox "vous n'êtes pas autorisé à selectionner ces cellules"
Range("D9").Select
End If
Application.EnableEvents = True

End If

End Sub


Private Sub Worksheet_Change(ByVal Target As Range)

Set ws = ActiveSheet
If ws.ProtectContents Then
ws.Unprotect "1234"
Target.ClearContents
ws.Protect "1234"
End If

End Sub


Merci beaucoup de m'aider...
Caroline

8 réponses

Avatar
MichDenis
Bonjour Caroline,

Lorsque tu écris du code dans un événement de la feuille module, si ton code fait référence à des objets "Range" de la
feuille auquel il appartient, tu n'as pas besoin de faire référence à la feuille, les objets nommés dans ce code sont
réputés "appartenir" à cette feuille. Si tu fais référence à des objets Range qui appartiennt à une autre feuille, tu
dois utiliser la référence "Feuille" à laquelles ces objets appartiennent.

à cet égard ton code n'est pas clair :

L'Utilisation du mot Me fait référence à l'objet du module Feuil dans lequel le code est inscrit.

'---------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim ws As Worksheet
Set ws = ActiveSheet

'Ta variable plage fait référence à des objets "Range" qui appartiennent à la feuille du module feuille . De la manière
dont tu as utilisé la variable WS , cette dernière ne sert à rien !
Set plage = Union(Range("B1"), Range("D9:J22"), Range("D26:J39"),Range("D43:J45"))

Set plage = Union(Range("B1"), Range("D9:J22"), _
Range("D26:J39"), Range("D43:J45"))

If Me.ProtectContents Then
Me.Unprotect "1234"
plage.Locked = True
Me.Protect "1234"
Else
plage.Locked = False

If Not Intersect(Target, plage) Is Nothing Then
' MsgBox "vous êtes autorisé à selectionner ces cellules"
Else
' MsgBox "vous n'êtes pas autorisé à selectionner ces cellules"
Application.EnableEvents = False
Range("D9").Select
Application.EnableEvents = True
End If
Application.EnableEvents = True

End If
'---------------------------


Salutations!










"Caroline L." a écrit dans le message de news: ZPj0e.116889$
Bonjour à tous,

J'ai une macro qui fonctionne très bien. Le problème c'est que je veux la
copier dans un autre fichier et voilà que le message d'erreur suivant
s'affiche toujours :
Erreur d'exécution '1004'
Impossible de définir la propriété Locked de la classe Range.
En cliquant sur Débogage, la ligne suivante est en jaune :
plage.Locked = False
Le message d'erreur apparaît lorsque je suis sur la feuille et que je clique
n'importe où (n'importe quelle cellule). Je cherche dans l'aide mais je ne
vois pas.

Voici la macro :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim ws As Worksheet
Set ws = ActiveSheet
Set plage = Union(Range("B1"), Range("D9:J22"), Range("D26:J39"),
Range("D43:J45"))

If ws.ProtectContents Then
ws.Unprotect "1234"
plage.Locked = True
ws.Protect "1234"
Else
plage.Locked = False <------------------------ligne en jaune (dans le
débogage)
Application.EnableEvents = False


If Not Intersect(Target, plage) Is Nothing Then
' MsgBox "vous êtes autorisé à selectionner ces cellules"
Else
' MsgBox "vous n'êtes pas autorisé à selectionner ces cellules"
Range("D9").Select
End If
Application.EnableEvents = True

End If

End Sub


Private Sub Worksheet_Change(ByVal Target As Range)

Set ws = ActiveSheet
If ws.ProtectContents Then
ws.Unprotect "1234"
Target.ClearContents
ws.Protect "1234"
End If

End Sub


Merci beaucoup de m'aider...
Caroline
Avatar
Caroline L.
Bonjour MichDenis,

oh, là je suis pas mal étourdi par tes explications !

La macro m'a été fourni par un membre de ce groupe discussion (je le
remercie)... elle fonctionnait très bien... jusqu'à ce que je la copie dans
un autre fichier. C'est dans les autres fichiers qu'elle créé des problèmes.

Puisque je ne suis pas l'auteure de cette macro, je ne peux dire pourquoi
ceci ou cela est utilisé.

J'ai essayé avec tes modifications (avec le Me) mais non, encore le même
message d'erreur. Est-ce que les deux lignes suivantes doivent être là ?
Dim ws As Worksheet
Set ws = ActiveSheet

merci,
Caroline




"MichDenis" a écrit dans le message de news:
uRw8uX#
Bonjour Caroline,

Lorsque tu écris du code dans un événement de la feuille module, si ton
code fait référence à des objets "Range" de la

feuille auquel il appartient, tu n'as pas besoin de faire référence à la
feuille, les objets nommés dans ce code sont

réputés "appartenir" à cette feuille. Si tu fais référence à des objets
Range qui appartiennt à une autre feuille, tu

dois utiliser la référence "Feuille" à laquelles ces objets appartiennent.

à cet égard ton code n'est pas clair :

L'Utilisation du mot Me fait référence à l'objet du module Feuil dans
lequel le code est inscrit.


'---------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim ws As Worksheet
Set ws = ActiveSheet

'Ta variable plage fait référence à des objets "Range" qui appartiennent à
la feuille du module feuille . De la manière

dont tu as utilisé la variable WS , cette dernière ne sert à rien !
Set plage = Union(Range("B1"), Range("D9:J22"),
Range("D26:J39"),Range("D43:J45"))


Set plage = Union(Range("B1"), Range("D9:J22"), _
Range("D26:J39"), Range("D43:J45"))

If Me.ProtectContents Then
Me.Unprotect "1234"
plage.Locked = True
Me.Protect "1234"
Else
plage.Locked = False

If Not Intersect(Target, plage) Is Nothing Then
' MsgBox "vous êtes autorisé à selectionner ces cellules"
Else
' MsgBox "vous n'êtes pas autorisé à selectionner ces cellules"
Application.EnableEvents = False
Range("D9").Select
Application.EnableEvents = True
End If
Application.EnableEvents = True

End If
'---------------------------


Salutations!










"Caroline L." a écrit dans le message de news:
ZPj0e.116889$

Bonjour à tous,

J'ai une macro qui fonctionne très bien. Le problème c'est que je veux la
copier dans un autre fichier et voilà que le message d'erreur suivant
s'affiche toujours :
Erreur d'exécution '1004'
Impossible de définir la propriété Locked de la classe Range.
En cliquant sur Débogage, la ligne suivante est en jaune :
plage.Locked = False
Le message d'erreur apparaît lorsque je suis sur la feuille et que je
clique

n'importe où (n'importe quelle cellule). Je cherche dans l'aide mais je ne
vois pas.

Voici la macro :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim ws As Worksheet
Set ws = ActiveSheet
Set plage = Union(Range("B1"), Range("D9:J22"), Range("D26:J39"),
Range("D43:J45"))

If ws.ProtectContents Then
ws.Unprotect "1234"
plage.Locked = True
ws.Protect "1234"
Else
plage.Locked = False <------------------------ligne en jaune (dans
le

débogage)
Application.EnableEvents = False


If Not Intersect(Target, plage) Is Nothing Then
' MsgBox "vous êtes autorisé à selectionner ces cellules"
Else
' MsgBox "vous n'êtes pas autorisé à selectionner ces cellules"
Range("D9").Select
End If
Application.EnableEvents = True

End If

End Sub


Private Sub Worksheet_Change(ByVal Target As Range)

Set ws = ActiveSheet
If ws.ProtectContents Then
ws.Unprotect "1234"
Target.ClearContents
ws.Protect "1234"
End If

End Sub


Merci beaucoup de m'aider...
Caroline





Avatar
MichDenis
Bonjour Caroline,

Tu peux m'envoyer ton fichier ... directement dans ma boîte aux lettres .. j'y regarderai de plus près ! Je n'ai pas
besoin de tout le contenu du classeur, seulement de l'essentiel.


Salutations!




"Caroline L." a écrit dans le message de news: aDl0e.119701$
Bonjour MichDenis,

oh, là je suis pas mal étourdi par tes explications !

La macro m'a été fourni par un membre de ce groupe discussion (je le
remercie)... elle fonctionnait très bien... jusqu'à ce que je la copie dans
un autre fichier. C'est dans les autres fichiers qu'elle créé des problèmes.

Puisque je ne suis pas l'auteure de cette macro, je ne peux dire pourquoi
ceci ou cela est utilisé.

J'ai essayé avec tes modifications (avec le Me) mais non, encore le même
message d'erreur. Est-ce que les deux lignes suivantes doivent être là ?
Dim ws As Worksheet
Set ws = ActiveSheet

merci,
Caroline




"MichDenis" a écrit dans le message de news:
uRw8uX#
Bonjour Caroline,

Lorsque tu écris du code dans un événement de la feuille module, si ton
code fait référence à des objets "Range" de la

feuille auquel il appartient, tu n'as pas besoin de faire référence à la
feuille, les objets nommés dans ce code sont

réputés "appartenir" à cette feuille. Si tu fais référence à des objets
Range qui appartiennt à une autre feuille, tu

dois utiliser la référence "Feuille" à laquelles ces objets appartiennent.

à cet égard ton code n'est pas clair :

L'Utilisation du mot Me fait référence à l'objet du module Feuil dans
lequel le code est inscrit.


'---------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim ws As Worksheet
Set ws = ActiveSheet

'Ta variable plage fait référence à des objets "Range" qui appartiennent à
la feuille du module feuille . De la manière

dont tu as utilisé la variable WS , cette dernière ne sert à rien !
Set plage = Union(Range("B1"), Range("D9:J22"),
Range("D26:J39"),Range("D43:J45"))


Set plage = Union(Range("B1"), Range("D9:J22"), _
Range("D26:J39"), Range("D43:J45"))

If Me.ProtectContents Then
Me.Unprotect "1234"
plage.Locked = True
Me.Protect "1234"
Else
plage.Locked = False

If Not Intersect(Target, plage) Is Nothing Then
' MsgBox "vous êtes autorisé à selectionner ces cellules"
Else
' MsgBox "vous n'êtes pas autorisé à selectionner ces cellules"
Application.EnableEvents = False
Range("D9").Select
Application.EnableEvents = True
End If
Application.EnableEvents = True

End If
'---------------------------


Salutations!










"Caroline L." a écrit dans le message de news:
ZPj0e.116889$

Bonjour à tous,

J'ai une macro qui fonctionne très bien. Le problème c'est que je veux la
copier dans un autre fichier et voilà que le message d'erreur suivant
s'affiche toujours :
Erreur d'exécution '1004'
Impossible de définir la propriété Locked de la classe Range.
En cliquant sur Débogage, la ligne suivante est en jaune :
plage.Locked = False
Le message d'erreur apparaît lorsque je suis sur la feuille et que je
clique

n'importe où (n'importe quelle cellule). Je cherche dans l'aide mais je ne
vois pas.

Voici la macro :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim ws As Worksheet
Set ws = ActiveSheet
Set plage = Union(Range("B1"), Range("D9:J22"), Range("D26:J39"),
Range("D43:J45"))

If ws.ProtectContents Then
ws.Unprotect "1234"
plage.Locked = True
ws.Protect "1234"
Else
plage.Locked = False <------------------------ligne en jaune (dans
le

débogage)
Application.EnableEvents = False


If Not Intersect(Target, plage) Is Nothing Then
' MsgBox "vous êtes autorisé à selectionner ces cellules"
Else
' MsgBox "vous n'êtes pas autorisé à selectionner ces cellules"
Range("D9").Select
End If
Application.EnableEvents = True

End If

End Sub


Private Sub Worksheet_Change(ByVal Target As Range)

Set ws = ActiveSheet
If ws.ProtectContents Then
ws.Unprotect "1234"
Target.ClearContents
ws.Protect "1234"
End If

End Sub


Merci beaucoup de m'aider...
Caroline





Avatar
anonymousA
re,

je ne constate aucune erreur particulière. J'ai copié tant ton code que
le mien sur plusieurs fichiers différents et il ne se plante pas.
Par ailleurs Me désigne ici la feuille mais de toute façon si on
n'écrit pas Me, il faudra écrire la désignation d'un objet Feuille (
activesheet bien souvent) donc je ne vois pas vraiment le gain à l'enlever.

Dans quelle conditions exactement ce code te plante t-il ?

A+

Bonjour MichDenis,

oh, là je suis pas mal étourdi par tes explications !

La macro m'a été fourni par un membre de ce groupe discussion (je le
remercie)... elle fonctionnait très bien... jusqu'à ce que je la copie dans
un autre fichier. C'est dans les autres fichiers qu'elle créé des problèmes.

Puisque je ne suis pas l'auteure de cette macro, je ne peux dire pourquoi
ceci ou cela est utilisé.

J'ai essayé avec tes modifications (avec le Me) mais non, encore le même
message d'erreur. Est-ce que les deux lignes suivantes doivent être là ?
Dim ws As Worksheet
Set ws = ActiveSheet

merci,
Caroline




"MichDenis" a écrit dans le message de news:
uRw8uX#

Bonjour Caroline,

Lorsque tu écris du code dans un événement de la feuille module, si ton


code fait référence à des objets "Range" de la

feuille auquel il appartient, tu n'as pas besoin de faire référence à la


feuille, les objets nommés dans ce code sont

réputés "appartenir" à cette feuille. Si tu fais référence à des objets


Range qui appartiennt à une autre feuille, tu

dois utiliser la référence "Feuille" à laquelles ces objets appartiennent.

à cet égard ton code n'est pas clair :

L'Utilisation du mot Me fait référence à l'objet du module Feuil dans


lequel le code est inscrit.

'---------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim ws As Worksheet
Set ws = ActiveSheet

'Ta variable plage fait référence à des objets "Range" qui appartiennent à


la feuille du module feuille . De la manière

dont tu as utilisé la variable WS , cette dernière ne sert à rien !
Set plage = Union(Range("B1"), Range("D9:J22"),


Range("D26:J39"),Range("D43:J45"))

Set plage = Union(Range("B1"), Range("D9:J22"), _
Range("D26:J39"), Range("D43:J45"))

If Me.ProtectContents Then
Me.Unprotect "1234"
plage.Locked = True
Me.Protect "1234"
Else
plage.Locked = False

If Not Intersect(Target, plage) Is Nothing Then
' MsgBox "vous êtes autorisé à selectionner ces cellules"
Else
' MsgBox "vous n'êtes pas autorisé à selectionner ces cellules"
Application.EnableEvents = False
Range("D9").Select
Application.EnableEvents = True
End If
Application.EnableEvents = True

End If
'---------------------------


Salutations!










"Caroline L." a écrit dans le message de news:


ZPj0e.116889$

Bonjour à tous,

J'ai une macro qui fonctionne très bien. Le problème c'est que je veux la
copier dans un autre fichier et voilà que le message d'erreur suivant
s'affiche toujours :
Erreur d'exécution '1004'
Impossible de définir la propriété Locked de la classe Range.
En cliquant sur Débogage, la ligne suivante est en jaune :
plage.Locked = False
Le message d'erreur apparaît lorsque je suis sur la feuille et que je


clique

n'importe où (n'importe quelle cellule). Je cherche dans l'aide mais je ne
vois pas.

Voici la macro :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim ws As Worksheet
Set ws = ActiveSheet
Set plage = Union(Range("B1"), Range("D9:J22"), Range("D26:J39"),
Range("D43:J45"))

If ws.ProtectContents Then
ws.Unprotect "1234"
plage.Locked = True
ws.Protect "1234"
Else
plage.Locked = False <------------------------ligne en jaune (dans


le

débogage)
Application.EnableEvents = False


If Not Intersect(Target, plage) Is Nothing Then
' MsgBox "vous êtes autorisé à selectionner ces cellules"
Else
' MsgBox "vous n'êtes pas autorisé à selectionner ces cellules"
Range("D9").Select
End If
Application.EnableEvents = True

End If

End Sub


Private Sub Worksheet_Change(ByVal Target As Range)

Set ws = ActiveSheet
If ws.ProtectContents Then
ws.Unprotect "1234"
Target.ClearContents
ws.Protect "1234"
End If

End Sub


Merci beaucoup de m'aider...
Caroline










Avatar
anonymousA
je viens d'ailleurs de m'apercevoir que mon code initial pas plus que le
tien ne comportait le mot Me.D'où il vient celui-là ?

Enfin, de toute façon ca ne change rien au fait que ca ne se plante
toujours pas.

A+

Bonjour MichDenis,

oh, là je suis pas mal étourdi par tes explications !

La macro m'a été fourni par un membre de ce groupe discussion (je le
remercie)... elle fonctionnait très bien... jusqu'à ce que je la copie dans
un autre fichier. C'est dans les autres fichiers qu'elle créé des problèmes.

Puisque je ne suis pas l'auteure de cette macro, je ne peux dire pourquoi
ceci ou cela est utilisé.

J'ai essayé avec tes modifications (avec le Me) mais non, encore le même
message d'erreur. Est-ce que les deux lignes suivantes doivent être là ?
Dim ws As Worksheet
Set ws = ActiveSheet

merci,
Caroline




"MichDenis" a écrit dans le message de news:
uRw8uX#

Bonjour Caroline,

Lorsque tu écris du code dans un événement de la feuille module, si ton


code fait référence à des objets "Range" de la

feuille auquel il appartient, tu n'as pas besoin de faire référence à la


feuille, les objets nommés dans ce code sont

réputés "appartenir" à cette feuille. Si tu fais référence à des objets


Range qui appartiennt à une autre feuille, tu

dois utiliser la référence "Feuille" à laquelles ces objets appartiennent.

à cet égard ton code n'est pas clair :

L'Utilisation du mot Me fait référence à l'objet du module Feuil dans


lequel le code est inscrit.

'---------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim ws As Worksheet
Set ws = ActiveSheet

'Ta variable plage fait référence à des objets "Range" qui appartiennent à


la feuille du module feuille . De la manière

dont tu as utilisé la variable WS , cette dernière ne sert à rien !
Set plage = Union(Range("B1"), Range("D9:J22"),


Range("D26:J39"),Range("D43:J45"))

Set plage = Union(Range("B1"), Range("D9:J22"), _
Range("D26:J39"), Range("D43:J45"))

If Me.ProtectContents Then
Me.Unprotect "1234"
plage.Locked = True
Me.Protect "1234"
Else
plage.Locked = False

If Not Intersect(Target, plage) Is Nothing Then
' MsgBox "vous êtes autorisé à selectionner ces cellules"
Else
' MsgBox "vous n'êtes pas autorisé à selectionner ces cellules"
Application.EnableEvents = False
Range("D9").Select
Application.EnableEvents = True
End If
Application.EnableEvents = True

End If
'---------------------------


Salutations!










"Caroline L." a écrit dans le message de news:


ZPj0e.116889$

Bonjour à tous,

J'ai une macro qui fonctionne très bien. Le problème c'est que je veux la
copier dans un autre fichier et voilà que le message d'erreur suivant
s'affiche toujours :
Erreur d'exécution '1004'
Impossible de définir la propriété Locked de la classe Range.
En cliquant sur Débogage, la ligne suivante est en jaune :
plage.Locked = False
Le message d'erreur apparaît lorsque je suis sur la feuille et que je


clique

n'importe où (n'importe quelle cellule). Je cherche dans l'aide mais je ne
vois pas.

Voici la macro :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim ws As Worksheet
Set ws = ActiveSheet
Set plage = Union(Range("B1"), Range("D9:J22"), Range("D26:J39"),
Range("D43:J45"))

If ws.ProtectContents Then
ws.Unprotect "1234"
plage.Locked = True
ws.Protect "1234"
Else
plage.Locked = False <------------------------ligne en jaune (dans


le

débogage)
Application.EnableEvents = False


If Not Intersect(Target, plage) Is Nothing Then
' MsgBox "vous êtes autorisé à selectionner ces cellules"
Else
' MsgBox "vous n'êtes pas autorisé à selectionner ces cellules"
Range("D9").Select
End If
Application.EnableEvents = True

End If

End Sub


Private Sub Worksheet_Change(ByVal Target As Range)

Set ws = ActiveSheet
If ws.ProtectContents Then
ws.Unprotect "1234"
Target.ClearContents
ws.Protect "1234"
End If

End Sub


Merci beaucoup de m'aider...
Caroline










Avatar
jps
"Caroline L." a écrit dans le message de
news:aDl0e.119701$
Bonjour MichDenis,

oh, là je suis pas mal étourdi par tes explications !
toi aussi, caroline?

jps

Avatar
Caroline L.
Bonjour AnonymousA,

Juste pour être certaine, je dois placer le code dans la feuille concernée,
n'est-pas ? (pas dans un module)

Voici le moment où ça plante. J'ouvre un nouveau classeur que je nomme par
exemple Classeur1. L'onglet Feuil1 est renommé "Gestion".
J'ai le fichier Horaire dans lequel la macro fonctionne très bien. Le code
est placé dans la feuille Gestion.

Donc, nous sommes dans le fichier Horaire, sur la feuille Gestion (pas dans
le VBA). Je sélectionne tout et je fais un copier de l'onglet Gestion (la
mise en forme, le texte et tout) et je colle dans la feuille Gestion du
fichier Classeur1. Comme le code le prévoit, il y a une plage qui ne doit
jamais être modifiée (avec ou sans la protection de la feuille). Là je vais
dans ALT-F11 et je copie le code de la feuille Gestion du fichier Horaire et
je "colle" ce code dans l'espace code de la feuille Gestion du fichier
Classeur1. Je ferme le ALT-F11 et je reviens dans Excel. Lorsque je clique
sur n'importe laquelle des cellules, là il y a le message d'erreur.
Hum... j'espère que mes explications sont claires. Si tu as des questions,
n'hésite pas.

Pour ce qui est du "Me", c'est MichDenis qui l'a ajouté (tu peux lire son
point de vue et explications en début de lignée). Donc, j'utilise le code
qui est dans ma question initiale.

Merci
Caroline




"anonymousA" a écrit dans le message de news:
4241ea8f$0$3134$
re,

je ne constate aucune erreur particulière. J'ai copié tant ton code que
le mien sur plusieurs fichiers différents et il ne se plante pas.
Par ailleurs Me désigne ici la feuille mais de toute façon si on
n'écrit pas Me, il faudra écrire la désignation d'un objet Feuille (
activesheet bien souvent) donc je ne vois pas vraiment le gain à
l'enlever.


Dans quelle conditions exactement ce code te plante t-il ?

A+

Bonjour MichDenis,

oh, là je suis pas mal étourdi par tes explications !

La macro m'a été fourni par un membre de ce groupe discussion (je le
remercie)... elle fonctionnait très bien... jusqu'à ce que je la copie
dans


un autre fichier. C'est dans les autres fichiers qu'elle créé des
problèmes.



Puisque je ne suis pas l'auteure de cette macro, je ne peux dire
pourquoi


ceci ou cela est utilisé.

J'ai essayé avec tes modifications (avec le Me) mais non, encore le même
message d'erreur. Est-ce que les deux lignes suivantes doivent être là ?
Dim ws As Worksheet
Set ws = ActiveSheet

merci,
Caroline




"MichDenis" a écrit dans le message de news:
uRw8uX#

Bonjour Caroline,

Lorsque tu écris du code dans un événement de la feuille module, si ton


code fait référence à des objets "Range" de la

feuille auquel il appartient, tu n'as pas besoin de faire référence à la


feuille, les objets nommés dans ce code sont

réputés "appartenir" à cette feuille. Si tu fais référence à des objets


Range qui appartiennt à une autre feuille, tu

dois utiliser la référence "Feuille" à laquelles ces objets
appartiennent.




à cet égard ton code n'est pas clair :

L'Utilisation du mot Me fait référence à l'objet du module Feuil dans


lequel le code est inscrit.

'---------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim ws As Worksheet
Set ws = ActiveSheet

'Ta variable plage fait référence à des objets "Range" qui appartiennent
à




la feuille du module feuille . De la manière

dont tu as utilisé la variable WS , cette dernière ne sert à rien !
Set plage = Union(Range("B1"), Range("D9:J22"),


Range("D26:J39"),Range("D43:J45"))

Set plage = Union(Range("B1"), Range("D9:J22"), _
Range("D26:J39"), Range("D43:J45"))

If Me.ProtectContents Then
Me.Unprotect "1234"
plage.Locked = True
Me.Protect "1234"
Else
plage.Locked = False

If Not Intersect(Target, plage) Is Nothing Then
' MsgBox "vous êtes autorisé à selectionner ces cellules"
Else
' MsgBox "vous n'êtes pas autorisé à selectionner ces cellules"
Application.EnableEvents = False
Range("D9").Select
Application.EnableEvents = True
End If
Application.EnableEvents = True

End If
'---------------------------


Salutations!










"Caroline L." a écrit dans le message de news:


ZPj0e.116889$

Bonjour à tous,

J'ai une macro qui fonctionne très bien. Le problème c'est que je veux
la



copier dans un autre fichier et voilà que le message d'erreur suivant
s'affiche toujours :
Erreur d'exécution '1004'
Impossible de définir la propriété Locked de la classe Range.
En cliquant sur Débogage, la ligne suivante est en jaune :
plage.Locked = False
Le message d'erreur apparaît lorsque je suis sur la feuille et que je


clique

n'importe où (n'importe quelle cellule). Je cherche dans l'aide mais je
ne



vois pas.

Voici la macro :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim ws As Worksheet
Set ws = ActiveSheet
Set plage = Union(Range("B1"), Range("D9:J22"), Range("D26:J39"),
Range("D43:J45"))

If ws.ProtectContents Then
ws.Unprotect "1234"
plage.Locked = True
ws.Protect "1234"
Else
plage.Locked = False <------------------------ligne en jaune (dans


le

débogage)
Application.EnableEvents = False


If Not Intersect(Target, plage) Is Nothing Then
' MsgBox "vous êtes autorisé à selectionner ces cellules"
Else
' MsgBox "vous n'êtes pas autorisé à selectionner ces cellules"
Range("D9").Select
End If
Application.EnableEvents = True

End If

End Sub


Private Sub Worksheet_Change(ByVal Target As Range)

Set ws = ActiveSheet
If ws.ProtectContents Then
ws.Unprotect "1234"
Target.ClearContents
ws.Protect "1234"
End If

End Sub


Merci beaucoup de m'aider...
Caroline












Avatar
anonymousA
Oui caroline, il faut bien mettre le code dans un module de feuille et pas
dans un module standard

pour le plantage, franchement je ne vois pas. Si tu veux , envoies ton
fichier de base sur ma BAL perso que je puisse faire l'essai moi-même

A+


Bonjour AnonymousA,

Juste pour être certaine, je dois placer le code dans la feuille concernée,
n'est-pas ? (pas dans un module)

Voici le moment où ça plante. J'ouvre un nouveau classeur que je nomme par
exemple Classeur1. L'onglet Feuil1 est renommé "Gestion".
J'ai le fichier Horaire dans lequel la macro fonctionne très bien. Le code
est placé dans la feuille Gestion.

Donc, nous sommes dans le fichier Horaire, sur la feuille Gestion (pas dans
le VBA). Je sélectionne tout et je fais un copier de l'onglet Gestion (la
mise en forme, le texte et tout) et je colle dans la feuille Gestion du
fichier Classeur1. Comme le code le prévoit, il y a une plage qui ne doit
jamais être modifiée (avec ou sans la protection de la feuille). Là je vais
dans ALT-F11 et je copie le code de la feuille Gestion du fichier Horaire et
je "colle" ce code dans l'espace code de la feuille Gestion du fichier
Classeur1. Je ferme le ALT-F11 et je reviens dans Excel. Lorsque je clique
sur n'importe laquelle des cellules, là il y a le message d'erreur.
Hum... j'espère que mes explications sont claires. Si tu as des questions,
n'hésite pas.

Pour ce qui est du "Me", c'est MichDenis qui l'a ajouté (tu peux lire son
point de vue et explications en début de lignée). Donc, j'utilise le code
qui est dans ma question initiale.

Merci
Caroline




"anonymousA" a écrit dans le message de news:
4241ea8f$0$3134$
re,

je ne constate aucune erreur particulière. J'ai copié tant ton code que
le mien sur plusieurs fichiers différents et il ne se plante pas.
Par ailleurs Me désigne ici la feuille mais de toute façon si on
n'écrit pas Me, il faudra écrire la désignation d'un objet Feuille (
activesheet bien souvent) donc je ne vois pas vraiment le gain à
l'enlever.


Dans quelle conditions exactement ce code te plante t-il ?

A+

Bonjour MichDenis,

oh, là je suis pas mal étourdi par tes explications !

La macro m'a été fourni par un membre de ce groupe discussion (je le
remercie)... elle fonctionnait très bien... jusqu'à ce que je la copie
dans


un autre fichier. C'est dans les autres fichiers qu'elle créé des
problèmes.



Puisque je ne suis pas l'auteure de cette macro, je ne peux dire
pourquoi


ceci ou cela est utilisé.

J'ai essayé avec tes modifications (avec le Me) mais non, encore le même
message d'erreur. Est-ce que les deux lignes suivantes doivent être là ?
Dim ws As Worksheet
Set ws = ActiveSheet

merci,
Caroline




"MichDenis" a écrit dans le message de news:
uRw8uX#

Bonjour Caroline,

Lorsque tu écris du code dans un événement de la feuille module, si ton


code fait référence à des objets "Range" de la

feuille auquel il appartient, tu n'as pas besoin de faire référence à la


feuille, les objets nommés dans ce code sont

réputés "appartenir" à cette feuille. Si tu fais référence à des objets


Range qui appartiennt à une autre feuille, tu

dois utiliser la référence "Feuille" à laquelles ces objets
appartiennent.




à cet égard ton code n'est pas clair :

L'Utilisation du mot Me fait référence à l'objet du module Feuil dans


lequel le code est inscrit.

'---------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim ws As Worksheet
Set ws = ActiveSheet

'Ta variable plage fait référence à des objets "Range" qui appartiennent
à




la feuille du module feuille . De la manière

dont tu as utilisé la variable WS , cette dernière ne sert à rien !
Set plage = Union(Range("B1"), Range("D9:J22"),


Range("D26:J39"),Range("D43:J45"))

Set plage = Union(Range("B1"), Range("D9:J22"), _
Range("D26:J39"), Range("D43:J45"))

If Me.ProtectContents Then
Me.Unprotect "1234"
plage.Locked = True
Me.Protect "1234"
Else
plage.Locked = False

If Not Intersect(Target, plage) Is Nothing Then
' MsgBox "vous êtes autorisé à selectionner ces cellules"
Else
' MsgBox "vous n'êtes pas autorisé à selectionner ces cellules"
Application.EnableEvents = False
Range("D9").Select
Application.EnableEvents = True
End If
Application.EnableEvents = True

End If
'---------------------------


Salutations!










"Caroline L." a écrit dans le message de news:


ZPj0e.116889$

Bonjour à tous,

J'ai une macro qui fonctionne très bien. Le problème c'est que je veux
la



copier dans un autre fichier et voilà que le message d'erreur suivant
s'affiche toujours :
Erreur d'exécution '1004'
Impossible de définir la propriété Locked de la classe Range.
En cliquant sur Débogage, la ligne suivante est en jaune :
plage.Locked = False
Le message d'erreur apparaît lorsque je suis sur la feuille et que je


clique

n'importe où (n'importe quelle cellule). Je cherche dans l'aide mais je
ne



vois pas.

Voici la macro :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim ws As Worksheet
Set ws = ActiveSheet
Set plage = Union(Range("B1"), Range("D9:J22"), Range("D26:J39"),
Range("D43:J45"))

If ws.ProtectContents Then
ws.Unprotect "1234"
plage.Locked = True
ws.Protect "1234"
Else
plage.Locked = False <------------------------ligne en jaune (dans


le

débogage)
Application.EnableEvents = False


If Not Intersect(Target, plage) Is Nothing Then
' MsgBox "vous êtes autorisé à selectionner ces cellules"
Else
' MsgBox "vous n'êtes pas autorisé à selectionner ces cellules"
Range("D9").Select
End If
Application.EnableEvents = True

End If

End Sub


Private Sub Worksheet_Change(ByVal Target As Range)

Set ws = ActiveSheet
If ws.ProtectContents Then
ws.Unprotect "1234"
Target.ClearContents
ws.Protect "1234"
End If

End Sub


Merci beaucoup de m'aider...
Caroline