Sélection de certaines cellules non autorisée
Bonjour à Tous,
Malgré mes plusieurs tentatives et vue mes piètres connaissances en vba, je n’arrive pas à solutionner cette boucle qui est certainement facile à mettre en application.
Le but est de ne pas permettre à l’utilisateur de sélectionner certaines cellules de la colonne C.
Les cellules en question sont :
C3 – C4 – C6 – C7 – C9 – C10 ect … jusqu’à la C573 – 574 – 576 et C577.
Pour exemple, lorsque l'utilisateur sélectionne la cellule C4 ou la cellule C3, c’est la cellule C2 qui sera sélectionnée.
De même, lorsqu’il sélectionne la cellule C7 ou C6, c’est la cellule C5 qui sera sélectionnée.
Le code qui suit est fonctionnel mais il est mal écrit, je suis convaincu qu’il sera mieux écrit avec une boucle en lieu et place de tous ces tests que j’ai mis.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
For Each C In Target
If C.Address(0, 0) = "C3" Then Target.Offset(-1, 0).Select
If C.Address(0, 0) = "C4" Then Target.Offset(-1, 0).Select
If C.Address(0, 0) = "C6" Then Target.Offset(-1, 0).Select
If C.Address(0, 0) = "C7" Then Target.Offset(-1, 0).Select
If C.Address(0, 0) = "C9" Then Target.Offset(-1, 0).Select
If C.Address(0, 0) = "C10" Then Target.Offset(-1, 0).Select
Ect …..
If C.Address(0, 0) = "C570" Then Target.Offset(-1, 0).Select
If C.Address(0, 0) = "C571" Then Target.Offset(-1, 0).Select
If C.Address(0, 0) = "C573" Then Target.Offset(-1, 0).Select
If C.Address(0, 0) = "C574" Then Target.Offset(-1, 0).Select
If C.Address(0, 0) = "C576" Then Target.Offset(-1, 0).Select
If C.Address(0, 0) = "C577" Then Target.Offset(-1, 0).Select
Next C
Merci d'avance de vos propositions.
Bonjour,
A placer dans la feuille concernée.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Union([C5], [C8],[C575])) Is Nothing Then
Application.EnableEvents = False
Cells(Target.Row, "B").Select
Application.EnableEvents = True
End If
End Sub
Cordialement
Bonjour,
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim d%
If Not Intersect(Target.Cells(1, 1), Me.Range("C2:C577")) Is Nothing Then
d = Target.Row Mod 3
If d <> 2 Then
Target.Cells(-d, 1).Select
Else
Target.Cells(1, 1).Select
End If
End If
End Sub
Cordialement.
Bonjour ddetp88 et MFerrand,
Merci pour vos deux réponses.
La solution proposée par ddetp88 répond en partie à mes attentes, dans le sens qu'elle n'autorise pas la sélection des cellules dans la colonne C, mais le fait qu'elle se positionne dans la colonne B ne me convient pas.
Par contre la solution proposée par MFerrand réponds totalement à mes attentes et me convient parfaitement, d'ailleurs je vais m'inspirer pour apporter des solutions à d'autres cas du même genre qui se présentent chez moi, si je n'y arrive pas, j'espère que MFerrand me permettra de le contacter pour un petite aide.
En attendant, encore merci à tous les deux pour vos contributions.
Salutations.
Comme annoncé dans mon message précèdent, j’ai repris le code de MFerrand afin de le modifier en espérant que je trouverais une solution.
Vu que les résultats ne sont pas concluants, je m’adresse alors aux experts parmi vous et principalement à MFerrand afin de solliciter vos connaissances.
Tout se joue encore dans la colonne C.
Le but est lorsqu’on sélectionne la cellule C3, c’est la cellule C2 qui sera sélectionnée.
De même, lorsqu’on sélectionne la cellule C4, c’est la cellule C2 qui sera sélectionnée.
De même, lorsqu’on sélectionne la cellule C5, c’est la cellule C2 qui sera sélectionnée.
De même, lorsqu’on sélectionne la cellule C6, c’est la cellule C2 qui sera sélectionnée.
On fait de même pour les cellules suivantes :
Lorsqu’on sélectionne soit C8 ou C9 ou C10 ou C11, c’est la cellule C7 qui sera sélectionnée.
Et ainsi de suite jusqu’à la cellule 381
Voici le code que j’ai mis en place :
For Each C In Target
If C.Address(0, 0) = "C3" Then Target.Offset(-1, 0).Select
If C.Address(0, 0) = "C4" Then Target.Offset(-2, 0).Select
If C.Address(0, 0) = "C5" Then Target.Offset(-3, 0).Select
If C.Address(0, 0) = "C6" Then Target.Offset(-3, 0).Select
If C.Address(0, 0) = "C8" Then Target.Offset(-1, 0).Select
If C.Address(0, 0) = "C9" Then Target.Offset(-2, 0).Select
If C.Address(0, 0) = "C10" Then Target.Offset(-3, 0).Select
If C.Address(0, 0) = "C11" Then Target.Offset(-3, 0).Select
If C.Address(0, 0) = "C13" Then Target.Offset(-1, 0).Select
If C.Address(0, 0) = "C14" Then Target.Offset(-2, 0).Select
If C.Address(0, 0) = "C15" Then Target.Offset(-3, 0).Select
If C.Address(0, 0) = "C16" Then Target.Offset(-3, 0).Select
Etc.…
If C.Address(0, 0) = "C378" Then Target.Offset(-1, 0).Select
If C.Address(0, 0) = "C379" Then Target.Offset(-2, 0).Select
If C.Address(0, 0) = "C380" Then Target.Offset(-3, 0).Select
If C.Address(0, 0) = "C381" Then Target.Offset(-3, 0).Select
Next C
Merci d’avance de vos contributions.
Amicalement.
Bonjour,
Pour t'inspirer de ma solution, il faut faire :
d = (Target.Row + 2) Mod 5
If d <> 4 Then
Target.Cells(-d, 1).Select
Else
Target.Cells(1, 1).Select
End If
Cordialement.
Bonsoir MFerrand,
Un seul mot : "MAGNIFIQUE"
Merci pour la solution et la réponse rapide.
Cordiale poignée de mains.