Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

VBA : consultation de constantes déclarées

5 réponses
Avatar
M41
Bonjour

2 applications Excel sont ouvertes A et B
contenant un module VBA chacunes DansA et DansB

DansB contient une déclaration de constante en début
de listing : MaConstB

Comment un Sub de DansA, MaRécupération,
peut il récupérer la valeur de MaConstB ?

MaConstB peut-elle être privée ?

Cordialement

M41

5 réponses

Avatar
MichDenis
Variables ou Contantes ont une porté limiter au classeur d'où
elles sont définis.

à partir d'un classeur, je ne crois pas que l'on puisse extraire la valeur
de celles-ci à partir d'un autre classeur.

Cependant, tu pourrais utiliser "Un Nom" Menu / insertion / définir / nom
à la place de ta constante. ...

'Pour créer un nom - évidemment cela dépend
'de ce que tu veux lui mettre
ThisWorkbook.Names.Add "Denis", "bozo", False
'False -> signifie que le nom n'est pas accessible
'par la fenêtre du menu de la feuille de calcul.

'pour extraire un nom dans le même fichier
x = [Denis]

'Pour lire la valeur du nom si il est dans un autre classeur
'si le classeur est ouvert
LeNom = Application.ExecuteExcel4Macro("'Classeur1.xls'!denis")

'si le classeeur est fermé
LeNom = Application.ExecuteExcel4Macro("'C:AtravailClasseur1.xls'!denis")




"M41" a écrit dans le message de news:
46fe8f11$0$5083$
Bonjour

2 applications Excel sont ouvertes A et B
contenant un module VBA chacunes DansA et DansB

DansB contient une déclaration de constante en début
de listing : MaConstB

Comment un Sub de DansA, MaRécupération,
peut il récupérer la valeur de MaConstB ?

MaConstB peut-elle être privée ?

Cordialement

M41
Avatar
M41
Merci
L'objectif est la recherche d'un code de compatibilité
sachant que B ne se nommera pas toujours B

Autre hypothèse
Est ce que le sub de A, MaRécupération contenu dans DansA
pourrait activer une fonction du module DansB

'DansB
Function Info () as Variant
Info = MaConstB
End Function

'DansA
Sub MaRécupération ( By Ref X as variant)
X = ...... Info
End Sub

Cordialement

M41





"MichDenis" a écrit dans le message de news:
uBu$
Variables ou Contantes ont une porté limiter au classeur d'où
elles sont définis.

à partir d'un classeur, je ne crois pas que l'on puisse extraire la valeur
de celles-ci à partir d'un autre classeur.

Cependant, tu pourrais utiliser "Un Nom" Menu / insertion / définir / nom
à la place de ta constante. ...

'Pour créer un nom - évidemment cela dépend
'de ce que tu veux lui mettre
ThisWorkbook.Names.Add "Denis", "bozo", False
'False -> signifie que le nom n'est pas accessible
'par la fenêtre du menu de la feuille de calcul.

'pour extraire un nom dans le même fichier
x = [Denis]

'Pour lire la valeur du nom si il est dans un autre classeur
'si le classeur est ouvert
LeNom = Application.ExecuteExcel4Macro("'Classeur1.xls'!denis")

'si le classeeur est fermé
LeNom =
Application.ExecuteExcel4Macro("'C:AtravailClasseur1.xls'!denis")




"M41" a écrit dans le message de news:
46fe8f11$0$5083$
Bonjour

2 applications Excel sont ouvertes A et B
contenant un module VBA chacunes DansA et DansB

DansB contient une déclaration de constante en début
de listing : MaConstB

Comment un Sub de DansA, MaRécupération,
peut il récupérer la valeur de MaConstB ?

MaConstB peut-elle être privée ?

Cordialement

M41





Avatar
MichDenis
Écoute, il n'y a pas de ligne de code qui extrait directement la valeur d'une constante
d'un autre classeur, mais, si besoin il y a, il est possible de construire une fonction
capable d'extraire ce que tu cherches ....Il existe différente façon de scanner du
code ....

Mais je n'ai plus de temps pour l'instant... peut être plus tard !


"M41" a écrit dans le message de news:
46feb7c9$0$27377$
Merci
L'objectif est la recherche d'un code de compatibilité
sachant que B ne se nommera pas toujours B

Autre hypothèse
Est ce que le sub de A, MaRécupération contenu dans DansA
pourrait activer une fonction du module DansB

'DansB
Function Info () as Variant
Info = MaConstB
End Function

'DansA
Sub MaRécupération ( By Ref X as variant)
X = ...... Info
End Sub

Cordialement

M41





"MichDenis" a écrit dans le message de news:
uBu$
Variables ou Contantes ont une porté limiter au classeur d'où
elles sont définis.

à partir d'un classeur, je ne crois pas que l'on puisse extraire la valeur
de celles-ci à partir d'un autre classeur.

Cependant, tu pourrais utiliser "Un Nom" Menu / insertion / définir / nom
à la place de ta constante. ...

'Pour créer un nom - évidemment cela dépend
'de ce que tu veux lui mettre
ThisWorkbook.Names.Add "Denis", "bozo", False
'False -> signifie que le nom n'est pas accessible
'par la fenêtre du menu de la feuille de calcul.

'pour extraire un nom dans le même fichier
x = [Denis]

'Pour lire la valeur du nom si il est dans un autre classeur
'si le classeur est ouvert
LeNom = Application.ExecuteExcel4Macro("'Classeur1.xls'!denis")

'si le classeeur est fermé
LeNom > Application.ExecuteExcel4Macro("'C:AtravailClasseur1.xls'!denis")




"M41" a écrit dans le message de news:
46fe8f11$0$5083$
Bonjour

2 applications Excel sont ouvertes A et B
contenant un module VBA chacunes DansA et DansB

DansB contient une déclaration de constante en début
de listing : MaConstB

Comment un Sub de DansA, MaRécupération,
peut il récupérer la valeur de MaConstB ?

MaConstB peut-elle être privée ?

Cordialement

M41





Avatar
tissot.emmanuel
Bonjour,

Dans un module du classeur B:

Private Const MaConstante As Long = 1

Public Function RetourneMaConstante() As Long
RetourneMaConstante = MaConstante
End Function

Dans un module du classeur A:

Sub Recuperation()
MsgBox Application.Run("ClasseurB.xls!RetourneMaConstante")
End Sub

Ne fonctionne que si ClasseurB est ouvert, si le nom du fichier comporte des
espaces il faut l'entourer de guillemets simples:

MsgBox Application.Run("'Classeur B.xls'!RetourneMaConstante")

Cordialement,

Manu/

"M41" a écrit dans le message de news:
46feb7c9$0$27377$
Merci
L'objectif est la recherche d'un code de compatibilité
sachant que B ne se nommera pas toujours B

Autre hypothèse
Est ce que le sub de A, MaRécupération contenu dans DansA
pourrait activer une fonction du module DansB

'DansB
Function Info () as Variant
Info = MaConstB
End Function

'DansA
Sub MaRécupération ( By Ref X as variant)
X = ...... Info
End Sub

Cordialement

M41





"MichDenis" a écrit dans le message de news:
uBu$
Variables ou Contantes ont une porté limiter au classeur d'où
elles sont définis.

à partir d'un classeur, je ne crois pas que l'on puisse extraire la
valeur
de celles-ci à partir d'un autre classeur.

Cependant, tu pourrais utiliser "Un Nom" Menu / insertion / définir /
nom
à la place de ta constante. ...

'Pour créer un nom - évidemment cela dépend
'de ce que tu veux lui mettre
ThisWorkbook.Names.Add "Denis", "bozo", False
'False -> signifie que le nom n'est pas accessible
'par la fenêtre du menu de la feuille de calcul.

'pour extraire un nom dans le même fichier
x = [Denis]

'Pour lire la valeur du nom si il est dans un autre classeur
'si le classeur est ouvert
LeNom = Application.ExecuteExcel4Macro("'Classeur1.xls'!denis")

'si le classeeur est fermé
LeNom =
Application.ExecuteExcel4Macro("'C:AtravailClasseur1.xls'!denis")




"M41" a écrit dans le message de news:
46fe8f11$0$5083$
Bonjour

2 applications Excel sont ouvertes A et B
contenant un module VBA chacunes DansA et DansB

DansB contient une déclaration de constante en début
de listing : MaConstB

Comment un Sub de DansA, MaRécupération,
peut il récupérer la valeur de MaConstB ?

MaConstB peut-elle être privée ?

Cordialement

M41









Avatar
MichDenis
Voici un exemple comment scanner le code de tous les modules
d'un classeur ouvert

http://cjoint.com/?jEpOjQvhBp

Évidemment, tu vas devoir adapter la procédure du module1 du
classeur pour obtenir ce que tu désires. Peut être que d'autres
peuvent affiner et mieux structurer ces procédures et fonctions.

Le code du module 1 est :
-------------------------------------------------------------
Sub test()

Dim Wk As Workbook, VBComps As Object, A As Integer
Dim NbModule As Integer, SearchWord As String, Ligne As Long
Dim MotComplet As Boolean, Mformat As Boolean

'********* Variables à définir *************
SearchWord = " test " 'Expression recherchée
MotComplet = True ' or false , Le mot Complet ?
Mformat = True ' of false , Avec respect de la casse (même format) ?
Set Wk = ThisWorkbook 'Choix du classeur OUVERT
'*********************************************

Set VBComps = Wk.VBProject.VBComponents
With VBComps
NbModule = .Count
For A = 1 To NbModule
If .Item(A).CodeModule.countOfLines > 0 Then
Ligne = 0
Do
Chaine = ""
Chaine = Chercher_En_VBA(.Item(A), SearchWord, _
Ligne, MotComplet, Mformat)
If Chaine <> "" Then
If MsgBox(Chaine & vbCrLf & vbCrLf & _
"Désirez-vous continuer la recherche ?", _
vbInformation + vbYesNo, "Recherche : " & _
SearchWord) = vbNo Then
Chaine = ""
Exit Sub
End If
End If
Loop Until Chaine = ""
End If
Next
End With

End Sub

Function Chercher_En_VBA(VbComp As Object, ByVal SearchWord As String, _
Ligne As Long, MotComplet As Boolean, Mformat As Boolean)

Dim NbLignes As Long, x As Long
Ligne = Ligne + 1
With VbComp.CodeModule
NbLignes = .countOfLines
If .Find(SearchWord, Ligne, Ligne + 1, NbLignes, 1280, MotComplet, _
Mformat) = True Then
For x = Ligne To NbLignes
Chaine = .Lines(x, 1)
GoTo Fin
Next
End If
End With
Exit Function
Fin:
Chercher_En_VBA = "L'expression recherchée """ & SearchWord & _
""" se retrouve " & vbCrLf & "dans le module """ & _
VbComp.Name & """ à la ligne """ & Ligne & """" & _
vbCrLf & "dans la chaine : " & vbCrLf & vbCrLf & Chaine

End Function
***********************************************************************



Le code du module2 est : Exemple comment rechercher et
remplacer une chaine dans tout le code d'un classeur.
-------------------------------------------------------------
Sub test()

Dim Wk As Workbook, VBComps As Object, A As Integer
Dim NbModule As Integer, SearchWord As String, Ligne As Long
Dim MotComplet As Boolean, Mformat As Boolean
Dim NewWord As String, NbRemplements As Long

'********* Variables à définir *************
SearchWord = " test " 'Expression recherchée
NewWord = " montest " 'Expression de remplacement
MotComplet = True ' or false , Le mot Complet ?
Mformat = True ' of false , Avec respect de la casse (même format) ?
Set Wk = ThisWorkbook 'Choix du classeur OUVERT
'*********************************************

Set VBComps = Wk.VBProject.VBComponents
With VBComps
NbModule = .Count
For A = 1 To NbModule
If .Item(A).CodeModule.countOfLines > 0 Then
Ligne = 0
Do
Chaine = ""
Chaine = Chercher_En_VBA(.Item(A), SearchWord, _
Ligne, MotComplet, Mformat _
, NewWord, NbRemplements)
Loop Until Chaine = ""
End If
Next
End With
MsgBox NbRemplements & " remplacements ont été effectuées"

End Sub

Function Chercher_En_VBA(VbComp As Object, ByVal SearchWord As String, _
Ligne As Long, MotComplet As Boolean, Mformat As Boolean, _
NewWord As String, NbRemplements As Long)

Dim NbLignes As Long, x As Long
Ligne = Ligne + 1
With VbComp.CodeModule
NbLignes = .countOfLines
If .Find(SearchWord, Ligne, Ligne + 1, NbLignes, 1280, MotComplet, _
Mformat) = True Then
For x = Ligne To NbLignes
Chaine = .Lines(x, 1)
.ReplaceLine Ligne, Application.Substitute( _
Chaine, SearchWord, NewWord)
NbRemplements = NbRemplements + 1
Next
End If
End With

End Function
-------------------------------------------------------------



"MichDenis" a écrit dans le message de news:

Écoute, il n'y a pas de ligne de code qui extrait directement la valeur d'une constante
d'un autre classeur, mais, si besoin il y a, il est possible de construire une fonction
capable d'extraire ce que tu cherches ....Il existe différente façon de scanner du
code ....

Mais je n'ai plus de temps pour l'instant... peut être plus tard !


"M41" a écrit dans le message de news:
46feb7c9$0$27377$
Merci
L'objectif est la recherche d'un code de compatibilité
sachant que B ne se nommera pas toujours B

Autre hypothèse
Est ce que le sub de A, MaRécupération contenu dans DansA
pourrait activer une fonction du module DansB

'DansB
Function Info () as Variant
Info = MaConstB
End Function

'DansA
Sub MaRécupération ( By Ref X as variant)
X = ...... Info
End Sub

Cordialement

M41





"MichDenis" a écrit dans le message de news:
uBu$
Variables ou Contantes ont une porté limiter au classeur d'où
elles sont définis.

à partir d'un classeur, je ne crois pas que l'on puisse extraire la valeur
de celles-ci à partir d'un autre classeur.

Cependant, tu pourrais utiliser "Un Nom" Menu / insertion / définir / nom
à la place de ta constante. ...

'Pour créer un nom - évidemment cela dépend
'de ce que tu veux lui mettre
ThisWorkbook.Names.Add "Denis", "bozo", False
'False -> signifie que le nom n'est pas accessible
'par la fenêtre du menu de la feuille de calcul.

'pour extraire un nom dans le même fichier
x = [Denis]

'Pour lire la valeur du nom si il est dans un autre classeur
'si le classeur est ouvert
LeNom = Application.ExecuteExcel4Macro("'Classeur1.xls'!denis")

'si le classeeur est fermé
LeNom > Application.ExecuteExcel4Macro("'C:AtravailClasseur1.xls'!denis")




"M41" a écrit dans le message de news:
46fe8f11$0$5083$
Bonjour

2 applications Excel sont ouvertes A et B
contenant un module VBA chacunes DansA et DansB

DansB contient une déclaration de constante en début
de listing : MaConstB

Comment un Sub de DansA, MaRécupération,
peut il récupérer la valeur de MaConstB ?

MaConstB peut-elle être privée ?

Cordialement

M41