Empêcher la suppression du contenu d'une cellule
Bonjour à tous !
Alors voilà, j'ai besoin de votre aide, je m'explique, j'ai 3 questions (dites-moi si je dois faire 3 sujets, mais il s'agit du même tableau) :
QUESTION 1 : Empêcher la suppression du contenu d'une cellule
J'ai créé un tableau, mais je ne peux pas utiliser le mode verrouillage, car lorsque qu'il est activé, mon tableau ne s'agrandit pas automatiquement...
J'ai donc utiliser une première méthode, qui consiste à mettre des validations de données dans les cellules qui ne doivent pas être modifiées. Cela fonctionne très bien, mais cela n'empêche pas la suppression.
En cherchant sur internet, j'ai trouvé le code ci-dessous, mais cela m'indique le message d'erreur "End Sub attendu" et cela n'empêche pas la suppression...
Désolée mais je débute dans la VBA, et malgré tous mes efforts, je ne comprends pas d'où vient le problème ?
Voici le code :
Sub Empecher_suppression()
'
' Empecher_suppression Macro
' Interdire la suppression de certaines cellules. Remplace le verrouillage.
'
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A1:E7")) Is Nothing Then Exit Sub
On Error GoTo ExitPoint
Application.EnableEvents = False
If Not IsDate(Target(1)) Then
Application.Undo
MsgBox " You can't delete cell contents from this range " _
, vbCritical, "Kutools for Excel"
End If
ExitPoint:
Application.EnableEvents = True
End Sub
QUESTION 2 : Figer les Segments avec le mode défilement de figer les volets
Toujours dans le même tableau, j'ai créé des segments, sauf que j'ai aussi figé les volets et lorsque je fais défiler mon tableau, mes segments sous la barre de défilement remontent et n'apparaissent plus...
Sur le même site que la question précédente, j'ai trouvé un code, mais il ne fonctionne pas chez moi...
VOICI LE CODE :
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim ShF As Shape
Dim ShM As Shape
'specify a slicer
Application.ScreenUpdating = False
Set ShF = ActiveSheet.Shapes("Statut")
Set ShM = ActiveSheet.Shapes("Pointage")
'change position of the slicer
With Windows(1).VisibleRange.Cells(1, 1)
ShF.Top = .Top
ShF.Left = .Left + 300
ShM.Top = .Top
ShM.Left = .Left + 100
End With
Application.ScreenUpdating = True
End SubJe l'ai essayé uniquement avec mes segments "statut" et "pointage".
QUESTION 3 : Ajuster automatiquement la hauteur des lignes suite à un tri
Toujours dans le même tableau, j'ai créé une macro "Ajustement de la hauteur des lignes", car à chaque fois que j'utilise mon tri (montants croissants et décroissants), la hauteur des lignes ne s'ajustent plus automatiquement...
Ma macro fonctionne très bien (j'ai au moins réussi celle-ci
Voilà, j'espère avoir été assez claire dans mes explications et que quelqu'un va me venir en aide, par avance MERCI :)
Bonjour le forum
Bonjour sab49
Pour la question n° 01, je te propose ce code :
Private Sub worksheet_change(ByVal target As Excel.Range)
If Not Application.Intersect(target, Range("A1:E6")) Is Nothing Then 'Range à définir
MsgBox "pas le droit"
Application.EnableEvents = False
Application.Undo
target.Offset(0, 6).Select 'Curseur est éjecté du tableau et se retrouve en colonne "F" (à définir également)
Application.EnableEvents = True
End If
End SubIl protège les valeurs présente dans ton tableau (à définir). La nouvelle valeur entrée est présente mais disparait pour laisser place à l'ancienne valeur.
Pour les autres questions, je passe mon tour.
Bonne soirée à toutes & à tous
Bonjour,
Merci beaucoup Ericcool02 d'avoir pris le temps de me répondre !
J'ai testé le code, mais je ne comprends pas, j'ai toujours le même message d'erreur "End Sub attendu".
Sachant que je ne l'ai pas modifié pour le moment, je voulais déjà le tester tel quel.
Voici les zones sur lesquelles je souhaites "empêcher la suppression" :
Lignes 6
Colonne B, H
De B1 à M5
En fait, les cellules dans lesquelles il doit être possible d'effectuer une saisie sont : à partir de la ligne 7, les colonnes C, D, E, F, G, I, J, K, L, M.
Peux-tu me dire pourquoi chez moi la formule ne fonctionne pas, et comment je peux noté plusieurs zones dans le code ? (si ce n'est pas trop te demander...)
Par avance merci.
Bonjour,
Le End Sub attendu vient du module6 - Tu débute une macro (même s'il n'y a pas de code) mais il faut la terminer par End Sub .
Pour les cellules, je regarderai car j'ai la garde de mon petit fils ce matin.
@ +
Super, merci pour ton rapide retour !
Je désespère, j'ai l'impression de faire tout ce qu'il faut, mais chez moi cela ne fonctionne pas
Pourtant ton fichier fonctionne parfaitement, j'ai bien le message d'erreur qui apparaît.
Chez moi j'ai toujours le message d'erreur "End Sub attendu", alors que je l'ai bien ajouté sur le module 6 comme tu me l'as fait remarquer.
Désolée de te déranger à nouveau...
Re,
1/ Il manquait aussi un "End Sub" dans le 5ème module -Sub Empecher_suppression" ???
2/ L'évènement du change de la feuille (2024) "Private Sub worksheet_change" est à mettre dans le code de la feuille et non dans un module??
3/ Dans le Range de l'event "Private Sub worksheet_change" quand je place une "," entre le range des cellules, il ne faut pas la remplacer par un ";" ??
4/ Ne mélange pas te codes à celui que je t'ai porposé (j'ai retiré tous tes messages de validation de données).
Bon courage pour la suite.
Le fichier déposé fonctionne chez moi sous XL 2010
Bonsoir Sab49, Ericcool02,
Pour la troisième macro, ajuster la hauteur des lignes suite à un tri, elle n'a aucune utilité, vu que la hauteur des lignes reste constante (15.75, et 21 pixels) même après un tri. Et surtout la macro n'ajuste pas la hauteur des lignes mais permet tout au plus un retour à la ligne à l'intérieur des cellules.
Ou alors ton écran est relativement petit. Ce qui serait préjudiciable pour la question N°2. Vu que je te proposais de réaliser comme ci-dessous.
L'écran est en fait partagé en deux fenêtres. L'une à gauche comportant les segments et les formes pour le tri. L'autre les données. Dans le même fichier.
Cela est obtenu manuellement par le menu Affichage puis Nouvelle Fenêtre. La fenêtre de gauche étant réduite à une seule colonne. Les fenêtres ne devant pas être en mode maximisées (occupant tous l'écran) mais normales, donc pouvant être déplaçables ainsi et être réduites légèrement en hauteur.
Mais cela peut aussi être obtenu par macros et automatiquement dès l'ouverture du classeur. Par contre il est nécessaire de connaître la taille de l'écran.
Surtout, il n'est pas nécessaire qu'un segment détaille le nombre de jours, sinon il va falloir à force un projecteur cinéma pour les afficher tous. Il est souvent convenu que l'on prenne en compte des échéances à moins de 10 jours, entre 11 et moins de 30 jours, entre 31 et moins de 60 jours et plus de 60 jours. Ce qui fait donc 4 lignes + les 2 lignes Payée et Echue non payée soit 6 lignes dans le segment.
PS : Enfin, je vois que la question N° 1 est déjà traitée par Ericcool02. Donc comme son info en bas de ses messages l'indique si cela t'a plu, n'oublie pas de "liker.
Apparemment vainement.
Bonjour le fil,
Bonjour X Cellus et meilleurs voeux à toi et aux tiens.
Il est de plus en plus fréquent de voir des "utilisateurs d'Excel" venir poser une question (qui a peut etre réponse ailleurs...(ceci est un autre sujet)) , prendre la réponse ... qui ne leur convient pas forcément... en redemander jusqu'au moment où la réponse leur sied.... Après.... plus rien.. Silence total (el silencio)... Est ce cela la nouvelle société de consommation ???
P.s : je ne cherche pas à gagner des "Like(s)" car nous ne sommes pas dans un concours mais sur un forum d'entraide (surtout moi... pauvre bidouilleur et arrangeur de codes que j'ai trouvé çi & là) mais j'aimerais surtout savoir si ce que j'ai proposé (après moultes essais), fonctionne...
Sur ce, bon week-end à toutes & à tous
Bonsoir, A nouveau,
Idem, Meilleurs Vœux sur ce Fil ainsi que vos proches pour cette nouvelle année.
@Ericcool02,
mais j'aimerais surtout savoir si ce que j'ai proposé (après moultes essais), fonctionne..
Oui, cela fonctionne, les cellules concernées ne sont pas modifiables.
Mais il faut savoir que si l'on met l'éditeur en mode création, les macros ne s'exécutent pas. Et que l'on peut ainsi modifier toutes les cellules cibles.
Cela peut être, bien sur, intéressant pour la personne qui veut modifier ses formules. Puisque sinon cette personne ne le pourrait pas.
Il serait préférable qu'elle pense à bloquer par mot de passe sa programmation.
Bonsoir ou bonjour,
J'essaye d'aider et c'est tout. J'ignore tout des nombreuses possibilité ressources d'Excel Vba ...
@+