Explications des codes

Bonjour tout le monde,

j’ai retrouvé un ancien fichier que vous, les pros du VBA, m’aviez fait une fois.

Alors je me souviens plus de toutes cos explications et sens des codes. C’est pour cela que j’aurai bien voulu savoir a quoi sert les 2 lignes suivantes dans le code "Private Sub Workbook_Open() ";

hWnd = FindWindowA(vbNullString, Application.Caption)
  SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And &HFFF7FFFF

ainsi que les lignes dans le code ci dessous

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim hWnd As Long
hWnd = FindWindowA(vbNullString, Application.Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) Or &H80000

End Sub

des codes ci-dessous qui sont en gras. Ces codes se trouvent dans le ThisWorkbook du fichier.

Option Explicit
Private Declare PtrSafe Function FindWindowA Lib "user32" _
  (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Declare PtrSafe Function GetWindowLongA Lib "user32" _
  (ByVal hWnd As Long, ByVal nIndex As Long) As Long

Private Declare PtrSafe Function SetWindowLongA Lib "user32" _
  (ByVal hWnd As Long, ByVal nIndex As Long, _
  ByVal dwNewLong As Long) As Long

Private Sub Workbook_Open()
   Dim hWnd As Long
   
    hWnd = FindWindowA(vbNullString, Application.Caption)
      SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And &HFFF7FFFF
    
    Application.ScreenUpdating = False
    Application.Visible = False
    
    CODE_ACCES_LOGICIEL.Show
    Call Cacher
    Call titre
      
    Sheets("ACCUEIL LOGICIEL").Activate 'Afficher la page "ACCUEIL LOGICIEL"
    
    If Application.EoMonth(Date, 0) = Date Then 'Affiche le dernier jour du mois, une information urgente afin de ne pas oublier de clore le mois en cours
    FIN_DES_MOIS.Show
    
    End If

    End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Dim hWnd As Long
  hWnd = FindWindowA(vbNullString, Application.Caption)
  SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) Or &H80000
  
End Sub

Je vous remercie d’avance.

Rubis

Re,

je viens de mettre ces codes dans le ThisWorkbook pour que vous ayez un aperçu.

Alors que veulent dire ces lignes entourées s’il vous plaît ?

Code1
Code2

Merci à vous

Explications codes ThisWorkbook.xlsm (14,9 Ko)

Bonjours Rubis57
Je découvre comme toi je suppose ces instructions
Après avoir fouiné sur internet afin d’en comprendre l’objet et de les mettre en exécution dans un classeur Excel celles-ci ont pour finalité d’attribuer un code numérique unique et différent à chaque ouverture de celui-ci
Ce code est associé à la variable « hWnd » ici :

hWnd = FindWindowA(vbNullString, Application.Caption)

Les lignes de code qui suivent font appel à d’autres procédures qui doivent l’utiliser notamment un formulaire d’autorisation d’accès je suppose dans lequel il doit être saisi :

CODE_ACCES_LOGICIEL.Show

Hélas je n’ais pas ce fichier pour vérifier mes dires donc pure supposition de ma part mais en toute logique

Toujours est il qu’avec ce que j’ai en ma possession j’ai pu constater que ces procédures fournies à chaque ouverture de fichier émettent un code spécifique le même pour ces 2 lignes de codes :

hWnd = FindWindowA(vbNullString, Application.Caption)
      SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And &HFFF7FFFF
hWnd = FindWindowA(vbNullString, Application.Caption)
  SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) Or &H80000

mais toujours différents à chaque réouverture

Voilà ce que je peux dire les concernant avec les connaissances et testes en ma possession

Peut être pour toi des lumières salvatrices

Bonsoir FFO,

Merci pour ces infos. Mais je comprends rien de ces codes !

Ce qui m’intéresserai ; est ce que je peux les supprimer ?
est ce que le fichier peut se bloquer si je supprime ces codes ?

A+

Il me faudrait ce fichier pour je puisse te répondre
Visiblement au vu de ces procédures ces lignes sont activées à l’ouverture et fermeture du fichier
Reste à savoir l’impact sur son fonctionnement
Tu peux toujours sur une copie faire un essai tu verras bien ce qu’il advient de celui-ci
Sinon transmets le moi je te dirai ce qu’il en est

Voici le fichier avec le formulaire pour le code accès à l’ouverture.

Le code est util1

Explications codes ThisWorkbook.xlsm (21,3 Ko)

Je regarde et te reponds demain mon PC fais dodo à cette heure
Un peu de patience donc

Pas de soucis FFO, Bonne nuit . A+

Cela sert aux Window API-fonctions, je suppose que vous vouliez un userform plus développé.
Donc si vous ne savez plus à quoi cela servait, supprimez-les.
Mais c’est certainement trop difficile pour vos yeux.

je ne comprends pas ce que vous dites ?

Bonjours

Ton fichier n’a qu’une partie des macros mentionnées dans tes lignes de code

notamment il n’y a que celle qui appelle le formulaire :

CODE_ACCES_LOGICIEL.Show

celles ci appelées par ta procédure sont absentes :

Call Cacher
Call titre

Pour une analyse optimum il me faut l’intégralité du contexte dans lequel celles-ci fonctionnent

Pour la macro qui ouvre le formulaire une saisie de code d’accès est à réaliser au risque si celui-ci est erroné de ne pas obtenir l’ouverture de l’onglet unique de ce fichier « ACCUEIL LOGICIEL » jusqu’à la fermeture du fichier si le formulaire est par sa croix fermé sans saisie correcte de ce code

A ce niveau aucun impact concernant les lignes de codes qui te préoccupent

Reste à connaitre le contenu des deux autres macros qui me font défaut sur ce fichier
Peut-être en elles la clef de ce mystère

En l’état donc ces lignes n’ont aucune utilité dans ce fichier mais je rajouterai que l’onglet unique de celui-ci n’est guère mieux loti en la matière surtout peut-être en l’absence des deux autres macro qui elles pourraient lui donner son importance

Voilà donc mon analyse de ton fichier transmis et tous les liens que j’ai pu établir concernant ces lignes de codes qui te préoccupent et son fonctionnement en l’état

A ta disposition pour des explications complémentaires

Bonjour,

voici le fichier avec les codes, qui j’espère vont aider à comprendre.

Explications codes ThisWorkbook.xlsm (28,8 Ko)

Merci pour ce retour très enrichissant concernant les lignes de codes qui te préoccupent
Celles-ci sont utilisées dans un modules pour une procédure dénommée « Public Sub OteCroix »

Elle possède ces lignes qui sont presque similaires :

hWnd = FindWindowA("Thunder" & IIf(Application.Version Like "8*", "X", "D") _
& "Frame", Caption)
SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And &HFFF7FFFF

et qui ont pour objet de supprimer la croix rouge du formulaire

Ainsi à l’ouverture du fichier le formulaire « CODE_ACCES_LOGICIEL » s’ouvre invitant à saisir un code avec impossibilité de le refermer

Un verrou quand à l’utilisation du fichier avec obligation de montrer patte blanche

Pour ces mêmes lignes dans les procédures « Private Sub Workbook_Open() » et "Private Sub Workbook_BeforeClose(Cancel As Boolean)

elles doivent certainement contribuer à la présentation de celui-ci dans cet esprit

J’ai testé le fonctionnement en les supprimant sans constater de différence quant à l’état du formulaire et la conséquence qui en découle
Une sécurité je suppose dans son utilisation pour verrouiller ce dispositif

A toi de voir maintenant en fonction de ce que tu souhaites sur l’utilisation de l’ensemble afin d’opter sur la disposition la plus appropriée

A ta disposition pour en discourir

Merci pour ces explications.

Alors d’après toi je laisse tel que ? En tout cas rien est gênant ou en trop dans ces procédures ?

Souhaites tu filtrer les accès au fichier ?
Quel niveau de sécurité ?
Le maintien de ces lignes en depend

Oui, si tu es partant pour me mettre une sécurité de ce genre en place, je suis preneur.

Pour mon fichier il serait bien d’avoir :

Une liste des personnes ( liste qui peut être modifiée a tout moment ) qui peuvent se connecter avec un identifiant et un mdp respectif.

Et une personne de cette liste ayant accès au vba.

Merci d’avance à toi.

Si tu souhaites un mot de passe par nom et ce distinct il faut que chaque intervenant s’identifie dans le formulaire donc ajout d’une combobox avec l’ensemble des utilisateurs habilités
Choix de celui-ci sur la liste puis saisie du mot de passe en rapport
Je suppose donc que les lignes de code origine de nos échanges sont à maintenir
Merci de me confirmer

Je ne sais pas si toi c’est compliqué et si c’est vraiment faisable.

Mais ce serait bien de laisser tel qu’il est à l’ouverture, donc avec le UserForm qui s’affiche maintenant sauf ;

comme tu dis avec un combobox qui contient la liste des personnes.
et en dessous un textbox pour saisir son mot de passe.

Ma proposition ci-jointe
A l’ouverture du fichier sélectionnes dans la liste un nom (A B C ou D)
les mots de passe intégrés tout en minuscule (titi1 titi2 titi3 ou titi4)

Pour A saisir titi1
etc…

l’onglet « ACCUEIL LOGICIEL » s’ouvre

En cliquant sur la touche « BOUTON4 ACCES ADMINISTRATEUR » l’onglet s’affiche intégralement
J’ai ajouté un onglet « Liste » colonne « A » les noms colonne « B » les mots de passe pour chacun

A toi de les mettre à jour et surtout de les archiver pour ne pas les oublier car nécessaire à l’ouverture du fichier

Reste à savoir si cette onglet qui porte les noms avec mot de passe pour chacun doit-il être protégé des regards indiscrets (à masquer quel degré partiel ou total) avec la méthode à prévoir pour l’alimenter

Testes et dis moi

Explications codes ThisWorkbook (1).xlsm (31,4 Ko)

la sécurité d’Excel ne vaut rien, après 30 sec, j’avais dépassé l’userform et j’avais trouvé ces 4 MDPs. Donc, il ne faut pas éxagérer.
C’est assez ambétant qu’on n’a pas un « exit » dans cet userform, si on ne connait pas le MDP, on ne sait pas fermer le fichier sauf avec force brute.