Où mettre Unprotect et Protect

Résolu/Fermé
Nai Messages postés 711 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 25 août 2023 - 21 juin 2017 à 20:14
Nai Messages postés 711 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 25 août 2023 - 25 juin 2017 à 17:59
Bonsoir la communauté !
Je poursuis le projet d'outil pour ALSH, largement abouti grâce à la communauté CCM :)
Là, j'ai un problème de protection de feuille.
La macro en question me permet d'ajouter un enfant dans un tableau d'un simple clic depuis une base de données (détail que je souhaite modifier ultérieurement par les données de la feuille Réel).
Le problème c'est que la feuille ne doit pas être protégée pour que la macro fonctionne. Je me dis qu'il suffit de "Retirer la protection" avant la macro et de la remettre après; que nenni :/
J'ai fait le test avec le tableau 1, en vain.
Voir la macro "Worksheet_SelectionChange" dans la PJ, feuille "Tableau Baignade" : https://www.cjoint.com/c/GFvsnOriHwM

Merci d'avance pour votre aide ! :)


3 réponses

f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
25 juin 2017 à 09:36
Bonjour,

Suite

Fichier avec controle de doublon avant mise en tableaux

https://mon-partage.fr/f/MfrsJrM3/
1
Nai Messages postés 711 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 25 août 2023 54
25 juin 2017 à 17:59
Merci ! Ça fonctionne parfaitement ^^
J'ai personnalisé le message d'erreur.

Me reste plus qu'à modifier la base de données pour le tableau de baignade et, en effet, à rendre le fichier moins sensible ^^

Encore merci !
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
21 juin 2017 à 20:42
Bonjour,

il te suffit de retirer la protection de la feuille au début de ta macro.. et de la remettre à la fin.

Nous ne pouvons pas tester.. la feuille étant actuellement protégée et n'ayant pas le password....
0
Nai Messages postés 711 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 25 août 2023 54
21 juin 2017 à 21:16
Ah mince, le projet n'est pas protégé pourtant ^^
Le mdp est : alsh

J'ai essayé, ça n'a pas fonctionné :/
Merci de l'aide ;)
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
21 juin 2017 à 21:33
Pourtant ... ça semble parfaitement fonctionner :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim cellule_première_ligne As Range, ligne As Range
    Dim Tinfos() As String, copie()
    Dim xl As Excel.Application
    Dim i1 As Integer, i2 As Integer, i3 As Integer
    
    Sheets("Tableau baignade").Unprotect ("alsh")
    


et à la fin.. avant le end sub
 End If
    
     Sheets("Tableau baignade").protect Password:="alsh", DrawingObjects:=True, Contents:=True, Scenarios:=True
    
End Sub
  
0
Nai Messages postés 711 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 25 août 2023 54
21 juin 2017 à 23:59
Je ne comprend pas :/
Je pensais que le problème pouvait venir du fait que j'utilise ActiveSheet.Unprotect, mais non. Même en utilisant ton code, le deboggeur hurle ici :
ligne.Resize(, UBound(Tinfos) + 1).Value = xl.Transpose(xl.Transpose(Tinfos))

dans "ajouter au tableau 3"
Constates-tu des différences entre ton exemple et ce fichier : https://www.cjoint.com/c/GFvv6VsJuNM ?
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > Nai Messages postés 711 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 25 août 2023
22 juin 2017 à 00:08
N'ayant pas le fichier bdd.xls je ne peux pas correctement tester.
Par contre... ton code contient quelques anoamies je pense....
par exemple .. à quoi servent les lignes :
ligne.Select

Ce code fait que ça relance à nouveau la procédure Worksheet_SelectionChange
A ce moment là .. ton tu n'entres pas dans ton IF ..
Donc la ligne
Set ligne = cellule_première_ligne.Resize(, .Columns.Count)
n'est pas exécuté.... et donc les lignes de code suivantes :
ligne.Resize(, UBound(Tinfos) + 1).Value = xl.Transpose(xl.Transpose(Tinfos))
        ligne.Columns(4).FormulaR1C1 = "=IF(RC[-1]<>"""",DATEDIF(RC[-1],R7C4,""y""),"""")"

doivent, en effet, te cracher une erreur !

Corrige déjà ça .... puis lance ton code en mode pas à pas (en mettant un point d'arrêt au début de la sub par exemple) pour voir ce qui se passe et pourquoi cela "plante".
0
Nai Messages postés 711 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 25 août 2023 54 > jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024
22 juin 2017 à 00:24
En effet :O La suppression de cette ligne résous une partie du problème.
Par contre, je ne parviens plus à supprimer les enfants...
J'ai comme qui dirait l'impression que cette macro est bien trop longue pour que je puisse la comprendre entièrement...
Ton aide est d'autant plus précieuse :)
Voici la base de données : https://www.cjoint.com/c/GFvwv0LoEnM

J'ai constaté l'impossibilité de sélectionner D7:D12 pour "ne pas protéger ces cellules". Dès que je sélectionne la plage, la feuille se protège :O
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701
Modifié le 23 juin 2017 à 10:50
Bonjour a Tous,

Nai:
Peut-être le problème vient-il d'une protection ailleurs ?
Non, c'est un probleme d'appel recursif de cette procedure
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

lie a
ligne.Select
et l'ecriture des cellules pour le message ex:
Range("A25") = "Sélectionnez le NOM de l'enfant pour le supprimer"
et
Range("A25") = Empty

et plus etrange
une selection intempestive de la cellule F26 que je ne m'explique pas
J'ai donc mis les lignes
ligne.Select
en commentaire car pas utiles
et utilise Application.EnableEvents false/true pour eviter ces desagrements.

fichier modifie pour prot/unprot: https://mon-partage.fr/f/5CAagWeI/
j'ai laisse votre principe de protection

Il est possible de mettre x fois le meme nom dans un tableau et ce meme nom dans les autres tableaux!!!!!!!!!!!!!!!! Normal ou pas ?????
L'utilisation de votre fichier est un peu sensible
0
Nai Messages postés 711 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 25 août 2023 54
Modifié le 23 juin 2017 à 13:04
Salut ! Merci pour ce message ! Le prot/unprot fonctionne nickel, mais j'ai un soucis avec la ListBox1 qui rétrécie à chaque nouvelle recherche :O J'ai beau l'éditer en mode création, elle se rétrécie toujours :/

Il est possible de mettre x fois le meme nom dans un tableau et ce meme nom dans les autres tableaux!!!!!!!!!!!!!!!! Normal ou pas ?????
Oui et non lol S'il est possible de l'interdire, c'est mieux, mais en pratique le directeur devrait vite se rendre compte que le nombre d'enfant sur les tableaux ne correspond pas au réel lol. J'envisage de ne plus prendre en compte la base de données pour cette feuille, mais plutôt les données des enfants de la feuille "Réel".

L'utilisation de votre fichier est un peu sensible
Ah ! Voilà une remarque intéressante ! L'objectif premier de ce fichier est de rendre son utilisation simple et intuitif. Qu'entendez-vous par "sensible" ?
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701 > Nai Messages postés 711 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 25 août 2023
23 juin 2017 à 13:47
Re,

Qu'entendez-vous par "sensible" ?
A la moindre anomalie dans Table baignade, il faut systematiquement fermer et rouvrir le fichier.Pour le reste je n'ai pas regarde
Il faudrait que la listbox soit invisible si textbox vide, ca arrangerait un peu

S'il est possible de l'interdire, c'est mieux,
Tout est possible, suffit de le vouloir

O J'ai beau l'éditer en mode création, elle se rétrécie toujours :/
Je regarde la chose
0
Nai Messages postés 711 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 25 août 2023 54 > f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024
Modifié le 23 juin 2017 à 20:10
A la moindre anomalie dans Table baignade, il faut systematiquement fermer et rouvrir le fichier.
En fait, il suffit de relancer Workbook2_Open. J'ai mis un bouton "Recharger" pour la relancer :)

Tout est possible, suffit de le vouloir
C'est en effet quelque chose que je voudrais. Mais je pense d'abord modifier la source de données de cette feuille. En effet, dans le cas de ce tableau de baignade il est inutile de charger toute la base de données, seuls les enfants du tableau "Réel" importent. J'envisagerais l'impossibilité d'ajouter deux fois le même enfant après avoir modifié cela. Ceci sera d'ailleurs mon projet sujet :)

Encore et toujours merci pour l'aide !

EDIT: Pour la taille de la ListBox, j'ai trouvé ceci : https://forums.commentcamarche.net/forum/affich-19525091-vba-aide-pour-bloquer-taille-listbox mais reste sans réponse :/ J'ai trouvé très peu de chose à ce sujet :/
0
f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024 1 701 > Nai Messages postés 711 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 25 août 2023
23 juin 2017 à 21:50
Re
Pour la listbox, pas besoin de code, je vous enverrai le fichier demain. Je regarde pour les nageurs uniques. Le bouton recharger ne règle pas tous les problemes
0
Nai Messages postés 711 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 25 août 2023 54 > f894009 Messages postés 17185 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 15 avril 2024
23 juin 2017 à 21:58
D'accord. Merci beaucoup !
A demain donc :)
0