BUG avec Les options de protection d'une feuille Excel

Désolé... Je reviens encore

Le fait d'avoir modifié en partie le code, le code pour "Pour le bouton modifier" ne fonctionne plus. En effet, lorsque je sélectionne une date puis que je valide en cliquant sur "modifier", une erreur apparait.

J'ai essayé de remettre "Dim Ws As Worksheet" en haut de la page (qui avait disparu) mais ça ne veut rien savoir.

Pour la colonne ED, j'ai bien suivi vos instructions pour la convertir en "Texte". Cela fonctionne. Mais dès que j'ajoute un nouveau BC, ce dernier s'incrémente en "Nombre" et donc quand je dois le sélectionner avec la ComboBox, il ne le reconnait évidemment pas. Je dois donc retourner dans la cellule pour la repasser en "Texte"

J'ai essayé le code joint,

Je n'ai plus le message d'erreur, mais la modification ne s'opère pas...

'Pour le bouton Modifier

Private Sub CommandButton2_Click()
Set Ws = Sheets("BC")
Application.ScreenUpdating = False
Dim I%, L%

   If MsgBox("Confirmez-vous les modifications apportées ?", vbYesNo, "Demande de confirmation de modification") = vbYes Then
     If Me.ComboBox1.ListIndex = -1 Then Exit Sub

         L = Me.ComboBox1.ListIndex + 1
ActiveSheet.Unprotect
     For I = 1 To 18
         If Me.Controls("TextBox" & I).Visible = True Then
            Ws.Cells(L, I + 115) = Me.Controls("TextBox" & I)
         End If
     Next I
   End If
ActiveSheet.Protect
Application.ScreenUpdating = True
Call ComboBox1_Change
End Sub

Bonjour,

Chez moi avec ce code ça fonctionne :

'Pour le bouton Modifier
Private Sub CommandButton2_Click()
Application.ScreenUpdating = False
Dim I%, L%
With Worksheets("BC")
   If MsgBox("Confirmez-vous les modifications apportées ?", vbYesNo, "Demande de confirmation de modification") = vbYes Then
        If Me.ComboBox1.ListIndex = -1 Then Exit Sub
        On Error GoTo SORTIE
        L = Application.Match(Me.ComboBox1, .Range("ED10:ED" & .Cells(.Rows.Count, 134).End(xlUp).Row), 0) + 9
        .Unprotect
            For I = 1 To 18
            If Me.Controls("TextBox" & I).Visible = True Then
                .Cells(L, I + 115) = Me.Controls("TextBox" & I)
            End If
        Next I
    End If
    .Protect , False, True, False, True, True, True, True, True, True, True, True
    Me.Label71 = .Range("ED65000").End(xlUp).Rows
End With
Exit Sub
SORTIE:  MsgBox "BC non trouvé, merci de recommencer une nouvelle saisie", vbCritical: Exit Sub
Application.ScreenUpdating = True
End Sub

Comme expliqué je n'ai pas évalué tous les impacts du code.

Par contre j'ai vu qu'ici aussi vous utilisiez la méthode Unprotect/Protect, je l'ai modifié en conséquence.

Cdlt,

Génial, cela fonctionne aussi ici maintenant ! Merci beaucoup !

Bonjour :) c'est encore moi ...

Je suis ravi, j'ai bien vérifié toutes les macro du userform, tout fonctionne telle une montre Suisse.

Par contre Toujours une bizarrerie avec la protection de la feuille Excel.

La commande que vous avez mis dans le code fonctionne mais lorsqu'elle protège à nouveau la feuille, elle ne la remet pas aux paramètres que j'avais définis. (j'ai absolument besoin d'avoir tout de coché sauf "Insérer des colonnes" "Supprimer des colonnes" "Supprimer des lignes"

Donc je définis mes paramètres : Photo 1

Ensuite, je fais une manip d'ajout d'une date sur un BC et je clique sur "modifier"

Je retourne dans le fichier et là : Photo 2 --> Les paramètres de protection ont changé. (tout est coché sauf ce que vous voyez sur la photo 2)

Est-ce un réglage à faire avec le code ?

Merci d'avance !

capture 1 capture 2

Bonjour,

Même si vous ne voyez pas ces cases côchées elles le sont lorsque la protection est active. Pour vérifie, fiez vous au bandeau de commande et regardez les filtres et tris, les options sont grisées :

image

En tout cas chez moi ça l'est. Je vous laisse me confirmer.

Cdlt,

Bonjour,

Oui justement, ces options sont grisées alors qu'elles ne devraient pas l'être... (j'ai surtout besoin que les filtres soient actifs) La seule protection qu'il me faut malgré le verrouillage de la feuille c'est

- Impossibilité de d'insérer une colonne

- Impossibilité de supprimer une colonne

- Impossibilité de supprimer une ligne

Cordialement,

Bonjour,

Dans ce cas si vous voulez autoriser juste le filtre remplacez les méthodes par :

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

Pour le tri :

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

Dans le cas du tri, il est par contre nécessaire que les cellules soient déprotégées car le contenu de leur référence change (en effet après tri, A2 n'aura peut être pas la même valeur que A2 avant tri). Donc cliquez droit sur l'ensemble des cellules > Format de cellule > Protection > Décocher "Vérouillée". Cependant les utilisateurs pourront modifier leur contenu.

Libre à vous de définir le niveau de sécurité adéquat en fonction de vos besoins.

Cdlt,

Bonjour Ergotamine,

Oui, avec votre dernier code (filtre) cela fonctionne bien, il filtre est bien toujours actif même après avoir effectué une modification.

J'ai une petite question concernant la combobox. Lorsque je sélectionne un BC (par exemple le 589) et que j'ouvre le Userfom, l'information affichée concernant le dernier BC est 534 (au lieu de 608 actuellement) et donc le prochain 535. Le code prend en compte le "dernier" et "prochain" en fonction de ce qui est affiché et non en fonction des données réelles dans le fichier (même si masquées par le filtre). Est-ce possible "VBAment parlant" de modifier cela ou non ?

Merci et bonne journée

Bonjour,

Par VBA c'est possible mais pas avec la méthode que vous indiquez. En effet, en cas de filtre, la dernière ligne de la table filtrée s'obtient de cette façon :

With Worksheets("BC")
    L = .AutoFilter.Range.Row + .AutoFilter.Range.Rows.Count - 1
End With

Contrairement à la méthode end(xlup) qui renvoie la dernière cellule visible (donc la dernière cellule correspondant à la valeur filtrée).

Il faudrait donc remplacer votre ancienne méthode par la nouvelle et tester.

Cdlt,

Rechercher des sujets similaires à "bug options protection feuille"