Microsoft 365 Aide pour terminer un code Vba Excel

NONO14

XLDnaute Occasionnel
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...

herve62

XLDnaute Barbatruc
Supporter XLD
Voilà les modif > Ajout sub selction_change
Dans le code du bouton_clic dernière ligne A1.select sup puisque interdit sinon ça boucle en erreur
j'ai sup. le before_close sinon on sait pas quitter excel
 

Pièces jointes

  • Tablo_Heures.xlsm
    80.3 KB · Affichages: 5
Dernière édition:

NONO14

XLDnaute Occasionnel
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:

job75

XLDnaute Barbatruc
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

  • Tablo_Heures2.xlsm
    92.8 KB · Affichages: 2

NONO14

XLDnaute Occasionnel
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

  • Tablo_Heures.xlsm
    776.1 KB · Affichages: 1

Dranreb

XLDnaute Barbatruc
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
 

NONO14

XLDnaute Occasionnel
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.
 

job75

XLDnaute Barbatruc
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

  • Tablo_Heures2.xlsm
    92.9 KB · Affichages: 3

NONO14

XLDnaute Occasionnel
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

  • Tablo_Heures.xlsm
    275.4 KB · Affichages: 1

Discussions similaires

Réponses
32
Affichages
660
Réponses
10
Affichages
463
Réponses
6
Affichages
358

Statistiques des forums

Discussions
313 866
Messages
2 103 082
Membres
108 521
dernier inscrit
manouba