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

Peut-on définir une variable par rapport à une autre

7 réponses
Avatar
Trirème
Bonjour,

Surtout par souci d'alléger l'écriture d'un code VBA, je cherche s'il y a moyen de définir
une variable par rapport à une valeur particulière d'une liste ou d'une table. La solution
passerait-elle par 'By Ref' ?

Par exemple, si en VBA j'ai une liste MaListe() de 11 éléments indicés de 0 à 10, je
m'arrange pour mettre en MaListe(0) la valeur minimum de MaListe().
Est-ce que je peux faire un truc du genre déclarer MonMini = MaListe(0) By Ref
pour que partout dans le code MonMini reflète le contenu de MaListe(0) et pourquoi pas
l'inverse : que si j'affecte une valeur à MonMini, cette fois MaListe(0) aurait également
cette valeur.

Cordialement,
--
Trirème

7 réponses

Avatar
JB
Bonjour,

Public MaListe
Sub Essai()
MaListe = Array(11, 12, 13, 6, 9)
MsgBox MonMini()
MaListe(0) = 99
MsgBox MonMini()
End Sub

Function MonMini()
MonMini = MaListe(0)
End Function

JB


On 8 juil, 16:33, Trirème wrote:
Bonjour,

Surtout par souci d'alléger l'écriture d'un code VBA, je cherche s'il y a moyen de définir
une variable par rapport à une valeur particulière d'une liste ou d'u ne table. La solution
passerait-elle par 'By Ref' ?

Par exemple, si en VBA j'ai une liste MaListe() de 11 éléments indic és de 0 à 10, je
m'arrange pour mettre en MaListe(0) la valeur minimum de MaListe().
Est-ce que je peux faire un truc du genre déclarer MonMini = MaListe( 0) By Ref
pour que partout dans le code MonMini reflète le contenu de MaListe(0) et pourquoi pas
l'inverse : que si j'affecte une valeur à MonMini, cette fois MaListe(0 ) aurait également
cette valeur.

Cordialement,
--
Trirème


Avatar
Trirème
Merci pour cette idée, je ne voyais pas ça comme ça, mais pourquoi pas.
Ce que j'envisageais s'apparenterais plus à un alias.
Ici j'imagine qu'il y a du temps d'exécution en plus ?

Cordialement,
Trirème

Bonjour,

Public MaListe
Sub Essai()
MaListe = Array(11, 12, 13, 6, 9)
MsgBox MonMini()
MaListe(0) = 99
MsgBox MonMini()
End Sub

Function MonMini()
MonMini = MaListe(0)
End Function

JB


On 8 juil, 16:33, Trirème wrote:
Bonjour,

Surtout par souci d'alléger l'écriture d'un code VBA, je cherche s'il y a moyen de définir
une variable par rapport à une valeur particulière d'une liste ou d'une table. La solution
passerait-elle par 'By Ref' ?

Par exemple, si en VBA j'ai une liste MaListe() de 11 éléments indicés de 0 à 10, je
m'arrange pour mettre en MaListe(0) la valeur minimum de MaListe().
Est-ce que je peux faire un truc du genre déclarer MonMini = MaListe(0) By Ref
pour que partout dans le code MonMini reflète le contenu de MaListe(0) et pourquoi pas
l'inverse : que si j'affecte une valeur à MonMini, cette fois MaListe(0) aurait également
cette valeur.

Cordialement,
--
Trirème






Avatar
JB
Temps exécution 0,34 s pour une boucle 1 à 1 000 000
Pour une variable simple, le temps devient 0,31 s

Public MaListe
Sub Essai()
MaListe = Array(11, 12, 13, 6, 9)
t = Timer()
For i = 1 To 1000000
x = MonMini()
Next i
MsgBox Timer() - t
End Sub

Function MonMini()
MonMini = MaListe(0)
End Function

JB

On 8 juil, 17:11, Trirème wrote:
Merci pour cette idée, je ne voyais pas ça comme ça, mais pourquoi pas.
Ce que j'envisageais s'apparenterais plus à un alias.
Ici j'imagine qu'il y a du temps d'exécution en plus ?

Cordialement,
Trirème




Bonjour,

Public MaListe
Sub Essai()
MaListe = Array(11, 12, 13, 6, 9)
MsgBox MonMini()
MaListe(0) = 99
MsgBox MonMini()
End Sub

Function MonMini()
MonMini = MaListe(0)
End Function

JB

On 8 juil, 16:33, Trirème wrote:
Bonjour,

Surtout par souci d'alléger l'écriture d'un code VBA, je cherche s 'il y a moyen de définir
une variable par rapport à une valeur particulière d'une liste ou d'une table. La solution
passerait-elle par 'By Ref' ?

Par exemple, si en VBA j'ai une liste MaListe() de 11 éléments ind icés de 0 à 10, je
m'arrange pour mettre en MaListe(0) la valeur minimum de MaListe().
Est-ce que je peux faire un truc du genre déclarer MonMini = MaLis te(0) By Ref
pour que partout dans le code MonMini reflète le contenu de MaListe( 0) et pourquoi pas
l'inverse : que si j'affecte une valeur à MonMini, cette fois MaList e(0) aurait également
cette valeur.

Cordialement,
--
Trirème- Masquer le texte des messages précédents -



- Afficher le texte des messages précédents -




Avatar
MichDenis
Il y a ceci : tout ceci dans un module standard :

L'avantage de cette façon de faire est que tu contrôle l'endroit
dans ton code ou la variable est renseigné...tu peux au besoin
testé sa valeur ou vouloir déclencher une ou des actions lorsque
cette dernière est modifiée....

P.S. Property Get() et Property Let() sont habituellement utilisés
dans un module de classe...mais rien n'empêche d'y avoir recours
dans un autre type de module si le besoin est là.


'Déclaration de la variable dans le haut d'un module standard
Public MaVar As String ' Adapte au besoin le type de la variable

Public Property Get MonMini() As Variant
V_Table = MaVar
End Property

Public Property Let MonMini(ByVal vNewValue As Variant)
MaVar = vNewValue
End Property


Sub test()
'Cette ligne de code pour attribuer une valeur à ta variable MaVar
MonMini = "Bonjour"
End Sub


Sub Test1()
'Cette ligne de code pour retrouver le contenu de la variable MaVar
MsgBox MonMini
'Ou
toto = MonMini
End Sub





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

Temps exécution 0,34 s pour une boucle 1 à 1 000 000
Pour une variable simple, le temps devient 0,31 s

Public MaListe
Sub Essai()
MaListe = Array(11, 12, 13, 6, 9)
t = Timer()
For i = 1 To 1000000
x = MonMini()
Next i
MsgBox Timer() - t
End Sub

Function MonMini()
MonMini = MaListe(0)
End Function

JB

On 8 juil, 17:11, Trirème wrote:
Merci pour cette idée, je ne voyais pas ça comme ça, mais pourquoi pas.
Ce que j'envisageais s'apparenterais plus à un alias.
Ici j'imagine qu'il y a du temps d'exécution en plus ?

Cordialement,
Trirème




Bonjour,

Public MaListe
Sub Essai()
MaListe = Array(11, 12, 13, 6, 9)
MsgBox MonMini()
MaListe(0) = 99
MsgBox MonMini()
End Sub

Function MonMini()
MonMini = MaListe(0)
End Function

JB

On 8 juil, 16:33, Trirème wrote:
Bonjour,

Surtout par souci d'alléger l'écriture d'un code VBA, je cherche s'il y a moyen de définir
une variable par rapport à une valeur particulière d'une liste ou d'une table. La solution
passerait-elle par 'By Ref' ?

Par exemple, si en VBA j'ai une liste MaListe() de 11 éléments indicés de 0 à 10, je
m'arrange pour mettre en MaListe(0) la valeur minimum de MaListe().
Est-ce que je peux faire un truc du genre déclarer MonMini = MaListe(0) By Ref
pour que partout dans le code MonMini reflète le contenu de MaListe(0) et pourquoi pas
l'inverse : que si j'affecte une valeur à MonMini, cette fois MaListe(0) aurait également
cette valeur.

Cordialement,
--
Trirème- Masquer le texte des messages précédents -



- Afficher le texte des messages précédents -




Avatar
Trirème
Ok, j'ai compris.
Il me semble que pour l'usage que j'en aurai - il y aurait en fait plusieurs variables
'alias' à déclarer - c'est plus lourd que ce que je pensais.

Pour le temps machine, c'est sûr que c'est négligeable.

Merci à vous deux.
Cordialement,
Trirème

Il y a ceci : tout ceci dans un module standard :

L'avantage de cette façon de faire est que tu contrôle l'endroit
dans ton code ou la variable est renseigné...tu peux au besoin
testé sa valeur ou vouloir déclencher une ou des actions lorsque
cette dernière est modifiée....

P.S. Property Get() et Property Let() sont habituellement utilisés
dans un module de classe...mais rien n'empêche d'y avoir recours
dans un autre type de module si le besoin est là.


'Déclaration de la variable dans le haut d'un module standard
Public MaVar As String ' Adapte au besoin le type de la variable

Public Property Get MonMini() As Variant
V_Table = MaVar
End Property

Public Property Let MonMini(ByVal vNewValue As Variant)
MaVar = vNewValue
End Property


Sub test()
'Cette ligne de code pour attribuer une valeur à ta variable MaVar
MonMini = "Bonjour"
End Sub


Sub Test1()
'Cette ligne de code pour retrouver le contenu de la variable MaVar
MsgBox MonMini
'Ou
toto = MonMini
End Sub





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

Temps exécution 0,34 s pour une boucle 1 à 1 000 000
Pour une variable simple, le temps devient 0,31 s

Public MaListe
Sub Essai()
MaListe = Array(11, 12, 13, 6, 9)
t = Timer()
For i = 1 To 1000000
x = MonMini()
Next i
MsgBox Timer() - t
End Sub

Function MonMini()
MonMini = MaListe(0)
End Function

JB

On 8 juil, 17:11, Trirème wrote:
Merci pour cette idée, je ne voyais pas ça comme ça, mais pourquoi pas.
Ce que j'envisageais s'apparenterais plus à un alias.
Ici j'imagine qu'il y a du temps d'exécution en plus ?

Cordialement,
Trirème




Bonjour,
Public MaListe
Sub Essai()
MaListe = Array(11, 12, 13, 6, 9)
MsgBox MonMini()
MaListe(0) = 99
MsgBox MonMini()
End Sub
Function MonMini()
MonMini = MaListe(0)
End Function
JB
On 8 juil, 16:33, Trirème wrote:
Bonjour,
Surtout par souci d'alléger l'écriture d'un code VBA, je cherche s'il y a moyen de définir
une variable par rapport à une valeur particulière d'une liste ou d'une table. La solution
passerait-elle par 'By Ref' ?
Par exemple, si en VBA j'ai une liste MaListe() de 11 éléments indicés de 0 à 10, je
m'arrange pour mettre en MaListe(0) la valeur minimum de MaListe().
Est-ce que je peux faire un truc du genre déclarer MonMini = MaListe(0) By Ref
pour que partout dans le code MonMini reflète le contenu de MaListe(0) et pourquoi pas
l'inverse : que si j'affecte une valeur à MonMini, cette fois MaListe(0) aurait également
cette valeur.
Cordialement,
--
Trirème- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -











Avatar
MichDenis
| Est-ce que je peux faire un truc du genre déclarer MonMini = MaListe(0) By Ref
| pour que partout dans le code MonMini reflète le contenu de MaListe(0)

Je ne suis pas sûr d'avoir compris ta demande...! et si tu donnais un exemple ?

Tu peux sans contredit passer ta valeur X à titre de paramètre à une autre procédure
sans aucun problème si c'est ce que tu recherches.Tu peux même avoir un tableau(array)
comme paramètre à une procédure... cela dépend de la finalité de l'exercice.



"Trirème" a écrit dans le message de news:

Ok, j'ai compris.
Il me semble que pour l'usage que j'en aurai - il y aurait en fait plusieurs variables
'alias' à déclarer - c'est plus lourd que ce que je pensais.

Pour le temps machine, c'est sûr que c'est négligeable.

Merci à vous deux.
Cordialement,
Trirème

Il y a ceci : tout ceci dans un module standard :

L'avantage de cette façon de faire est que tu contrôle l'endroit
dans ton code ou la variable est renseigné...tu peux au besoin
testé sa valeur ou vouloir déclencher une ou des actions lorsque
cette dernière est modifiée....

P.S. Property Get() et Property Let() sont habituellement utilisés
dans un module de classe...mais rien n'empêche d'y avoir recours
dans un autre type de module si le besoin est là.


'Déclaration de la variable dans le haut d'un module standard
Public MaVar As String ' Adapte au besoin le type de la variable

Public Property Get MonMini() As Variant
V_Table = MaVar
End Property

Public Property Let MonMini(ByVal vNewValue As Variant)
MaVar = vNewValue
End Property


Sub test()
'Cette ligne de code pour attribuer une valeur à ta variable MaVar
MonMini = "Bonjour"
End Sub


Sub Test1()
'Cette ligne de code pour retrouver le contenu de la variable MaVar
MsgBox MonMini
'Ou
toto = MonMini
End Sub





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

Temps exécution 0,34 s pour une boucle 1 à 1 000 000
Pour une variable simple, le temps devient 0,31 s

Public MaListe
Sub Essai()
MaListe = Array(11, 12, 13, 6, 9)
t = Timer()
For i = 1 To 1000000
x = MonMini()
Next i
MsgBox Timer() - t
End Sub

Function MonMini()
MonMini = MaListe(0)
End Function

JB

On 8 juil, 17:11, Trirème wrote:
Merci pour cette idée, je ne voyais pas ça comme ça, mais pourquoi pas.
Ce que j'envisageais s'apparenterais plus à un alias.
Ici j'imagine qu'il y a du temps d'exécution en plus ?

Cordialement,
Trirème




Bonjour,
Public MaListe
Sub Essai()
MaListe = Array(11, 12, 13, 6, 9)
MsgBox MonMini()
MaListe(0) = 99
MsgBox MonMini()
End Sub
Function MonMini()
MonMini = MaListe(0)
End Function
JB
On 8 juil, 16:33, Trirème wrote:
Bonjour,
Surtout par souci d'alléger l'écriture d'un code VBA, je cherche s'il y a moyen de définir
une variable par rapport à une valeur particulière d'une liste ou d'une table. La solution
passerait-elle par 'By Ref' ?
Par exemple, si en VBA j'ai une liste MaListe() de 11 éléments indicés de 0 à 10, je
m'arrange pour mettre en MaListe(0) la valeur minimum de MaListe().
Est-ce que je peux faire un truc du genre déclarer MonMini = MaListe(0) By Ref
pour que partout dans le code MonMini reflète le contenu de MaListe(0) et pourquoi pas
l'inverse : que si j'affecte une valeur à MonMini, cette fois MaListe(0) aurait également
cette valeur.
Cordialement,
--
Trirème- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -











Avatar
Trirème
| Est-ce que je peux faire un truc du genre déclarer MonMini = MaListe(0) By Ref
| pour que partout dans le code MonMini reflète le contenu de MaListe(0)

Je ne suis pas sûr d'avoir compris ta demande...! et si tu donnais un exemple ?
J'ai également écrit : "...par souci d'alléger l'écriture d'un code VBA..."

et plus loin je parlais d'alias.

Je cherche à perfectionner mon usage des tables en VBA.
Pour l'exercice, je tente de solutionner des grilles d'un jeu de réflexion (logigraphe :
http://fr.wikipedia.org/wiki/Picross ou encore
http://tonakai.aki.gs/picturelogic/play/index_e.php?PNum=1)

Le sujet n'a pas d'importance, mais au stade où j'en suis je me demandais s'il était
permis d'écrire plus simplement MaTable(i,j,k) en le remplaçant par Mini(k) en forçant
Excel à associer les déclarations.
C'était plus pour éviter de s'emmêler les pinceaux avec les indices. Il me semblait avoir
vu un langage qui le permettait (PL1 ?).
Genre Mini(k) = MaTable( , ,k)

Mais plus je réfléchis et plus je pense qu'il est préférable d'utiliser une vingtaine de
tables avec un nom précis plutôt qu'une seule table à 20 dimensions. Même s'il faut les
déclarer toutes et éventuellement les ReDimensionner.

Merci d'avoir consacré un peu de ton cerveau.
Bon dimanche
Trirème

Tu peux sans contredit passer ta valeur X à titre de paramètre à une autre procédure
sans aucun problème si c'est ce que tu recherches.Tu peux même avoir un tableau(array)
comme paramètre à une procédure... cela dépend de la finalité de l'exercice.



"Trirème" a écrit dans le message de news:

Ok, j'ai compris.
Il me semble que pour l'usage que j'en aurai - il y aurait en fait plusieurs variables
'alias' à déclarer - c'est plus lourd que ce que je pensais.

Pour le temps machine, c'est sûr que c'est négligeable.

Merci à vous deux.
Cordialement,
Trirème

Il y a ceci : tout ceci dans un module standard :

L'avantage de cette façon de faire est que tu contrôle l'endroit
dans ton code ou la variable est renseigné...tu peux au besoin
testé sa valeur ou vouloir déclencher une ou des actions lorsque
cette dernière est modifiée....

P.S. Property Get() et Property Let() sont habituellement utilisés
dans un module de classe...mais rien n'empêche d'y avoir recours
dans un autre type de module si le besoin est là.


'Déclaration de la variable dans le haut d'un module standard
Public MaVar As String ' Adapte au besoin le type de la variable

Public Property Get MonMini() As Variant
V_Table = MaVar
End Property

Public Property Let MonMini(ByVal vNewValue As Variant)
MaVar = vNewValue
End Property


Sub test()
'Cette ligne de code pour attribuer une valeur à ta variable MaVar
MonMini = "Bonjour"
End Sub


Sub Test1()
'Cette ligne de code pour retrouver le contenu de la variable MaVar
MsgBox MonMini
'Ou
toto = MonMini
End Sub





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

Temps exécution 0,34 s pour une boucle 1 à 1 000 000
Pour une variable simple, le temps devient 0,31 s

Public MaListe
Sub Essai()
MaListe = Array(11, 12, 13, 6, 9)
t = Timer()
For i = 1 To 1000000
x = MonMini()
Next i
MsgBox Timer() - t
End Sub

Function MonMini()
MonMini = MaListe(0)
End Function

JB

On 8 juil, 17:11, Trirème wrote:
Merci pour cette idée, je ne voyais pas ça comme ça, mais pourquoi pas.
Ce que j'envisageais s'apparenterais plus à un alias.
Ici j'imagine qu'il y a du temps d'exécution en plus ?

Cordialement,
Trirème




Bonjour,
Public MaListe
Sub Essai()
MaListe = Array(11, 12, 13, 6, 9)
MsgBox MonMini()
MaListe(0) = 99
MsgBox MonMini()
End Sub
Function MonMini()
MonMini = MaListe(0)
End Function
JB
On 8 juil, 16:33, Trirème wrote:
Bonjour,
Surtout par souci d'alléger l'écriture d'un code VBA, je cherche s'il y a moyen de définir
une variable par rapport à une valeur particulière d'une liste ou d'une table. La solution
passerait-elle par 'By Ref' ?
Par exemple, si en VBA j'ai une liste MaListe() de 11 éléments indicés de 0 à 10, je
m'arrange pour mettre en MaListe(0) la valeur minimum de MaListe().
Est-ce que je peux faire un truc du genre déclarer MonMini = MaListe(0) By Ref
pour que partout dans le code MonMini reflète le contenu de MaListe(0) et pourquoi pas
l'inverse : que si j'affecte une valeur à MonMini, cette fois MaListe(0) aurait également
cette valeur.
Cordialement,
--
Trirème- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -