sélection de certaines cellules non autorisée Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Répondre
H
Harzer
Membre habitué
Membre habitué
Messages : 121
Appréciation reçue : 1
Inscrit le : 20 février 2012
Version d'Excel : 2010

Message par Harzer » 7 janvier 2017, 01:41

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.
Avatar du membre
ddetp88
Membre impliqué
Membre impliqué
Messages : 1'326
Appréciations reçues : 39
Inscrit le : 5 janvier 2015
Version d'Excel : 2016

Message par ddetp88 » 7 janvier 2017, 10:07

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
Celui qui n’a pas affronté l’adversité ne connaît pas sa propre force (Benjamin Jonson)
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'171
Appréciations reçues : 448
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 7 janvier 2017, 15:52

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.
H
Harzer
Membre habitué
Membre habitué
Messages : 121
Appréciation reçue : 1
Inscrit le : 20 février 2012
Version d'Excel : 2010

Message par Harzer » 7 janvier 2017, 17:20

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.
H
Harzer
Membre habitué
Membre habitué
Messages : 121
Appréciation reçue : 1
Inscrit le : 20 février 2012
Version d'Excel : 2010

Message par Harzer » 7 janvier 2017, 20:01

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.
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'171
Appréciations reçues : 448
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 7 janvier 2017, 21:52

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.
H
Harzer
Membre habitué
Membre habitué
Messages : 121
Appréciation reçue : 1
Inscrit le : 20 février 2012
Version d'Excel : 2010

Message par Harzer » 7 janvier 2017, 22:37

Bonsoir MFerrand,
Un seul mot : "MAGNIFIQUE"
Merci pour la solution et la réponse rapide.
Cordiale poignée de mains.
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message