XL 2019 Aide sur un beug Userform

AIXELS

XLDnaute Occasionnel
Bonjour à tous les amis du Forum. :)
Je vous soumet une routine demandant un mot de passe à l'ouverture d'un fichier.
Pour ne rien vous cacher, je l'ai glané sur internet et c'est plutôt sympa.
Mais il y'a un problème qui me dépasse, message: Erreur de compilation.
Je vous joint le fichier. Ne vous étonnez en le lançant il s'arrête. Chez moi, il le fait.
Par avance, merci pour votre aide.
Bien cordialement.
 

Pièces jointes

  • ERREUR DE COMPILATION.jpg
    ERREUR DE COMPILATION.jpg
    143.5 KB · Affichages: 25
  • MOT_2_PASSE.xlsm
    46.2 KB · Affichages: 5
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
Bonjour AIXELS,

normalement, j'ai la bonne réponse juste après avoir regardé ton image .jpg, sans même avoir téléchargé ton fichier ! ton erreur de compilation se produit car la fonction GetKeyState() n'est pas définie, et tu dois la définir ainsi, en début de module :​

Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer

plus d'infos sur ce lien. :)

(sera à adapter au cas où tu as une version d'Office 64 bits)

soan
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Aixels,
GetKeyState est une fonction d'un librairie externe, il faut donc la déclarer comme tel dans le Module, en tout début avec :
VB:
Declare Function GetKeyState Lib "user32.dll" (ByVal KeyCode As Long) As Integer
Regardez le site d'où est issu cette macro, je pense que c'est précisé dans le code ou en commentaires.
Essayez cette Pj cela semble résoudre votre problème. ( pour du 32 bits, pour du 64 bits regardez ici : https://forum.excel-pratique.com/ex...2-bit-en-64-bit-probleme-de-macro-t86907.html )
 

Pièces jointes

  • MOT_2_PASSE.xlsm
    48.5 KB · Affichages: 5

AIXELS

XLDnaute Occasionnel
Bonjour @soan, @sylvanu.
Merci pour vos réponses respectives qui doivent fonctionner
en mode 32 bits. Mais je suis en mode 64 bits.
De nombreuses macros qui fonctionnaient, ne fonctionnent plus à cause du mode 64.
Avez-vous la solution à ce problème ?
Merci pour votre aide.
Bien cordialement.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD

AIXELS

XLDnaute Occasionnel
Bonjour @sylvanu et tous les amis du Forum. :)
Quelqu'un a-t-il la solution au problème de la détection de l'activation
des minuscules ou Majuscules lors de l'entrée du mot de passe.

Apparemment les deux Textbox clignotent, la détection ne fonctionne pas.
Merci pour votre aide.
Bien cordialement.
 

Pièces jointes

  • MOT_2_PASSE.xlsm
    51.2 KB · Affichages: 3

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re Aixels,
essayez ce code il a l'air de marcher :
VB:
Private Sub UserForm_Activate()
    UserPWD.Caption = "                Accès protégé par Mot de Passe"
        Dim i As Variant
        i = (&H1 And GetKeyState(vbKeyCapital)) <> 0
        If i = True Then
            TextBox2.Visible = True
            TextBox3.Visible = False
            Clignoterpwd 8, Me.TextBox2.Name
        Else
            TextBox2.Visible = False
            TextBox3.Visible = True
            Clignoterpwd 8, Me.TextBox3.Name
        End If
        TextBox1.SetFocus
End Sub
 

Pièces jointes

  • MOT_2_PASSE (3).xlsm
    49.7 KB · Affichages: 6

soan

XLDnaute Barbatruc
Inactif
Bonjour sylvanu, AIXELS,

pour le code VBA de ton post #10, je n'ai pas compris pourquoi tu as choisi pour i le type Variant (type "général" de 16 octets minimum), et pas plutôt le type plus précis Boolean, qui est plus court (2 octets). :)

je propose cette optimisation de ton code VBA :

VB:
Private Sub UserForm_Activate()
  UserPWD = Space$(16) & "Accès protégé par Mot de Passe"
  Dim chn$, i As Boolean
  i = (&H1 And GetKeyState(vbKeyCapital)) <> 0
  TextBox2.Visible = i: TextBox3.Visible = Not i
  chn = IIf(i, TextBox2.Name, TextBox3.Name)
  Clignoterpwd 8, chn: TextBox1.SetFocus
End Sub

note 1 : pour le label UserPWD, c'est le Caption qui est automatiquement utilisé par défaut, c'est pourquoi je ne l'ai pas précisé ; note 2 : dans le code VBA d'un UserForm, c'est inutile de préciser Me. pour chaque contrôle : tous les contrôles du UserForm étant dépendants de ce UserForm, ils sont référencés automatiquement par Me. ; aussi, Me est quasiment presque inutile, sauf par exemple pour Unload Me.



peut-être que tu vas dire que c'est un peu plus difficile à comprendre pour un débutant en VBA ? 😜
réponse : oui, Votre Honneur (= Monsieur le Juge), mais c'est plus court et optimisé ! 😄

soan
 
Dernière édition:

AIXELS

XLDnaute Occasionnel
Bonjour @soan.
Merci pour ta réponse.
Comme je l'ai précisé sur mon message, je l'ai glané sur internet et je l'ai adapté.
Grâce à vos différentes réponses j'apprends et c'est très formateur.
J'en profite pour remercier tous les bénévoles qui donnent de leur temps et de leur savoir.
Merci à toutes et à tous.
Bien cordialement.
 

Discussions similaires

Statistiques des forums

Discussions
312 197
Messages
2 086 104
Membres
103 118
dernier inscrit
mlaf4032