Posez votre question Signaler

Excel VBA interdire l'accès à une plage [Résolu]

Pab - Dernière réponse le 6 janv. 2011 à 10:13
Bonjour à tous,
Mon problème est le suivant :
J'ai créé un code VBA qui me permet d'interdire l'accès à une cellule. Ce code est le suivant :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address(RowAbsolute:=False, ColumnAbsolute:=False) = "D8" Then
MsgBox "acces interdit pour tout le monde"
Application.EnableEvents = False
Target.Offset(1, 0).Select
Application.EnableEvents = True
End If
Très simple en apparence ...
Mais, je voudrais que ce code s'applique à une plage de cellule, et non pas à la seule cellule D8. Le fait de remplacer "D8" par "D8:F20" ne fonctionne pas.
Voila, j'espere avoir été clair.
Merci d'avance !!!
Lire la suite 

Excel VBA interdire l'accès à une plage »

7 réponses
Réponse
+1
moins plus
Bon alors on va reprendre tout depuis le début avec la bonne base VBA. Je t'ai donné une méthode qui "suivait" ton début de code, mais le plus simple pour toi est d'utiliser Intersect comme ceci :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("tableau")) Is Nothing Then 'à adapter, tableau est le nom définit de ta plage de cellules
    MsgBox "ok dans la plage"
Else
    MsgBox "pas dans la plage"
End If
End Sub
pijaku- 6 janv. 2011 à 09:59
Je n'ai rien oublié. Je t'ai donné le code adéquat, à toi à l'adapter... Pour ta question, regarde ce code et ... avoue qu'il n'y avait rien de compliqué...

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
If Not Intersect(Target, Range("tableau")) Is Nothing Then 
    MsgBox "acces interdit pour tout le monde" 
    Application.EnableEvents = False 
    Range("A1").Select 
    Application.EnableEvents = True 
End If 
End Sub 

Petit détail important lorsque tu postes sur un forum (ici ou ailleurs): pour plus de lisibilité, au dessus de chacun de tes messagfes, lorsque tu les compose, il y a des "balises". Pour ici, tu vois : B, I, S, <>. B = texte en gras, I italique, S souligné et <> pour le code. Chaque fois que tu places du code ici, sélectionne le en entier et clique sur <>.
Bonne journée
Pab - 6 janv. 2011 à 10:09
Merci beaucoup, pour ma question en effet je n'avais pas réfléchis.
Et entendu pour le conseil sur les forums
Merci bien, bonne journée à toi aussi
pijaku- 6 janv. 2011 à 10:13
de rien.
Dernière chose, je le fais pour toi aujourd'hui, mais penses, à l'avenir, à cliquer sur "résolu" en haut de sujet, lorsque c'est le cas.
A+ n'hésite pas à t'inscrire ici... c'est gratuit et ça peux rapporter pas mal...de soluces!
Ajouter un commentaire
Réponse
+0
moins plus
Salut,
Tu peux "encadrer" ton range en faisant plusieurs If And :
If Target.Row > 7 And Target.Row < 21 And Target.Column >3 And Target.Column < 7 Then 

Ajouter un commentaire
Réponse
+0
moins plus
Merci bien, en théorie c'est la solution. Sauf que j'ai oublié une précision. Je ne connais pas la taille de la plage. Du moins en nombre de ligne. Je sais qu'il y a 3 colonnes, mais le nombre de ligne est varible (bien que le même pour chaque colonne).
Une autre macro m'a permis de nommer mon tableau dynamiquement. Il s'appelle "tableau", et lorsque je rajoute une ligne, ma plage s'appelle toujours "tableau" (en prenant compte la ligne en plus).

Est il possible d'insérer ce nom "tableau" dans ma macro ?
Ajouter un commentaire
Ce document intitulé « Excel VBA interdire l'accès à une plage » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?