XL 2019 Ralentissement bloqué la saisie mais pas la selection Répondre

cyr2il

XLDnaute Nouveau
Bonjour,
Je suis entrain de travailler sur un fichier pour gérer un stock. Afin d'éviter les erreurs de saisie, un stock négatif et que les operateurs supprime les formules j'ai donc décider de passer par un formulaire qui s'ouvre a l'appuie de la touche "entrée" quand on est sur une cellule. Jusque la tout vas bien. En revanche la saisie était possible sans passé par le formulaire. Pour contourner le problème j'ai commencé par simuler un Ctrl + Z avec SendKeys en revanche cette solution rentrée en confusion avec le pad numérique et le désactivait aléatoirement.
J'ai donc chercher une autre solution et j'ai trouvé ceci que j'ai mis dans un module et que j'appel depuis mes différentes feuilles :

Code:
Sub SelectionChange(ByVal Target As Range)
    Application.ScreenUpdating = False
    Dim PlageStock As Range, PlageInventaire As Range
    Set PlageInventaire = [A5:B300]: Set PlageStock = [K5:VJ300]
    If Not Intersect(Target, PlageStock) Is Nothing Then
        ActiveSheet.Protect "1", Contents:=True, userInterfaceOnly:=True
        Intersect(Target, PlageStock).Select
    End If
    If Not Intersect(Target, PlageInventaire) Is Nothing Then
        ActiveSheet.Protect "1", Contents:=True, userInterfaceOnly:=True
        Intersect(Target, PlageInventaire).Select
    End If
End Sub

Le problème c'est que cette solution ralenti énormément la navigation a l'aide des flèche directionnelle ... Puisque si je comprend bien celle ci ôte la protection a chaque changement de sélection. (Je l'ai aussi essayer dans une feuille dans passé par un module mais aucune différence ...)
Ma protection est configuré comme ci-dessous :
image
J'ai aussi besoin de pouvoir utiliser les regroupements présent dans toutes mes feuilles, que j'ai autoriser a l'aide de ce code :

Code:
Private Sub Workbook_Open()
    Dim Feuille As Worksheet
    For Each Feuille In ThisWorkbook.Worksheets
        With Feuille
            .EnableAutoFilter = True
            .EnableOutlining = True
            .Protect "1", Contents:=False, userInterfaceOnly:=True
        End With
    Next
End Sub

Ma question est la suivante : Comment puis-je faire pour pouvoir permettre la sélection et l'utilisation des regroupements tout en verrouillant la modification manuel et surtout sans avoir de ralentissement ? Sachant que la touche "entrée" est obligatoire pour l'ouverture du formulaire en terme d'ergonomie d'utilisation ...

Par avance merci pour votre aide :)
 

TooFatBoy

XLDnaute Barbatruc
Bonjour,

Le problème c'est que cette solution ralenti énormément la navigation a l'aide des flèche directionnelle ... Puisque si je comprend bien celle ci ôte la protection a chaque changement de sélection.
Non, "ActiveSheet.Protect "1", Contents:=True, userInterfaceOnly:=True" n'enlève pas la protection mais, au contraire, l'active.
Mais ça l'active uniquement pour l'utilisateur, pas pour le code VBA. Donc l'utilisateur ne peut pas modifier le contenu des cellules protégées mais VBA le peut tout de même sans déprotéger lesdites cellules.
C'est donc une commande qui n'a pas besoin d'être utilisée à chaque changement de sélection. Il suffit de l'utiliser à l'ouverture du classeur, ou au pire à l'activation de la feuille.


J'ai aussi besoin de pouvoir utiliser les regroupements présent dans toutes mes feuilles, que j'ai autoriser a l'aide de ce code :

Code:
Private Sub Workbook_Open()
    Dim Feuille As Worksheet
    For Each Feuille In ThisWorkbook.Worksheets
        With Feuille
            .EnableAutoFilter = True
            .EnableOutlining = True
            .Protect "1", Contents:=False, userInterfaceOnly:=True
        End With
    Next
End Sub
- Là, j'avoue ne pas comprendre ce que tu veux dire par "regroupement". :(
S'agit-il simplement de cellules fusionnées ?

- Que veux-tu dire par "utiliser" ???

- En quoi ce code permet-il d'utiliser ces "regroupements" ? Autrement dit, ça fait quoi de plus sur ces "regroupements" que s'il n'y avait pas ce bout de code (qui me semble simplement enlever la protection sur le contenu des cellules) ?
 

patricktoulon

XLDnaute Barbatruc
bonjour
c'est un peu vague tout ça pour ne pas dire confu
je n'arrive plus très bien a comprendre le but
donc ces deux plages doivent être protégée contre la modif manuelle si je comprend bien
mais doivent être modifiables par le userform
VB:
 Set PlageInventaire = [A5:B300]: Set PlageStock = [K5:VJ300]
et le reste non c'est bien ca
quand tu parles de regroupement tu parles d’éventuels filtres qui masqueraient des lignes?
ou tu parles de sélection de plusieurs cellules
quand tu parles de fleches de navigation tu parles de quoi de scrollbars???
 

cyr2il

XLDnaute Nouveau
Re

Ahahah en effet j'était entrain de tester plus profondément et quand je test cela marche tres bien pour ma premiere feuille mais quand je change de feuille cela ne fonctionne pas sur le prochain. J'ai donc tester en l'activant dans le worksheet_activate mais rien n'y fait. J'ai criée victoire trop vite !

En faite je voudrais le rendu de ce sujet : https://www.excel-downloads.com/thr...a-selection-de-cellules-verouillees.20042105/ mais sur plusieurs onglet

Je vous met un screen de mon fichier :
1606475429072.png


Lors de l'appuie de la touche entrée dans une cellule qui se trouve dans la colonne "E" ou "S" cela m'ouvre un formulaire pour saisir la quantité. Les semaines sont regrouper par mois. Lorsque je clique sur les + ou - au niveau des lettres de colonne cela masque mes semaines par mois.
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Je vous met un screen de mon fichier :
Regarde la pièce jointe 1086579

Lors de l'appuie de la touche entrée dans une cellule qui se trouve dans la colonne "E" ou "S" cela m'ouvre un formulaire pour saisir la quantité.
Je pose une question peut-être bête, et qui n'aura probablement pas plus de réponse que les précédentes, mais... pourquoi ne pas tout bêtement saisir la valeur dans la cellule ?
Tu n'as quand même pas des formules dans tes colonnes d'entrée et de sortie ???
 

cyr2il

XLDnaute Nouveau
Je pose une question peut-être bête, et qui n'aura probablement pas plus de réponse que les précédentes, mais... pourquoi ne pas tout bêtement saisir la valeur dans la cellule ?
Tu n'as quand même pas des formules dans tes colonnes d'entrée et de sortie ???

Car le même jours sur la même référence, je peux avoir plusieurs entrée à different moment, d'où l'intérêt d'un userform ...

Edit : en faite j'avais répondu a vos question mais j'ai supprimer vu que je pensais avoir trouver la solution, desolé, je vous remet donc les réponses. :)

Alors oui les plages defini doivent être cliquable mais pas modifiable sans passer par le formulaire.

Quand je parle de navigation je parle des fleches directionnelles pour aller d'une case voisine à une autre.

Et lorsque je parle de regroupement je parle du petit + ou - qui masque ou affiche plusieurs colonne.
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Merci pour tes réponses. 👍
OK, je comprends effectivement l'intérêt du formulaire pour les colonnes d'entrées et de sorties. :D

Normalement, pour que les plages définies soient cliquables mais pas modifiables par l'utilisateur, il faut :
- protéger les cellules desdites plages,
- protéger la feuille (en mode "UserInterfaceOnly = True" pour que VBA puisse modifier les cellules),
avec l'autorisation de sélection cochée,
et rien d'autre n'est nécessaire, si je ne me trompe. ;)

Quant aux regroupement : je ne connais pas du tout ce système que je n'ai jamais utilisé, mais je ne pense pas qu'il influence la protection des cellules.


Et pour le fichier demandé, il est possible de l'avoir ou c'est trop complexe à anonymiser ?
 
Dernière édition:

cyr2il

XLDnaute Nouveau
Trop compliqué pour le fichier ... En revanche tu m'as bien aidée et cela est enfin fonctionnelle sans ralentissement ! J'ai modifier le code a l'ouverture du classeur comme ci dessous :

VB:
Private Sub Workbook_Open()
    Dim Feuille As Worksheet
    For Each Feuille In ThisWorkbook.Worksheets
        With Feuille
            .EnableAutoFilter = True
            .EnableOutlining = True
            .Protect "1", userInterfaceOnly:=True
        End With
       Next
End Sub

En faite il fallait juste enlever : "Contents:=False" et j"ai completement supprimer mon Sub que j'avais mis dans mon module.

Merci infiniment !

Avant de clôturer le sujet une petite dernière question, sait tu s'il est possible de supprimer ce message lorsqu'on essaye de saisir sans passer par le formulaire ?
1606514563761.png


Je te remercie encore mille fois ! 😁
 

cyr2il

XLDnaute Nouveau
Déjà essayé ... J'ai essayé en le mettant dans le workbook_open, le worksheet_activate et le worksheet_change ... rien n'y fait.

Bon au pire cela les embêtera au début vu que leur fichier actuel peut être modifié directement, et une fois qu'il aurons pris l'habitude il n'y aura plus de problème ! En même temps c'est de leur faute s'il ne faisait pas autant d'erreur de saisie je n'aurais pas besoin de leur faire un autre fichier ! 😂

Mais bon si une autre idée te viens je suis preneur !
 

Discussions similaires

Statistiques des forums

Discussions
314 611
Messages
2 111 147
Membres
111 051
dernier inscrit
MANUREVALAND