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.

Rechercher des sujets similaires à "selection certaines autorisee"