Verrouillage colonnes sans passer par protection de la feuille

Bonjour à toutes et à tous,

J'ai un tableau avec beaucoup trop de colonnes donc lors de l'introduction des données, je peux me tromper de colonne et introduire une donnée dans une cellule avec une formule.

Je cherche donc une solution autre que la protection de la feuille pour empêcher le maladroit que je suis d'introduire des données où il ne faut pas.

J'ai trouvé ceci.

https://forum.excel-pratique.com/excel/verrouiller-cellule-sans-passer-par-proteger-feuille-20946

Le 5eme message avec le fichier verouillage-cellules-v001.zip

Le code proposé est le suivant.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Range("G5:G5000,J5:J5000"), Target) Is Nothing Then
        If Target.Count > 1 Then Exit Sub
        Target.Offset(0, 1).Select
    End If
End Sub

Génial fonctionnel excepté qu'il n'est pas possible d'utiliser la flèche gauche. La flèche droite ou tab fonctionne parfaitement et déplace vers la droite mais flèche gauche "bloque" et mes maigres compétences ne trouvent pas de solutions.

Je vous remercie d'avance pour votre aide et vous souhaite une bonne journée.

bonjour,

une proposition

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Range("G5:G5000,J5:J5000"), Target) Is Nothing Then
        If Target.Count > 1 Then Exit Sub
        If Target.Column = 10 Then
            Target.Offset(0, -1).Select
        ElseIf Target.Column = 7 Then
            Target.Offset(0, 1).Select
        End If
    End If
End Sub

Merci h2so4.

Ce ne fonctionne pas.

Voici un fichier exemple.

Merci d'avance.

Bonne journée.

Bonjour wags ,h2so4

En mettant le code que t'as donné h2so4 dans la feuille concernée faire Alt+F11

cela fonctionne les colonnes G et J sont inaccessibles ton fichier en retour

Bonjour Wags, Le Forum,

Avec la validation de données sur le fichier en retour.

Aucun chiffre ne pourra être inséré dans les formules des colonnes F et G

Bonjour à vous,

Un grand merci pour votre temps et votre aide.

@X Cellus, oui j'avais fait de la validation de données mais je suis pas fan. Je trouve que, ok ça évite de faire des erreurs; mais il y a quand même moyen de se tromper et d'avoir un message. Ok ça fait son travail mais, perte de temps.
En fait quand j'introduis des données, il faut que ce soit très rapide car j'ai une autre opération à faire sur le navigateur dans un délai très court.

@Joco7915.

Merci pour le fichier avec le code intégré. Chose que j'ai faite et qui pose toujours le même problème.

Je ne peux pas revenir en arrière (donc usage de la flèche gauche) et je suis bloqué sur la colonne I.

Merci d'avance pour vos aides précieuses.

Bonne journée à vous.

A nouveau,

Autre solution sans validation de données.

Un petit clic pour éviter les erreurs en saisie, un deuxième .pour revenir au classique!

re-bonjour, à tous,

une version adaptée, ne permet pas la sélection d'une cellule en colonne F ou G (saute en colonne H quand on vient de la gauche et en colonne E quand on vient de la droite)

Bonjour h2so4,

Un grand merci pour ce fichier.
Cela fonctionne parfaitement mais ...

Comment faire pour ajouter une autre colonne.

Par exemple la 11.

J'ai ajouté le même code à la suite du End If et avant mais cela ne fonctionne pas.
Je pense comprendre +/- le code mais comment ajouter une col ?

Merci d'avance.

Bonne journée.

Bonjour à tous,

une version qui ne se préoccupe pas des colonnes mais regarde s'il y a une formule :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Static memo As Range, sens As Integer
    If Not memo Is Nothing Then
        sens = Sgn(Target.Column - memo.Column)
        Debug.Print sens
        If Target.HasFormula Then
            If sens = -1 Then Target.Offset(, -1).Select Else Target.Offset(, 1).Select
        End If
    End If
    Set memo = Target
End Sub

possible d'ajouter une case à cocher pour (dés)activer le fonctionnement, ou de restreindre à une plage.
eric

Bonjour,

voici une nouvelle version (paramétrable)

Edit : Bonjour eriiic

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Static prevcol
    If Target.Count > 1 Or Target.Row < 5 Then Exit Sub 'pas de gestion des sauts de colonnes pour les lignes 1 à 4
    If UCase(Range("B2")) = "ON" Then 'on active la gestion des sauts de colonnes si B2 = "On"
        If UCase(Left(Cells(4, Target.Column), 4)) = "FIXE" Then 'on saute les colonnes dont l'entête commence par "Fixe"
            If prevcol < Target.Column Or Target.Column = 1 Then 'on vient de la gauche ou on est en colonne 1
            prevcol = Target.Column
                Target.Offset(0, 1).Select
            Else
                Target.Offset(0, -1).Select 'on vient de la droite
            End If
        Else
            prevcol = Target.Column 'on mémorise la colonne que l'on vient de sélectionner, afin de pouvoir déterminer par la suite si l'on vient de la gauche ou de la droite
        End If
    End If
End Sub

Bonjour à tous,

Version automatisée à l'ouverture du classeur.

Merci beaucoup, Vous me gâtes, c'est Noel avant l'heure ;)

@eriic : Cette idée est géniale mais deux choses.

1 - Il y a un léger bug : rien de dramatique. Si je veux retourner à gauche par exemple à partir de la Col I et je dois en premier aller sur J sinon ça bloque.

2 - Pourriez vous m'expliquer comment faire une case à cocher ou un bouton sur la feuille pour activer ou désactiver cette fonction ?
J'ai trouvé ceci

Private Sub ToggleButton1_Click()

Mais sans succès pour ma part.

@h2so4 : Merci beaucoup pour cette proposition qui fonctionne très bien excepté si je veux changer le Fixe par F par exemple tant le nom de la col du tableau et bien entendu le Fixe (en rouge dans le code proposé) par F dans le code, cela ne fonctionne pas.

Et même question qu'à eriiic, comment faire pour activer et désactiver par un bouton ?

Merci à vous pour vos idées et aides (enfin aides, vous faites le boulot pour moi, mais j'essaie de comprendre et d'apprendre ;) )

Je vous souhaite une bonne journée

@ X Cellus,

Merci pour cette idée.
Je l'emploie déjà effectivement pour l'encodage des données mais je voudrais cette sécurité en plus avec le verrouillage de certaines col.

Merci beacuoup

Suite,

Elles sont verrouillées de facto puisque tu ne peux y inscrire quoi que ce soit à partir du moment ou elles ne sont pas visibles.

Maintenant tu peux toujours essayer d'y rentrer.

Re,

effectivement, il y avait un aléa si tu cherchais à revenir immédiatement.
+ ToggleButton ajouté.
Je force la protection à l'ouverture. Du coup tu as du code dans ThisWorkbook + une déclaration de variable dans le Module1
eric

@X Cellus : Effectivement C'est une solution aussi. Merci pour ton avis et aide.

@eriiic : Génial et fonctionnel à 100%. Merci.

Par contre une question : ok il est encore tôt et c'est dimanche donc les yeux probablement pas en face des trous mais comment je paramètre les col que je veux "bloquer"
Je ne comprends pas du tout le code et ne trouve aucune trace des lettres des col.

Désolé

Merci pour votre aide.

Un bon dimanche ;)

Bonjour, à tous,

dans la continuité de ce que j'ai proposé, bien que tu aies reçu des solutions bien plus conviviales. (remplacer FIXE* par F*) pour sauter les colonnes commençant par F

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Static prevcol
    If Target.Count > 1 Or Target.Row < 5 Then Exit Sub 'pas de gestion des sauts de colonnes pour les lignes 1 à 4
    If UCase(Range("B1")) = "ON" Then 'on active la gestion des sauts de colonnes si B2 = "On"
        If UCase(Cells(4, Target.Column)) Like "FIXE*" Then  'on saute les colonnes dont l'entête commence par "Fixe"
            If prevcol < Target.Column Or Target.Column = 1 Then 'on vient de la gauche ou on est en colonne 1
                prevcol = Target.Column
                Target.Offset(0, 1).Select
            Else
                Target.Offset(0, -1).Select 'on vient de la droite
            End If
        Else
            prevcol = Target.Column 'on mémorise la colonne que l'on vient de sélectionner, afin de pouvoir déterminer par la suite si l'on vient de la gauche ou de la droite
        End If
    End If
End Sub

Sub Button2_Click()
    If Range("B1") = "On" Then Range("B1") = "Off" Else Range("B1") = "On"
End Sub

Bonjour,

comme dit précédemment, la macro regarde s'il y a une formule (.hasformula) dans la cellule ou tu te rends.
Si oui elle se rend à la suivante etc
Pas besoin d'adapter si tu insères ou déplaces une colonne.
eric

@h2so4 : Je te remercie pour toutes ces modifications et tous ces conseils. Effectivement, Eriic a proposé quelque chose de génial et correspondant parfaitement à ce dont j'ai besoin.

@eriiic : Un très grand merci pour ce code. J'avais effectivement pas les yeux en face des trous ce matin parce que le .hasformula : même pas percuté un de mes neurones ;) ;)
Doublement génial parce que j'ai compris le code : en espérant si je dois faire quelque chose de similaire dans le futur, que j'y arriverai.

Merci à vous toutes et tous.

Je vous souhaite une bonne journée.

Rechercher des sujets similaires à "verrouillage colonnes passer protection feuille"