Excel VBA interdire l'accès à une plage
Résolu/Fermé
Pab
-
6 janv. 2011 à 08:30
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 6 janv. 2011 à 10:13
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 6 janv. 2011 à 10:13
A voir également:
- Empêcher modification cellule excel vba
- Excel cellule couleur si condition texte - Guide
- Aller à la ligne dans une cellule excel - Guide
- Liste déroulante excel - Guide
- Excel empêcher modification cellule - Guide
- Formule excel pour additionner plusieurs cellules - Guide
3 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
6 janv. 2011 à 08:34
6 janv. 2011 à 08:34
Salut,
Tu peux "encadrer" ton range en faisant plusieurs If And :
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
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
6 janv. 2011 à 09:31
6 janv. 2011 à 09:31
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
Merci, en effet, c'est beaucoup mieux. Mais tu as oublié le but de ma macro qui est d'empécher les modifications sur ce tableau. Ma macro adapté avec ton aide est la suivante :
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
Target.Offset(1, 0).Select
Application.EnableEvents = True
End If
End Sub
MAIS, la formule Target.Offset(1,0).select me fait sélectionner la cellule en dessous de celle cliquée. Je voudrais que ma formule sélectionne la case "A1". Est ce possible ?
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
Target.Offset(1, 0).Select
Application.EnableEvents = True
End If
End Sub
MAIS, la formule Target.Offset(1,0).select me fait sélectionner la cellule en dessous de celle cliquée. Je voudrais que ma formule sélectionne la case "A1". Est ce possible ?
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
6 janv. 2011 à 09:59
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é...
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
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
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
6 janv. 2011 à 10:13
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!
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!
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 ?
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 ?