[Déplacé VB6 --> VBA] Problème de protection de feuille excel avec Formulaire

Dioude01 Messages postés 8 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 9 septembre 2009 - 17 juil. 2009 à 14:53
Dioude01 Messages postés 8 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 9 septembre 2009 - 20 juil. 2009 à 13:49
Bonjour,

Voilà mon prob assez embêtant sous Excel 2003
J'ai une base de donnée qui est remplie par l'intermédiaire d'un formulaire.
Les données de la feuille devront être protégées pour que les utilisateurs ne les touchent pas mais puissent les consulter, par contre j'aimerai que les filtres automatique puissent fonctionner.
Mais lorsque j'ouvre un formulaire, le rempli, l'enregistre, a la fermeture toute la feuille est protégée, je ne peux plus utiliser les filtres.
Ce qui est peut être un peu normal vu que dans le script je demande une protection de la feuille a chaque enregistrement d'un formulaire.
Mais je n'arrive pas a trouver une commande pour autoriser les filtres.
Voici le code, et merci pour votre réponse

Sub Entrée()
ActiveSheet.Unprotect ("gforce512")
FormEncodage.Hide
If TopCell = "Ajout" Then
'* La cellule A1 est sélectionnée
Range("A1").Select
'* Le pointeur de cellule est envoyé sur la dernière ligne occupée
Selection.End(xlDown).Select
'* Incrémentation du nbre de ligne
If ActiveCell.Value = "" Then
Ni = 1
Range("A1").Select
Else
Ni = ActiveCell.Value
Ni = Ni + 1
End If
' Le pointeur de cellule descend d'une ligne
ActiveCell.Offset(1, 0).Range("A1").Select
ActiveCell.Value = Ni
Else
'* La cellule la plus à gauche est sélectionnée
Selection.End(xlToLeft).Select
End If
'* Format cellule bordure
ActiveCell.Borders(xlEdgeLeft).LineStyle = xlContinuous
ActiveCell.Borders(xlEdgeRight).LineStyle = xlContinuous
'* Le pointeur de cellule passe à la colonne voisine
' Le Emetteur est introduit
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.Value = FormEncodage.Emetteur
ActiveCell.Borders(xlEdgeLeft).LineStyle = xlContinuous
ActiveCell.Borders(xlEdgeRight).LineStyle = xlContinuous

'* Le pointeur de cellule passe à la colonne voisine
' Le Batiment est introduit
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.Value = FormEncodage.ComboBat
ActiveCell.Borders(xlEdgeLeft).LineStyle = xlContinuous
ActiveCell.Borders(xlEdgeRight).LineStyle = xlContinuous
'* Le pointeur de cellule passe à la colonne voisine
' La Date est introduite
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.Value = FormEncodage.TextDate
ActiveCell.Borders(xlEdgeLeft).LineStyle = xlContinuous
ActiveCell.Borders(xlEdgeRight).LineStyle = xlContinuous
'* Le pointeur de cellule passe à la colonne voisine
' Le Type évènement est introduite
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.Value = FormEncodage.ComboTypeEve
ActiveCell.Borders(xlEdgeLeft).LineStyle = xlContinuous
ActiveCell.Borders(xlEdgeRight).LineStyle = xlContinuous
'* Le pointeur de cellule passe à la colonne voisine
' La TextPR est introduite
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.Value = FormEncodage.TextPR
ActiveCell.Borders(xlEdgeLeft).LineStyle = xlContinuous
ActiveCell.Borders(xlEdgeRight).LineStyle = xlContinuous
'* Le pointeur de cellule passe à la colonne voisine
' Concernant le batiment est introduite
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.Value = FormEncodage.ComboConBat
ActiveCell.Borders(xlEdgeLeft).LineStyle = xlContinuous
ActiveCell.Borders(xlEdgeRight).LineStyle = xlContinuous
'* Le pointeur de cellule passe à la colonne voisine
' La zone est introduite
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.Value = FormEncodage.TextZone
ActiveCell.Borders(xlEdgeLeft).LineStyle = xlContinuous
ActiveCell.Borders(xlEdgeRight).LineStyle = xlContinuous
'* Le pointeur de cellule passe à la colonne voisine
' Circonstances est introduite
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.Value = FormEncodage.TextCirconst
ActiveCell.Borders(xlEdgeLeft).LineStyle = xlContinuous
ActiveCell.Borders(xlEdgeRight).LineStyle = xlContinuous
'* Le pointeur de cellule passe à la colonne voisine
' Ano est introduite
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.Value = FormEncodage.ComboTypeAno
ActiveCell.Borders(xlEdgeLeft).LineStyle = xlContinuous
ActiveCell.Borders(xlEdgeRight).LineStyle = xlContinuous
'* Le pointeur de cellule passe à la colonne voisine
' Cause est introduite
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.Value = FormEncodage.ComboCause
ActiveCell.Borders(xlEdgeLeft).LineStyle = xlContinuous
ActiveCell.Borders(xlEdgeRight).LineStyle = xlContinuous
'* Le pointeur de cellule passe à la colonne voisine
' Conséquence potentielle est introduite
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.Value = FormEncodage.ComboConsPot
ActiveCell.Borders(xlEdgeLeft).LineStyle = xlContinuous
ActiveCell.Borders(xlEdgeRight).LineStyle = xlContinuous
'* Le pointeur de cellule passe à la colonne voisine
' La Etude complémentaire est introduite
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.Value = FormEncodage.ComboEtuComp
ActiveCell.Borders(xlEdgeLeft).LineStyle = xlContinuous
ActiveCell.Borders(xlEdgeRight).LineStyle = xlContinuous
'* Le pointeur de cellule passe à la colonne voisine
' Texte ano est introduite
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.Value = FormEncodage.TextAno
ActiveCell.Borders(xlEdgeLeft).LineStyle = xlContinuous
ActiveCell.Borders(xlEdgeRight).LineStyle = xlContinuous
'* Le pointeur de cellule passe à la colonne voisine
' La texte cause est introduite
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.Value = FormEncodage.TextCause
ActiveCell.Borders(xlEdgeLeft).LineStyle = xlContinuous
ActiveCell.Borders(xlEdgeRight).LineStyle = xlContinuous
'* Le pointeur de cellule passe à la colonne voisine
' texte conséquence potentielle est introduite
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.Value = FormEncodage.TextConsPot
ActiveCell.Borders(xlEdgeLeft).LineStyle = xlContinuous
ActiveCell.Borders(xlEdgeRight).LineStyle = xlContinuous
'* Le pointeur de cellule passe à la colonne voisine
' Actions correctives est introduite
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.Value = FormEncodage.TextAction
ActiveCell.Borders(xlEdgeLeft).LineStyle = xlContinuous
ActiveCell.Borders(xlEdgeRight).LineStyle = xlContinuous
'* Le pointeur de cellule passe à la colonne voisine
' Evaluation du risque est introduite
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.Value = FormEncodage.ComboEval
ActiveCell.Borders(xlEdgeLeft).LineStyle = xlContinuous
ActiveCell.Borders(xlEdgeRight).LineStyle = xlContinuous
'* Le pointeur de cellule passe à la colonne voisine
' Fiche est introduite
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.Value = FormEncodage.ComboFiche
ActiveCell.Borders(xlEdgeLeft).LineStyle = xlContinuous
ActiveCell.Borders(xlEdgeRight).LineStyle = xlContinuous
'* Le pointeur de cellule passe à la colonne voisine
' Action préventive est introduite
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.Value = FormEncodage.TextPrev
ActiveCell.Borders(xlEdgeLeft).LineStyle = xlContinuous
ActiveCell.Borders(xlEdgeRight).LineStyle = xlContinuous
'* Le pointeur de cellule passe à la colonne voisine
' Par qui est introduite
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.Value = FormEncodage.TextParqui
ActiveCell.Borders(xlEdgeLeft).LineStyle = xlContinuous
ActiveCell.Borders(xlEdgeRight).LineStyle = xlContinuous
'* Le pointeur de cellule passe à la colonne voisine
' Quand est introduite
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.Value = FormEncodage.TextQuand
ActiveCell.Borders(xlEdgeLeft).LineStyle = xlContinuous
ActiveCell.Borders(xlEdgeRight).LineStyle = xlContinuous
'* Le pointeur de cellule passe à la colonne voisine
' Statut est introduite
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.Value = FormEncodage.ComboStatut
ActiveCell.Borders(xlEdgeLeft).LineStyle = xlContinuous
ActiveCell.Borders(xlEdgeRight).LineStyle = xlContinuous
'* Le pointeur de cellule passe à la colonne voisine
' efficacite de l'action est introduite
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.Value = FormEncodage.Comboeffic
ActiveCell.Borders(xlEdgeLeft).LineStyle = xlContinuous
ActiveCell.Borders(xlEdgeRight).LineStyle = xlContinuous
'* La boîte de dialogue est déchargée de la mémoire et disparaît
Unload FormEncodage
ActiveSheet.Protect ("gforce512")
Dim nom As String
nom = Day(Date) & "-" & Month(Date) & "-" & Year(Date) & "_" & ActiveWorkbook.Name
ActiveWorkbook.SaveCopyAs ActiveWorkbook.Path & "\Sauvegarde" & nom
rep = MsgBox("Votre base de données est sauvegardée sous le nom : " & nom, vbYes + vbInformation, "Copie sauvegarde classeur")
End Sub

2 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
17 juil. 2009 à 15:54
Salut
Les lignes de ton programme n'ayant aucun lien avec le sujet auraient pu ne pas être collées, ça aurait éviter que les lecteurs fuient devant un code aussi long !

Tu peux protéger une feuille entière et définir des cellules (plages) accessibles.
Voir menu "Outils", "Protection", "Permettre aux utilisateurs de modifier des plages"
Dans cette fonction, tu définies les plages que tu veux rendre accessibles (tes filtre) et tu ne mets pas de mot de passe, comme ça les plages seront accessibles sans condition.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
Dioude01 Messages postés 8 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 9 septembre 2009
20 juil. 2009 à 13:49
Bonjour,

Excuses moi pour la longueur du message.
J'ai éssayé ce que tu m'a dis mail il faut que je mette des noms de domaine, mais c'est un peu le box avec une grosse entreprise, les ramifications du réseau font qu'excel ne trouvent pas les adresses mails des utilisateurs.


Ca ne fais rien, la feuille ne sera pas protégée, mais j'ai mis une ligne de code qui crée une sauvegarde initiale du fichier avec date et heure ce qui me permettra d'effectuer une restauration si besoin.

Par contre sur le site je n'arrive pas a trouver des lignes de code qui permetrai d'inserer un decompte de temps avant fermeture automatique de la feuille ou formulaire si on traine trop lontemps dessus :)

Bonne journée
0
Rejoignez-nous