Constante publique

Bonjour,

Dans mon projet, je declare la variable suivante (qui correspond au nom du classeur):

Public Const workbook_name As String = "ProjetZ04"

Je voudrais savoir si, en declarant cette variable avec ce nom, cette constante est utilisee dans tous les workbooks ouverts en meme temps?

Sur un meme PC vont tourner en meme temps 2 Userforms qui sont crees a partir de deux differents workbooks.

Ces 2 workbooks sont strictements identiques a l'exeption de leur nom.

J'ai donc en meme temps dans un classeur:

Public Const workbook_name As String = "ProjetZ04"

et dans un autre classeur:

Public Const workbook_name As String = "ProjetZ05"

Est ce que excel considere que publique est publique pour tous les classeurs ouverts ou alors publique pour le classeur dans lequel se trouve l'userform qui utilise cette fonction?...

Je pense ne pas avoir ete clair, si vous voulez des precisions, vous pouvez me poser des questions.

Merci

Bonjour,

Ton code VBA est associé à un classeur et est stocké dans un projet VBA. La variable n'est connue que dans ce projet.

Bien que tu aies plusieurs classeurs ouverts, il n'y a qu'un seul projet actif. C'est donc la variable de ce projet qui est prise en compte.

A+

OK,

Parfait, j'avais peur que la validation de mes userforms puisse remplir les donnes dans une mauvaise base de donnee.

Juste pour etre sur. Le fait que j'ai trouve un code me permettant d'ouvrir 2 Userforms en meme temps de 2 classeurs differents n'implique pas que j'ai 2 projets actifs en meme temps?

Merci

Le fait que j'ai trouve un code me permettant d'ouvrir 2 Userforms en meme temps de 2 classeurs differents n'implique pas que j'ai 2 projets actifs en meme temps?

Je suis curieux de voir un code qui permet d'ouvrir 2 Userforms en même temps de 2 projets différents.

Je vais apprendre quelque chose.

A+

'Module qui permet de rajoute un bouton "reduire" a un userform

' Variables globales au module
Private sheet As Worksheet

Public Declare Function GetWindowLongA Lib "User32" _
    (ByVal hWnd As Long, ByVal nIndex As Long) As Long

Public Declare Function SetWindowLongA Lib "User32" _
    (ByVal hWnd As Long, ByVal nIndex As Long, _
    ByVal dwNewLong As Long) As Long

Public Declare Function FindWindowA Lib "User32" _
    (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Et dans les userforms dans l'initialize on ecrit:

Dim hWnd As Long

    'Récupération window de l'userform et ajoute 'Réduire/Agrandir'
    hWnd = FindWindowA(vbNullString, Me.Caption)
    SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) Or &H20000
    'Ici pour éliminer la fermeture
    'SetWindowLongA hWnd, -16, GetWindowLongA(hWnd, -16) And &HFFF7FFFF

Enfin, a vrai dire j'ai code mes userforms il y a un certain temps et vu que j'ai trouve ces codes sur internet je ne sais plus comment ils fonctionnent.

J'ai aussi ces macros dans un autre module. (Je ne sais pas laquelle sert a obtenir le caption)

'Permet de cacher la barre de titre des usrforms
'dans l'userform initialyse, il faut ecrire la ligne suivante pour masquer la barre de titre
'AfficheTitleBarre Me.Caption, False

Public Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
End Type

Const GWL_STYLE = (-16)
Const WS_CAPTION = &HC00000
Const SWP_FRAMECHANGED = &H20

Public Declare Function FindWindowA Lib "User32" _
        (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Public Declare Function GetWindowRect Lib "User32" _
        (ByVal hWnd As Long, lpRect As RECT) As Long

Public Declare Function GetWindowLong Lib "User32" Alias _
        "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long

Public Declare Function SetWindowLong Lib "User32" Alias _
        "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, _
        ByVal dwNewLong As Long) As Long

Public Declare Function SetWindowPos Lib "User32" _
        (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, _
        ByVal y As Long, ByVal cx As Long, ByVal cy As Long, _
        ByVal wFlags As Long) As Long

Sub AfficheTitleBarre(stCaption As String, pbVisible As Boolean)
Dim vrWin As RECT
Dim style As Long
Dim lHwnd As Long
'- Recherche du handle de la fenêtre par son Caption
    lHwnd = FindWindowA(vbNullString, stCaption)
    If lHwnd = 0 Then
        MsgBox "Handle de " & stCaption & " Introuvable", vbCritical
        Exit Sub
    End If

    GetWindowRect lHwnd, vrWin
    style = GetWindowLong(lHwnd, GWL_STYLE)
    If pbVisible Then
        SetWindowLong lHwnd, GWL_STYLE, style Or WS_CAPTION
    Else
        SetWindowLong lHwnd, GWL_STYLE, style And Not WS_CAPTION
    End If
    SetWindowPos lHwnd, 0, vrWin.Left, vrWin.Top, vrWin.Right - vrWin.Left, _
            vrWin.Bottom - vrWin.Top, SWP_FRAMECHANGED
End Sub

en piece jointe je mets le fichier bien epure si ca peut aider a repondre a ma question

Désolé mais sans être un spécialiste des fonctions API, je ne vois rien qui correspond à un code permettant d'ouvrir 2 Userforms en même temps de 2 classeurs différents.

A+

Si on enregistre ce fichier sous 2 noms differents et qu'on ouvre les 2 copies de ce fichier, on peut ouvrir les userforms depuis les 2 fichiers differents en meme temps...

Je ne comprends absolument pas comment mon code marche vu que j'avais fait un vulgaire copier coller d'un code trouve sur internet mais ce code permet de pouvoir deplacer les userforms dans la fenetre, de les reduire etc...

Lorsque tu "bascules" d’un USF vers l’autre, tu changes également de projet.

La constante workbook_name prise en compte est alors celle du projet actif.

A+

Rechercher des sujets similaires à "constante publique"