Problème fermeture classeur si mauvais MDP

Bonjour à tous !

Alors voilà : je suis en train de créer un fichier Excel pour mon boulot qui sera utilisé par un certains nombre de personnes.

C'est pour cela que j'ai créé un onglet qui se nomme "utilisateurs", dans lesquels j'ai répertorié toutes les personnes pouvant modifier le fichier, ainsi qu'un onglet "journal" qui enregistre ligne par ligne, qui a réalisé les modifications, la date ainsi que l'heure à laquelle ça a été fait.

Pour les personnes non autorisées à modifier, celles-ci peuvent tout de même accéder au fichier en lecture seule.

Voici mon problème : Pour les personne qui se trompent dans le "MDP", je veux tout simplement que le fichier se ferme, après avoir appelé une Msgbox qui leur indique que leur MDP était faux.

Je ne comprends absolument pas pourquoi le code suivant ne fonctionne pas à ce niveau ...

Le message d'erreur suivant apparaît : Erreur d'exécutionn '1004' : Erreur définie par l'application ou par l'objet

Merci de bien vouloir m'aider !

Pour vous remercier, j'ai laissé la petite blague en bonus ! Merci beaucoup à tous.

Voici le code :

vReponse = MsgBox("Ce fichier est en accès limité. avez-vous un code d'accès?", vbYesNo, "SECURITE")

If vReponse = vbNo Then

Reponse = MsgBox("Vous allez passer en lecture seule" + Chr(10) & "Bonne lecture", vbExclamation + vbYesCancel)

ThisWorkbook.Saved = True

ActiveWorkbook.ChangeFileAccess Mode:=xlReadOnly

Else

Reponse1 = InputBox("Entrez votre NOM en majuscule svp")

LCase (Reponse1)

LCase (Reponse2)

Reponse2 = InputBox("Entrez votre PRÉNOM en majuscule svp")

Worksheets("utilisateurs").Select

codeutil = WorksheetFunction.VLookup(Reponse1, Range("utilisateurs!A2:B60"), 2, False)

If codeutil <> Reponse2 Then

MsgBox "Désolé, Mot de passe incorrect", vbOKOnly, "SECURITE"

Application.DisplayAlerts = False

ActiveWorkbook.Close

Application.Exit

Application.DisplayAlerts = True

Else

Select Case Hour(Time)

Case 8 To 11

Message = ("Bonjour" + Chr(10) & Reponse2 & " " & Reponse1)

Case 12, 13

Message = ("N'est-il pas l'heure d'aller déjeuner?" + Chr(10) & Reponse2 & " " & Reponse1)

Case 14 To 18

Message = ("Bon après-midi" + Chr(10) & Reponse2 & " " & Reponse1)

Case 18 To 20

Message = ("Est-ce une heure raisonnable pour travailler sur ce tableau ?" + Chr(10) & Reponse2 & " " & Reponse1)

Case Else

Message = ("Ce n'est pas une heure pour travailler sur ce tableau !" + Chr(10) & Reponse2 & " " & Reponse1)

End Select

MsgBox Message

Bonjour,

Sous Excel 2016...

J'ai testé ton code. Le seul changement que j'ai fait, est LCase(Response2) que j'ai déplacé 2 lignes plus bas, sous Reponse2.......

J'ai simulé l'erreur et tout a bien fonctionné.

Sub bobobo()
vReponse = MsgBox("Ce fichier est en accès limité. avez-vous un code d'accès?", vbYesNo, "SECURITE")
If vReponse = vbNo Then
   Reponse = MsgBox("Vous allez passer en lecture seule" + Chr(10) & "Bonne lecture", vbExclamation + vbYesCancel)
   ThisWorkbook.Saved = True
   ActiveWorkbook.ChangeFileAccess Mode:=xlReadOnly
Else
   Reponse1 = InputBox("Entrez votre NOM en majuscule svp")
   Reponse1 = UCase (Reponse1)
   Reponse2 = InputBox("Entrez votre PRÉNOM en majuscule svp")
   Reponse2 = UCase (Reponse2)
   Worksheets("utilisateurs").Select
   codeutil = WorksheetFunction.VLookup(Reponse1, Range("utilisateurs!A2:B60"), 2, False)
   If codeutil <> Reponse2 Then
      MsgBox "Désolé, Mot de passe incorrect", vbOKOnly, "SECURITE"
      Application.DisplayAlerts = False
      ActiveWorkbook.Close
      Application.Exit
      Application.DisplayAlerts = True
   Else
      Select Case Hour(Time)
      Case 8 To 11
         Message = ("Bonjour" + Chr(10) & Reponse2 & " " & Reponse1)
      Case 12, 13
         Message = ("N'est-il pas l'heure d'aller déjeuner?" + Chr(10) & Reponse2 & " " & Reponse1)
      Case 14 To 18
         Message = ("Bon après-midi" + Chr(10) & Reponse2 & " " & Reponse1)
      Case 18 To 20
         Message = ("Est-ce une heure raisonnable pour travailler sur ce tableau ?" + Chr(10) & Reponse2 & " " & Reponse1)
      Case Else
         Message = ("Ce n'est pas une heure pour travailler sur ce tableau !" + Chr(10) & Reponse2 & " " & Reponse1)
      End Select
      MsgBox Message
   End If
End If
End Sub

Gelinotte

Bonjour !

Merci Gelinotte pour ta réponse.

Une fois avoir appliqué la modification que tu m'as donné, voici la nouvelle ereur :

b]Erreur d'exécution '1004' :

Impossible de lire la propriété VLookup de la classe WorkSheet Function[/b]

Je ne comprends pas car il s'agit d'une RechercheV tout ce qu'il y a de plus classique ...

En réalité je reprends l'application d'un collègue qui est parti, et je débute en VBA donc j'ai pas mal de difficulés.

J'ai l'impression qu'il y a une autre incohérence dans le code ...

La Msgbox demande de renseigner le nom et le prénom en majuscule, alors que LCase rend tous les caractères renseignés en minuscule, je me trompe ?

Il serait je pense plus judicieux d'utiliser Ucase et de ne pas indiquer comment l'utilisateur doit remplir son nom et son prénom.

De ce fait, peu importe comment il écrit, UCase ransforme ensuite ça en une chaine de caractère majuscule, ce qui doit coller à mo onglet "Utilisateurs" normaement.

Merci de m'éclairer ...

Bonjour,

J'ai pris le temps de tester le code sous Excel 2010; il fonctionne bien.

L'erreur ne provient pas du code. Elle doit provenir des données dans lesquelles la recherche est effectuée.

Gelinotte

Bonjour,

Tu as essayé plusieurs possibilités ?

Quand je met un utilisateur correcte : cela fonctionne bien. Je me connecte bien au fichier, et mon onglet journal est alimenté.

Quand je me trompe (en mettant au moins un caractère en minuscule) : cela fonctionne bien. J'ai la msgbox qui apparaît et la page se ferme.

Quand je me trompe (en ne mettant que des majuscules) : Erreur dexécution 1004 : Impossible de lire la propriété VLookup de la classe WorkSheet Function.

Je pense que l'erreur vient vraiment du LCase je le comprends pas du tout ...

Merci.

Question toute bête pourquoi n'utilise pas la fonction de protection par mot de passe incluse dans Excel ? Tu protège ta / tes feuille avec un mot de passe et tu refile le mots de passes aux seules personnes autorisées...

Salut Astragor !

J'utilise également cete protection.

Chaque agent a son mdp, qui lui permet de modifier uniquement les feuilles auxquelles ils est affecté.

Plus que pour protéger la feuille (car n'importe qui pourrait y accéder juste en connaissant le nom d'une personne autorisée), cette demande de nom et de prénom me permet de remplir un onglet "journal". Cet onglet m'indique qui a modifié le fichier, à quelle date et à quelle heure.

Oki j'avais zappé la partie journal !

Pas de problème !

Pas d'idées quant à mon problème ?

Bonjour

AF-VBA a écrit :

Bonjour,

Tu as essayé plusieurs possibilités ?

Quand je met un utilisateur correcte : cela fonctionne bien. Je me connecte bien au fichier, et mon onglet journal est alimenté.

Quand je me trompe (en mettant au moins un caractère en minuscule) : cela fonctionne bien. J'ai la msgbox qui apparaît et la page se ferme.

Quand je me trompe (en ne mettant que des majuscules) : Erreur dexécution 1004 : Impossible de lire la propriété VLookup de la classe WorkSheet Function.

Je pense que l'erreur vient vraiment du LCase je le comprends pas du tout ...

Merci.

C'est la difficulté de travailler sans filet. Tu n'as pas fourni de fichier sur lequel travailler. Maintenant, tu me demandes d'essayer toutes les possibilités. Je ne crois pas que je vais m'y mettre.

Mais si tu fournis un fichier avec des exemples de combinaisons susceptibles d'être utilisées, dont le genre de combinaison qui te pose problème, je vais regarder ce qui accroche.

Au plaisir...

Gelinotte

Désolé.

Voici le fichier dégrossi au maximum.

Le nom à renseigner est "EXCEL" et le prénom "PRATIQUE".

Je ne comprends vraiment pas comment ça fonctionne. Il me semble que :

  • EXCEL peut être écrit en minuscule, mais pas PRATIQUE
  • Lorsque je me trompe de prénom, cela fonctionne correctement.
  • Lorsque je me trompe de nom, j'ai une erreur.

De plus, lorsque je ferme l'une ou l'autre (ou les deux) fenêtre(s), j'aimerais que le fichier excel se ferme directement. Comment faire cela ?

8fichier-neutre.xlsm (282.04 Ko)

Bonjour,

De la façon que ton code est écrit, le nom ne sert qu'à trouver la ligne pour trouver le prénom dans la cellule voisine.

La validation de l'accès ne se fait ensuite sur le prénom.

Dans ton code, UCase (Reponse1), ne sert à rien. Pour qu'il soit efficace, il faut écrire : Reponse1 = UCase (Reponse1). Je dois m'excuser de ne pas l'avoir remarqué avant, probablement la fatigue.

Ainsi, si l'on tape des minuscules, cela n'aurait pas d'importance, les caractères de la Reponse1 seront transformés en majuscule.

Idem pour Reponse2. Si c'est que tu désires ... bien sûr.

Je ne réussis pas à avoir l'erreur 1004.

Gelinotte

Bonjour !

Merci pour le UCase, plus de problème de ce coté là !

Si, l'erreur 1004 intervient quand le nom est faux. Mais tu as raison, c'est juste car on lui dit d'effectuer une RechercheV avec le nom, or il ne le trouve pas.

Il faut donc, à mon avis, que je rajoute une condition :

SI Reponse1 apparaît quelque part dans la colonne A de l'onglet "Utilisateurs", ALORS codeutil=WorkSheetFunction.VLookup (...)

SINON Msgbox "Désolé, Mot de passe incorrect" (...)

Qu'en penses-tu ?

Quelle fonction me permettrait de rechercher Reponse1 dans la colonne A de l'onglet "Utilisateurs"?

Merci beaucoup en tout cas !

Bonjour,

J'ai testé sous Excel 2010.

Au début de ton code, il y a : "On Error GoTo 0" remplace par : "On Error Resume Next".

Ainsi, si les infos saisies ne sont pas trouvées, ça dit simplement : "Désolé, Mot de passe incorrect" et le classeur se ferme.

Gelinotte

Bonjour,

Merci beaucoup Gelinotte, ça fonctionne bien.

J'ai juste une dernière question, avant de cloturer le sujet.

Je suis sur un truc depuis ce matin mais je n'y arrive pas ...

J'aimerais laisser une chance aux utilisateurs de se tromper.

J'aimerais que, si l'utilisateur se trompe une fois : une msgbox affiche " Désolé, mot de passe incorrect, veuillez recommencer". A ce moment la les inputbox et les tests se répètent.

Par contre, s'il se trompe une nouvelle fois, la page se ferme pour de bon.

Je ne sais pas s'il faut mettre en place une boucle ou pas, étant donné que la msgbox "SECURITE" n'afficherait pas la même chose selon si l'utilisateur se trompe pour la première ou pour la deuxième fois.

Merci !

Bonjour,

J'ai ajouté un 2e essai au cas d'une erreur.

J'ai aussi ajouté l'obligation de ne pas laisser les InputBox vides.

Aussi, avant la recherche (validation des infos), la feuille "Utilisateurs" était sélectionnée. Lors d'une erreur, cette feuille s'affichait à l'écran ... grosse faille ... j'ai désactivé cette ligne et simplement ajouté le nom de la feuille devant le champ où effectuer la recherche. Ça fonctionne bien et c'est plus discret.

À tester ...

Gelinotte

Je ne pouvais espérer mieux ...

J'ai retranscris ton code sur mon vrai fichier, ça fonctionne parfaitement.

Mieux encore : j'ai compris tout le code que tu as fait. En partie grace à l'alignement des fonctions, ce qui aide énormément à la compréhension.

Effectivement, le fait que la feuille utilisateurs apparaisse est une grosse faille, c'est parfait comme ça.

Merci milles fois !

Il y a de grandes chances que je sollicite de nouvelles fois le forum pour ce même fichier dans les prochaines semaines ...

A l'occasion (et lorsque je me serai amélioré en VBA), j'essayerai également d'apporter mon aide aux autres utilisateurs.

Merci beaucoup, bon week-end !

Bonjour,

Nice week-end too

Gelinotte

Bonjour !

Il m'a fallu près d'un mois mais ... J'ai en fait remarqué une erreur au code. x)

Quand le nom et le prénom sont faux, j'ai bien une msg box qui s'affiche comme quoi c'est pas bon, et une inputbox qui me redemande mon nom et mon prénom.

Sauf que : si je me trompe la première fois, c'est foutu. Car même si j'entre un nom et un prénom valide la deuxième fois, ça va faire comme si le nom ou le prénom était faux, et donc la page se ferme ...

Merci beaucoup de tenter de m'aider !

Bonne journée à tous.

Bonjour,

Je regarde cela aujourd'hui ...

Gelinotte

Rechercher des sujets similaires à "probleme fermeture classeur mauvais mdp"