Microsoft 365 Aide pour terminer un code Vba Excel

  • Initiateur de la discussion Initiateur de la discussion NONO14
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

NONO14

XLDnaute Impliqué
Bonjour à toutes et à tous

J'ai ce commencement de code qui me permet après un clic sur un bouton de pouvoir modifier les cellules du tableau si la saisie d'un mot de passe "falaise" est ok.
Cependant je souhaiterai interdire la modification des lignes 1 à 4. Comment puis-je procéder s'il vous plait ?
Merci par avance pour votre aide
Il s'agit ici du code du formulaire mot de passe.

VB:
Private Sub CommandButton1_Click()
  If T1.Value = "falaise" Then
    Load UfMDP
    Range(D5).Select
    Exit Sub
  End If
  Unload Me
  MsgBox "Mot de passe erroné - Recommencez", vbCritical, "Attention : "
      Cells(1, 1).Select
End Sub
 
Solution
J'ai testé le fichier modifié et je rencontre un soucis. A l'ouverture du fichier, je ne peux plus saisir dans le tableau de la feuille "Saisie", toutes les cellules sont verrouillées.
Il faut que je puisse saisir dans les cellules vides
Il suffit de déverrouiller les cellules vides, dans ThisWorkbook :
VB:
Private Sub Workbook_Open()
With Sheets("Saisie")
    .Protect "falaise", UserInterfaceOnly:=True
    .EnableSelection = xlNoRestrictions
    .Cells.Locked = True
    .Rows("3:" & .Rows.Count).SpecialCells(xlCellTypeBlanks).Locked = False 'déverrouille les cellules vides
End With
Me.Saved = True 'évite l'invite à la fermeture si aucune modification
End Sub
J'ai commis une erreur, seules les colonnes A et B sont...
Bonjour à tous, bonjour herve62,

Merci pour votre aide, toutefois cela ne fonctionne pas correctement. En effet, après avoir tapé le mot de passe, le formulaire reste à l'écran, je suis obligé de cliquer sur le bouton "annuler" pour qu'il puisse se fermer.
Pour être plus clair voici la démarche que je souhaite :
- On clique sur le bouton "Effectuer une modification" - Feuille "Saisie"
- Le formulaire pour le mot de passe s'affiche à l'écran.
- On tape le mot de passe "falaise", le formulaire se ferme et c'est à ce moment là que doit apparaître le message d'avertissement "Les lignes 1 à 4 ne sont pas modifiables".

J'aurai du être plus précis dès le départ de ma demande. Toutes mes excuses.

En fait, j'ai simplement verrouillé les cellules qui doivent être inaccessibles, c'est tout bête.
 
Dernière édition:
Bonjour NONO14, herve62, le forum,

D'abord dans ThisWorkbook :
VB:
Private Sub Workbook_Open()
With Sheets("Saisie")
    .Protect "falaise", UserInterfaceOnly:=True
    .Cells.Locked = True
    .EnableSelection = xlNoRestrictions
End With
Me.Saved = True 'évite l'invite à la fermeture si aucune modification
End Sub
Ensuite le code de l'UserForm "UfMDP" :
VB:
Private Sub UserForm_Initialize()
SansCroix Me
End Sub

Private Sub CommandButton1_Click()
If T1 = "falaise" Then
    Sheets("Saisie").Range("5:" & Rows.Count).Locked = False
    Unload Me
    MsgBox "Vous pouvez modifier les cellules sous la ligne 4..."
Else
    MsgBox "Mot de passe erroné..."
    T1 = ""
    T1.SetFocus
End If
End Sub

Private Sub CommandButton2_Click()
Unload Me
End Sub
A+
 

Pièces jointes

Bonjour NONO14, herve62, le forum,

D'abord dans ThisWorkbook :
VB:
Private Sub Workbook_Open()
With Sheets("Saisie")
    .Protect "falaise", UserInterfaceOnly:=True
    .Cells.Locked = True
    .EnableSelection = xlNoRestrictions
End With
Me.Saved = True 'évite l'invite à la fermeture si aucune modification
End Sub
Ensuite le code de l'UserForm "UfMDP" :
VB:
Private Sub UserForm_Initialize()
SansCroix Me
End Sub

Private Sub CommandButton1_Click()
If T1 = "falaise" Then
    Sheets("Saisie").Range("5:" & Rows.Count).Locked = False
    Unload Me
    MsgBox "Vous pouvez modifier les cellules sous la ligne 4..."
Else
    MsgBox "Mot de passe erroné..."
    T1 = ""
    T1.SetFocus
End If
End Sub

Private Sub CommandButton2_Click()
Unload Me
End Sub
A+
Bonjour job75,
Merci beaucoup pour votre code, ça fonctionne bien également. Si je peux me permettre une petite demande supplémentaire, je souhaiterai également que la colonne C de la feuille saisie soit verrouillée car il y a une formule de calcul dedans à moins qu'il y ait une possibilité avec Vba de faire une rechercheV à partir du code saisi en colonne D. Si l'on peut l'écrire ça en Vba alors plus de risque d'effacement.
Voici la formule des cellules de la colonne C :
VB:
=SI(Saisie!$B5="";"";SI(ESTNA(RECHERCHEV(Saisie!$B5;Feuil2!$A$2:$B$30;2;FAUX))=VRAI;"Code introuvable";RECHERCHEV(Saisie!$B5;Feuil2!$A$2:$B$30;2;FAUX)))
 

Pièces jointes

Bonjour.
Dans le fond, cette Sub à mettre derrière la Sub Aleatoire ferait le job :
VB:
Sub MettreLesNoms()
   Dim LAt As New ListeAléat, TCodes(), TNoms(), TRésu(), L&, P&
   Rnd -1: Randomize 0.5
   LAt.Init 2000
   TCodes = Feuil4.[B5].Resize(Feuil4.[B2002].End(xlUp).Row - 4).Value
   TNoms = Feuil2.[B2:B2001].Value
   ReDim TRésu(1 To UBound(TCodes, 1), 1 To 1)
   For L = 1 To UBound(TRésu, 1)
      P = LAt.Pos(Mid$(TCodes(L, 1), 4) - 99)
      TRésu(L, 1) = TNoms(P, 1)
      Next L
   Feuil4.[C5].Resize(UBound(TRésu, 1)).Value = TRésu
   End Sub
 
Je rencontre un autre problème, à l'ouverture du fichier je ne peux plus saisir dans la colonne B, celle du code agent et elle est essentielle. Par contre, une fois la saisie faite, on ne doit plus pouvoir la modifier, on ne doit pouvoir accéder qu'aux cellules vides de la colonne.
 
je souhaiterai également que la colonne C de la feuille saisie soit verrouillée car il y a une formule de calcul dedans
Vous deviez pouvoir trouver vous-même, dans l'UserForm :
VB:
Private Sub CommandButton1_Click()
If T1 = "falaise" Then
    Sheets("Saisie").Range("5:" & Rows.Count).Locked = False
    Sheets("Saisie").Columns("C").Locked = True
    Unload Me
    MsgBox "Vous pouvez modifier les cellules sous la ligne 4 hors colonne C..."
Else
    MsgBox "Mot de passe erroné..."
    T1 = ""
    T1.SetFocus
End If
End Sub
 

Pièces jointes

Vous deviez pouvoir trouver vous-même, dans l'UserForm :
VB:
Private Sub CommandButton1_Click()
If T1 = "falaise" Then
    Sheets("Saisie").Range("5:" & Rows.Count).Locked = False
    Sheets("Saisie").Columns("C").Locked = True
    Unload Me
    MsgBox "Vous pouvez modifier les cellules sous la ligne 4 hors colonne C..."
Else
    MsgBox "Mot de passe erroné..."
    T1 = ""
    T1.SetFocus
End If
End Sub
Bonjour à toutes et à tous,

Je reviens avec mon fichier pour un problème lié au code ci-dessous que je n'arrive pas à comprendre.
Lorsque je clique sur le bouton "Ouvrir le formulaire" dans la feuille Saisie, un menu s'affiche, et sur celui-ci je clique sur "Modifier une saisie de pointage". Le formulaire Mot de passe apparaît, je tape le mot de passe "falaise" et voici le message qui s'affiche "Erreur d'exécution 1004 - Impossible de définir la propriété Locked de la classe Range".
Le code se trouve dans UfMdP - Bouton "valider".
Pouvez-vous m'expliquer et m'aider à résoudre ce problème s'il vous plaît ?
Je vous en remercie par avance
Code:
Private Sub CommandButton1_Click()
If T1 = "falaise" Then
    Sheets("Saisie").Range("3:" & Rows.Count).Locked = False
    Sheets("Saisie").Columns("C").Locked = True
    Unload Me
    MsgBox "Vous pouvez modifier les cellules sous la ligne 2 hors colonne C..."
Else
    MsgBox "Mot de passe erroné..."
    T1 = ""
    T1.SetFocus
End If
End Sub
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
32
Affichages
1 K
  • Question Question
Microsoft 365 Probléme VBA
Réponses
8
Affichages
235
Réponses
3
Affichages
53
Réponses
2
Affichages
415
Réponses
3
Affichages
245
  • Question Question
Microsoft 365 Macro vba excel
Réponses
6
Affichages
469
Retour