BUG avec Les options de protection d'une feuille Excel

Bonjour,

J'ai un fichier Excel dans lequel pour certaines cellules je ne souhaite pas faire apparaitre le nom (à rallonge) de la barre de saisie. J'ai verrouillé ces cellules, je les ai masquées et ai protégé la feuille.

Cela fonctionne bien.

Je mets en place la protection (Uniquement pour : Insérer des colonnes, Supprimer des colonnes et Supprimer des lignes (pour éviter que les personnes qui viennent consulter le fichier fassent des bêtises...) ) je décoche donc ces options et laisse tous les autres cochées. (car ces personnes peuvent être amenées à utiliser les filtres ou mettre un lien hypertexte, changer une police etc.

Cela fonctionne bien.

PROBLÈME: Au bout d'un certain temps, (30mn? 1H? 4h? (je ne sais pas)) Cela ne fonctionne plus. En effet, c'est comme si les actions autorisées, malgré la protection, s'étaient "auto-décochées". Donc : appliquer un filtre, mettre un lien hypertexte, etc. n'est plus possible ---> C'est "grisé".

Je suis donc obligé de faire :

--> Ôter la protection

--> Protéger la feuille (avec selon les fois, à "recocher" les exceptions ou pas, c'est

aléatoire... )

Et cela refonctionne pour un certain temps, puis rebelote, ça reverrouille.

Quelqu'un aurait une explication à cela ?

Merci d'avance pour votre aide.

capture ecran

Bonjour,

C'est bien la première fois que je vois ce genre d'incident ... A chaud comme ça ne me vient qu'une idée : pas de code VBA qui pourrait altérer les propriétés de protection de la feuille ?

Cdlt,

Bonjour,

Oui, j'ai pas mal de codes dans le fichier. Maintenant, aucune commande relative à une quelconque protection...

(Macros pour publipostages, macros pour report d'informations via userfom)

Bien à vous.

Bonjour,

Vous dites que vous activez la protection mais que vous avez du code pour publipostage, report d'information etc ... Comment faites vous pour modifier les valeurs de la feuille sans retirer la protection ?

Serait-il possible d'avoir ce fichier ? Anonymisé si besoin.

Cdlt,

Bonjour à tous , je pense qu'Ergotamine parlait d'une macro qui nécessite la désactivation de la protection pour s'exécuter.

Comme celle dont vous parlez pour le report d'information qui necéssite peut-être d'enlever la protection puis la remettre ... mais sans les options ?

oops j'écris pas assez vite .. boujour ERGo

Bonjour Xmenpl,

Ahah pas de soucis ça me fait plaisir que des experts puissent avoir le même raisonnement qu'un apprenti comme moi !

Tu as très bien résumé le fond de ma pensée merci !

Cdlt,

Bonsoir à vous deux,

Le code pour le publipostage est sur une autre feuille mais fait bien partie du fichier. Il n'y a donc pas d'incidence sur la feuille en question (suivi des bons de commande, qui elle n'a du code que pour le report d'information).

Je n'ai aucun souci d'exécution de macro avec la feuille protégée.

J'ai essayé avec un mot de passe. Pour le moment cela à l'air de fonctionner, je vous dirai si c'est toujours le cas demain...

Par ailleurs, vu que je tiens deux experts d'Excel, une autre petite coquille sans gravité qui me chagrine tout de même... :)

--> Dans mon Userform, je suis amené à ajouter un nouveau numéro de BC (j'ajoute le numéro dans une TextBox puis valide avec un CommandButton)

Ce dernier se met à jour automatiquement dans la cellule qui va bien du fichier Excel ainsi que dans ma ComboBox.

Dans mon UserForm, j'ai une liste de date de visa que je viens incrémenter au fur et à mesure que les signataires valident la commande. Je suis actuellement au BC n° 608.

PROBLÈME : Lorsque je vais créer le BC 609 puis le sélectionner via ma ComboBox, cela va faire apparaitre toutes les dates du BC 600 (Car 609 étant vierge, il va par défaut récupérer les infos à BC 600

Exemple : Dans la photo ci-dessous, voyez, j'ai sélectionné le BC 609 et sont apparues les dates correspondant au BC600) (j'espère que je me fait comprendre :) )

- J'ai donc créer un bouton "RAZ" pour effacer ces données -

Mais j'aimerai bien qu'elles n'apparaissent pas car la ligne du BC 609 est pour le moment vierge.

@Ergotamine, je veux bien essayer dans la semaine de l'anonymiser car il y a bcp de choses à effacer et cela prendra pas mal de temps ! :)

Bien à vous,

capture ecran suivi bc

Bonjour,

Je pense que l'anonymisation sera nécessaire. Si vous ne souhaitez pas le faire, vous pouvez tjs le transférer par MP, libre à vous. En soit supprimez les adresses, numéros de téléphones, les noms des clients ou je ne sais quelle informations autres et laissez nous une dizaine de lignes de data, du moment qu'on s'y retrouve avec quelque chose d'a peu près fonctionnel.

Pour le publipostage pas de doute, c'était surtout pour le reste et c'est là où il subsiste. Nulle par a un moment la méthode .Unprotect ou .Protect n'est invoquée ?

Pour ce qui est du second soucis, là encore j'ai bien compris. Mais ça ne nous dit pas si les textboxs de date renseignent le fichier Excel ou si c'est l'inverse ?
Si c'est le premier mécanisme : vous pouvez très bien intégrer au bouton ajouter un nouveau BC, un clear des textboxs. Mais il nous faudrait le fichier sous la main.
Si c'est le second alors : vous pouvez imaginer que lorsque la valeur du combobox du BC change, alors c'est une recherchev qui actualise le contenu des textbox. Donc dans ce cas comme la ligne contenant BC 609 est vierge, les textbox seront vierges.

C'est bête mais je pense vraiment qu'il nous faut ce fichier, sauf si vous arrivez à transposer nos explications et à les coder dans le votre.

Cdlt,

PS : Je suis très loin d'être expert sur ce forum ;)

PS : Je suis très loin d'être expert sur ce forum ;)

Tu peux toujours te targuer d'être expert en modestie !

Re bonjour, Créer un nouveau numéro de BC alors que la liste des BC se trouve dans une combobox

il faudrait peut-être réinitialiser le userform pour que toutes les modifications soient prises en compte et qu'il retrouve la ligne 609

Bonjour à tous,

Je pense que je n'ai pas été assez clair. J'ai pris le temps d'anonymiser le fichier :) et je vais donc reformuler ma problématique.

--> Ce sont les données que je rentre dans le Userform qui vont incrémenter les cellules dans le fichier Excel.

Admettons que j'ai un nouveau BC à créer.

Sur la feuille BC, vous trouverez le bouton "suivi des BC"

Lorsque vous cliquez, s'ouvre le Userform.

Présentement, le dernier BC est le n° 607 (c'est mentionné dans la case jaune), je dois donc créer mon nouveau BC avec le numéro suivant, le 608. Je tape 608 dans le TextBox et clique sur "Ajouter nouveau BC" - --> La ligne de ce BC sera la n°38

Ce dernier vient alors s'incrémenter dans le fichier Excel (Colonne ED38) (avec report en colonne H38 (lien hypertexte automatique).

Ceci étant fait, je dois ensuite saisir la date de la demande de FEX... (par exemple, la date de ce jour) Pour cela, je vais sélectionner le n°608 dans la Combobox (A noter que ce dernier s'est également mis à jour automatiquement dans la Combobox au moment de la création du BC).

PROBLÉMATIQUE :Quand je vais sélectionner 608 (ou taper directement 608, peu importe), vont apparaitre toutes les dates correspondant au BC 600 (Car 608 étant vierge, il va par défaut récupérer les informations du BC 600 (car il ne reconnait que les deux premiers chiffres) (d'ailleurs voyez, quand vous commencez à taper "6", il met déjà les dates du BC 600...)


Ce que je souhaite : Que lorsque je tape 608, n'apparaisse aucune date étant donné qu'il n'y en a encore aucune de renseigné.

Pour mon problème initial, rien à faire, même avec le mdp, toujours la même chose.

"Nulle par a un moment la méthode .Unprotect ou .Protect n'est invoquée ?" : Non, il ne me semble pas.


Merci d'avance et bonne journée à vous !




Bonjour,

Bon je me suis focalisé uniquement sur les problématiques sinon j'aurai repris tout depuis le début.

Pour la partie du nouveau BC je pense qu'il vaut mieux faire où j'ai ajouté en bonus une suggestion de nouveau BC, ça évite de se planter (on pourrait d'ailleurs ne pas laisser le choix à l'user pour l'incrémentation) :

'Pour le formulaire
Private Sub UserForm_Initialize()
Application.ScreenUpdating = False
Dim J As Long
Dim I As Integer
Dim L%
Set Ws = Sheets("BC") 'Correspond au nom de l'onglet dans le fichier Excel
L = Ws.Range("ED" & Rows.Count).End(xlUp).Row
With Me.ComboBox1
    For J = 10 To L
        .AddItem Ws.Range("ED" & J)
    Next J
End With
Me.TextBox20 = CInt(Ws.Cells(L, 134)) + 1
Application.ScreenUpdating = True
End Sub

'Pour la liste déroulante BC'
Private Sub ComboBox1_Change()
Application.ScreenUpdating = False
Dim I As Integer
Dim L%
With Sheets("BC")
    L = Application.Match(CInt(Me.ComboBox1), .Range("ED10:ED" & .Cells(.Rows.Count, 134).End(xlUp).Row), 0) + 9
    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
    For I = 1 To 18
        Me.Controls("TextBox" & I) = .Cells(L, I + 115)
    Next I
    Me.Label46 = CStr(Application.Index(.Range("EE:EE"), L))
    Me.Label47 = CStr(Application.Index(.Range("EF:EF"), L))
    Me.Label52 = CStr(Application.Index(.Range("AA:AA"), L))
    Me.Label54 = CStr(Application.Index(.Range("I:I"), L))
    Me.Label56 = CStr(Application.Index(.Range("EG:EG"), L))
    Me.Label59 = CStr(Application.Index(.Range("C:C"), L))
    Me.Label61 = CStr(Application.Index(.Range("L:L"), L))
    Me.Label62 = CStr(Application.Index(.Range("BM:BM"), L))
End With
Application.ScreenUpdating = True
End Sub

Pour la première problématique notre hypothèse était correcte, vous avez bien dans votre code des parties qui déprotège puis reprotège sans instructions particulières, donc RaZ des propriété de protections. En effet sous le USF2 :

'Pour le bouton Modifier
Private Sub CommandButton2_Click()
Application.ScreenUpdating = False
Dim Ligne As Long
Dim I As Integer
   If MsgBox("Confirmez-vous les modifications apportées ?", vbYesNo, "Demande de confirmation de modification") = vbYes Then
     If Me.ComboBox1.ListIndex = -1 Then Exit Sub
         Ligne = Me.ComboBox1.ListIndex + 1
ActiveSheet.Unprotect '<-------------------------------------------------------- ICI
     For I = 1 To 17
         If Me.Controls("TextBox" & I).Visible = True Then
            Ws.Cells(Ligne, I + 144) = Me.Controls("TextBox" & I)
         End If
     Next I
   End If
ActiveSheet.Protect '<-------------------------------------------------------- ICI
Application.ScreenUpdating = True
Call ComboBox1_Change
End Sub

Donc en actionnant ce bouton vous retirez la protection puis la réappliquez par défaut. Je pense que c'est cette commande qui vous fait ce "bug", je vous laisse reproduire et corriger le cas échéant via l'aide Microsoft vous devriez y arriver.

PS : Dans le fichier joint j'ai supprimé toutes les MEFC dupliquées à cause de C/C et certaines formules qui rendaient votre fichier inutilisable. Je vous conseille fortement de reprendre le votre et d'uniformiser les plages d'application des MEFC et de revoir 2-3 formules si vous constatez des ralentissements. Je pense qu'il vous faudra a un moment ou a un autre repenser votre fichier ;)

Cdlt,

9test-net.xlsm (104.20 Ko)

Bonjour Ergotamine

Tout d'abord merci infiniment, le code que vous m'avez suggéré fonctionne parfaitement bien ! bravo Et le "bonus" pour avoir directement le BC à venir , c'est parfait !

J'ai toutefois remarqué un bug. dans le combobox, quand vous sélectionnez un BC puis que vous appuyez sur la flèche "retour en arrière" du clavier (pour l'effacer suite erreur saisie) cela génère un code erreur d'exécution '13' Incomparabilité de type / Qui renvoie à la commande suivante : (photo)

En effet, je n'avais pas vu les éléments de protection dans le code. Ils ne me sont d'aucune utilité, je les ai donc supprimés. Encore une fois, comme on dit, bien vu l'aveugle :)

Pour les MEFC, je ne comprend pas comment je pourrais les uniformiser car elle s'appliquent toutes automatiquement en fonction de l'avancement des signatures. Les formules imbriquées que j'ai mis en place (colonne E) est la seule solution que j'ai trouvé pour mettre à jour l'avancement du BC en temps réel (dès qu'une date est validée).

Dernière petite chose,

C'est rare, mais je peux être amené à avoir des BC "alphanumérique" (Ex: 605 AR) que dois-je rajouter dans le code pour que la combobox prennent en compte du numérique ou texte indifféremment.

capture

Pour la protection, je ne peux pas l'enlever. Sinon cela génère une erreur lorsque j'utilise le bouton modifier. Que faudrait-il faire pour éviter cela?

Bonjour,

Pour ce qui est de la possibilité d'avoir du alphanumérique dans ce cas 2 possibilités :
- On traite tout en texte dans le fichier mais dans le code on transforme les données pour incrémenter automatiquement (exemple choisi) mais il faut obligatoirement un formalisme dans la codification. Par exemple ici on a un espace entre le chiffre et AR.
- On n'affiche rien dans la textbox, pas d'automatisation

Mais je n'irai pas plus loin car ce n'est pas l'objet ici. En tout les cas des codes ci-contre avec une gestion d'erreur pour votre soucis de suppression de donnée de la combobox :

Private Sub CommandButton5_Click() 'Ajouter un nouveau BC'
Dim L%
With Worksheets("BC")
    L = .Range("ED" & .Rows.Count).End(xlUp).Row + 1
    .Cells(L, 134) = CStr(Me.TextBox20)
    Me.ComboBox1.AddItem Me.TextBox20
    If InStr(1, .Cells(L, 134), " ") = 0 Then
        Me.TextBox20 = .Cells(L, 134) + 1
        Else
        Me.TextBox20 = Left(.Cells(L, 134), InStr(1, .Cells(L, 134), " ") - 1) + 1
    End If
    Me.Label71 = .Cells(L, 134)
End With
End Sub

'Pour le formulaire
Private Sub UserForm_Initialize()
Application.ScreenUpdating = False
Dim J As Long, I%, L%
With Worksheets("BC")
    L = .Range("ED" & Rows.Count).End(xlUp).Row
    For J = 10 To L
        Me.ComboBox1.AddItem .Range("ED" & J)
    Next J
    If InStr(1, .Cells(L, 134), " ") = 0 Then
        Me.TextBox20 = .Cells(L, 134) + 1
        Else
        Me.TextBox20 = Left(.Cells(L, 134), InStr(1, .Cells(L, 134), " ") - 1) + 1
    End If
    Me.Label71 = .Range("ED65000").End(xlUp).Rows
End With
Application.ScreenUpdating = True
End Sub

'Pour la liste déroulante BC'
Private Sub ComboBox1_Change()
Application.ScreenUpdating = False
Dim I%, L%
With Worksheets("BC")
On Error GoTo SORTIE
    L = Application.Match(Me.ComboBox1, .Range("ED10:ED" & .Cells(.Rows.Count, 134).End(xlUp).Row), 0) + 9
    If Me.ComboBox1.ListIndex = -1 Then Exit Sub
    For I = 1 To 18
        Me.Controls("TextBox" & I) = .Cells(L, I + 115)
    Next I
    Me.Label46 = CStr(Application.Index(.Range("EE:EE"), L))
    Me.Label47 = CStr(Application.Index(.Range("EF:EF"), L))
    Me.Label52 = CStr(Application.Index(.Range("AA:AA"), L))
    Me.Label54 = CStr(Application.Index(.Range("I:I"), L))
    Me.Label56 = CStr(Application.Index(.Range("EG:EG"), L))
    Me.Label59 = CStr(Application.Index(.Range("C:C"), L))
    Me.Label61 = CStr(Application.Index(.Range("L:L"), L))
    Me.Label62 = CStr(Application.Index(.Range("BM:BM"), L))
End With
Exit Sub
Application.ScreenUpdating = True
SORTIE:  MsgBox "BC non trouvé, merci de recommencer une nouvelle saisie", vbCritical: Exit Sub
End Sub

Pour ce qui est de la protection :

ActiveSheet.Protect , False, True, False, True, True, True, True, True, True, True, True

Avec le fichier joint pour que vous puissiez étudier. Attention je n'ai pas revu l'entièreté du code juste quelques passages qui me gênaient pour arriver à mon résultat escompté. Je vous laisse adapter.

Cdlt,

16test-net.xlsm (115.27 Ko)

Bonjour !

Merci infiniment, vous m'avez levé pas mal de petites épines du pied ! Bravo encore

Le fichier fonctionne maintenant comme je le souhaite. N'ayant aucune formation VBA, je me suis débrouillé seuil pour monter le code, user etc en prenant à droite à gauche sur des tutos et autres forums. Il me fallait juste un petit coup de pouce !

Au plaisir

Bonjour Ergotamine.

Je viens de me rendre compte que lorsque je sélectionne n'importe quel BC, j'obtiens directement le message d'erreur... et je n'arrive pas à voir d'où vient le pb car même en ayant transposé votre code sur le fichier source, la feuille est exactement la même.

Si j'enlève la ligne "On Error" et "Sortie", j'obtiens un débogage sur cette ligne :

L = Application.Match(Me.ComboBox1, .Range("ED10:ED" & .Cells(.Rows.Count, 134).End(xlUp).Row), 0) + 9

Bonjour,

Attention sur mon fichier les données de la colonne ED ont été converties au format TEXTE via la manipulation suivante :

image

Toute valeur présente dans cette colonne doit être au format texte. Si vous regardez mon fichier joint plus haut, les "nombres" sont alignés à gauche avec une petite flèche verte m'indiquant à convertir leur format en numérique. Ce que je ne souhaite pas car je travaille uniquement sur des valeurs textuelles.

Cdlt,

Il est vrai que je n'avais pas précisé, et cela ne m'est pas venu à l'esprit.

Les BC, depuis le début sont numéroté ainsi : 1 2 3 4 etc

Lorsque l'on réceptionne la commande qui n'est pas complète, on insère une ligne et l'on duplique le BC en question sur cette nouvelle ligne. Seules les datas relatives à la partie non réceptionnée seront remplies. Mais, le BC est le même (il y a donc sur la colonne ED des BC en doublon (voire triplons))

Ceci étant, je viens de faire une manip en mettant :

451

451 R

ou

423

423 R1

423 R2

Histoire de bien différencier et éviter ces doubles (qui pourraient entrainer un bug via le code)

Mais cela me génère toujours la même chose.

Oui ! Impeccable :)

Merci

Rechercher des sujets similaires à "bug options protection feuille"