Dans une proc=C3=A9dure, je fais des calculs de cumul sur ces variables :
Select Case cellule.Interior.Color
Case Range("Liste_Code_Couleurs")(1)
Meca_ARS =3D Meca_ARS + 0.5
Case Range("Liste_Code_Couleurs")(2)
Meca_PLG =3D Meca_PLG + 0.5
etc....
et =C3=A0 la fin je souhaite =C3=A9crire la valeur de chaque variable dans =
des cellules. Pour faire court, j'ai tent=C3=A9 :
For Z =3D 1 To Application.WorksheetFunction.CountA(Range("Liste_Variables"=
))
ActiveCell.Offset(0, Z) =3D Range("Liste_Variables")(Z)
Next
mais dans ma cellule, je ne retrouve pas la valeur mais le nom de la variab=
le.
Comment r=C3=A9cup=C3=A9rer la valeur de mes variables ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Michel__D
Bonjour, Le 01/10/2019 à 17:23, ThierryP a écrit :
Bonjour le forum, Sur une feuille, j'ai une liste de noms de variables comme ceci : Meca_ARS Meca_PLG RCSI Elec_ARS Elec_PLG Meca_PLA Elec_PLA Meca_CNG Elec_CNG Meca_BIO Elec_BIO Dans une procédure, je fais des calculs de cumul sur ces variables : Select Case cellule.Interior.Color Case Range("Liste_Code_Couleurs")(1) Meca_ARS = Meca_ARS + 0.5 Case Range("Liste_Code_Couleurs")(2) Meca_PLG = Meca_PLG + 0.5 etc.... et à la fin je souhaite écrire la valeur de chaque variable dans des cellules. Pour faire court, j'ai tenté : For Z = 1 To Application.WorksheetFunction.CountA(Range("Liste_Variables")) ActiveCell.Offset(0, Z) = Range("Liste_Variables")(Z) Next mais dans ma cellule, je ne retrouve pas la valeur mais le nom de la variable. Comment récupérer la valeur de mes variables ?
Regarde la méthode Evaluate dans l'aide d'Excel.
Bonjour,
Le 01/10/2019 à 17:23, ThierryP a écrit :
Bonjour le forum,
Sur une feuille, j'ai une liste de noms de variables comme ceci :
Dans une procédure, je fais des calculs de cumul sur ces variables :
Select Case cellule.Interior.Color
Case Range("Liste_Code_Couleurs")(1)
Meca_ARS = Meca_ARS + 0.5
Case Range("Liste_Code_Couleurs")(2)
Meca_PLG = Meca_PLG + 0.5
etc....
et à la fin je souhaite écrire la valeur de chaque variable dans des cellules. Pour faire court, j'ai tenté :
For Z = 1 To Application.WorksheetFunction.CountA(Range("Liste_Variables"))
ActiveCell.Offset(0, Z) = Range("Liste_Variables")(Z)
Next
mais dans ma cellule, je ne retrouve pas la valeur mais le nom de la variable.
Bonjour, Le 01/10/2019 à 17:23, ThierryP a écrit :
Bonjour le forum, Sur une feuille, j'ai une liste de noms de variables comme ceci : Meca_ARS Meca_PLG RCSI Elec_ARS Elec_PLG Meca_PLA Elec_PLA Meca_CNG Elec_CNG Meca_BIO Elec_BIO Dans une procédure, je fais des calculs de cumul sur ces variables : Select Case cellule.Interior.Color Case Range("Liste_Code_Couleurs")(1) Meca_ARS = Meca_ARS + 0.5 Case Range("Liste_Code_Couleurs")(2) Meca_PLG = Meca_PLG + 0.5 etc.... et à la fin je souhaite écrire la valeur de chaque variable dans des cellules. Pour faire court, j'ai tenté : For Z = 1 To Application.WorksheetFunction.CountA(Range("Liste_Variables")) ActiveCell.Offset(0, Z) = Range("Liste_Variables")(Z) Next mais dans ma cellule, je ne retrouve pas la valeur mais le nom de la variable. Comment récupérer la valeur de mes variables ?
Regarde la méthode Evaluate dans l'aide d'Excel.
MichD
Bonjour, Je n'ai pas compris ta question! Lorsque l'on parle de "variables", ces dernières sont définies (déclarées) dans un module de l'éditeur de code (VBA). Dans une feuille de calcul, une liste de noms dans une plage de cellules fait plutôt référence à des plages nommées. Chacun de ces "NOMS" doit représenter une valeur numérique quelconque. Suppose une liste de noms définis au niveau du classeur dans la plage A1:A10 de la feuil1 ayant toute des valeurs numériques déjà attribuées. Si l'exercice consiste à majorer de .05 chacune des valeurs de ces noms: Dans un module standard, on peut écrire : '------------------------ Sub test() Dim Arr(), Elt As Variant With Feuil1 Arr = .Range("A1:A10") End With For Each Elt In Arr Names.Add Elt, Evaluate(Elt) + 0.5 Next End Sub '------------------------ MichD Le 01/10/19 à 11:23, ThierryP a écrit :
Bonjour le forum, Sur une feuille, j'ai une liste de noms de variables comme ceci : Meca_ARS Meca_PLG RCSI Elec_ARS Elec_PLG Meca_PLA Elec_PLA Meca_CNG Elec_CNG Meca_BIO Elec_BIO Dans une procédure, je fais des calculs de cumul sur ces variables : Select Case cellule.Interior.Color Case Range("Liste_Code_Couleurs")(1) Meca_ARS = Meca_ARS + 0.5 Case Range("Liste_Code_Couleurs")(2) Meca_PLG = Meca_PLG + 0.5 etc.... et à la fin je souhaite écrire la valeur de chaque variable dans des cellules. Pour faire court, j'ai tenté : For Z = 1 To Application.WorksheetFunction.CountA(Range("Liste_Variables")) ActiveCell.Offset(0, Z) = Range("Liste_Variables")(Z) Next mais dans ma cellule, je ne retrouve pas la valeur mais le nom de la variable. Comment récupérer la valeur de mes variables ? Merci d'avance, ThierryP
Bonjour,
Je n'ai pas compris ta question!
Lorsque l'on parle de "variables", ces dernières sont définies
(déclarées) dans un module de l'éditeur de code (VBA). Dans une feuille
de calcul, une liste de noms dans une plage de cellules fait plutôt
référence à des plages nommées. Chacun de ces "NOMS" doit représenter
une valeur numérique quelconque.
Suppose une liste de noms définis au niveau du classeur dans la plage
A1:A10 de la feuil1 ayant toute des valeurs numériques déjà attribuées.
Si l'exercice consiste à majorer de .05 chacune des valeurs de ces noms:
Dans un module standard, on peut écrire :
'------------------------
Sub test()
Dim Arr(), Elt As Variant
With Feuil1
Arr = .Range("A1:A10")
End With
For Each Elt In Arr
Names.Add Elt, Evaluate(Elt) + 0.5
Next
End Sub
'------------------------
MichD
Le 01/10/19 à 11:23, ThierryP a écrit :
Bonjour le forum,
Sur une feuille, j'ai une liste de noms de variables comme ceci :
Dans une procédure, je fais des calculs de cumul sur ces variables :
Select Case cellule.Interior.Color
Case Range("Liste_Code_Couleurs")(1)
Meca_ARS = Meca_ARS + 0.5
Case Range("Liste_Code_Couleurs")(2)
Meca_PLG = Meca_PLG + 0.5
etc....
et à la fin je souhaite écrire la valeur de chaque variable dans des cellules. Pour faire court, j'ai tenté :
For Z = 1 To Application.WorksheetFunction.CountA(Range("Liste_Variables"))
ActiveCell.Offset(0, Z) = Range("Liste_Variables")(Z)
Next
mais dans ma cellule, je ne retrouve pas la valeur mais le nom de la variable.
Bonjour, Je n'ai pas compris ta question! Lorsque l'on parle de "variables", ces dernières sont définies (déclarées) dans un module de l'éditeur de code (VBA). Dans une feuille de calcul, une liste de noms dans une plage de cellules fait plutôt référence à des plages nommées. Chacun de ces "NOMS" doit représenter une valeur numérique quelconque. Suppose une liste de noms définis au niveau du classeur dans la plage A1:A10 de la feuil1 ayant toute des valeurs numériques déjà attribuées. Si l'exercice consiste à majorer de .05 chacune des valeurs de ces noms: Dans un module standard, on peut écrire : '------------------------ Sub test() Dim Arr(), Elt As Variant With Feuil1 Arr = .Range("A1:A10") End With For Each Elt In Arr Names.Add Elt, Evaluate(Elt) + 0.5 Next End Sub '------------------------ MichD Le 01/10/19 à 11:23, ThierryP a écrit :
Bonjour le forum, Sur une feuille, j'ai une liste de noms de variables comme ceci : Meca_ARS Meca_PLG RCSI Elec_ARS Elec_PLG Meca_PLA Elec_PLA Meca_CNG Elec_CNG Meca_BIO Elec_BIO Dans une procédure, je fais des calculs de cumul sur ces variables : Select Case cellule.Interior.Color Case Range("Liste_Code_Couleurs")(1) Meca_ARS = Meca_ARS + 0.5 Case Range("Liste_Code_Couleurs")(2) Meca_PLG = Meca_PLG + 0.5 etc.... et à la fin je souhaite écrire la valeur de chaque variable dans des cellules. Pour faire court, j'ai tenté : For Z = 1 To Application.WorksheetFunction.CountA(Range("Liste_Variables")) ActiveCell.Offset(0, Z) = Range("Liste_Variables")(Z) Next mais dans ma cellule, je ne retrouve pas la valeur mais le nom de la variable. Comment récupérer la valeur de mes variables ? Merci d'avance, ThierryP
Bonjour Denis, En fait, je voudrais faire quelque chose qui ressemble à "INDIRECT" : Dans un feuille j'ai créé une liste de procédures avec un co de couleur et une variable associés. Plutôt que d'écrire : ActiveCell.Offset(0, 1) = Variable1 ActiveCell.Offset(0, 2) = Variable2 etc... je souhaite boucler sur ma liste de variables (c'est une plage nommée) , ce qui me permet d'ajouter ou supprimer des variables sans avoir à r éécrire ou supprimer des lignes de code. J'espère que c'est plus clair ainsi !!! ThierryP Le mardi 1 octobre 2019 21:29:38 UTC+2, MichD a écrit :
Bonjour, Je n'ai pas compris ta question!
Bonjour Denis,
En fait, je voudrais faire quelque chose qui ressemble à "INDIRECT" :
Dans un feuille j'ai créé une liste de procédures avec un co de couleur et une variable associés.
Plutôt que d'écrire :
ActiveCell.Offset(0, 1) = Variable1
ActiveCell.Offset(0, 2) = Variable2 etc...
je souhaite boucler sur ma liste de variables (c'est une plage nommée) , ce qui me permet d'ajouter ou supprimer des variables sans avoir à r éécrire ou supprimer des lignes de code.
J'espère que c'est plus clair ainsi !!!
ThierryP
Le mardi 1 octobre 2019 21:29:38 UTC+2, MichD a écrit :
Bonjour Denis, En fait, je voudrais faire quelque chose qui ressemble à "INDIRECT" : Dans un feuille j'ai créé une liste de procédures avec un co de couleur et une variable associés. Plutôt que d'écrire : ActiveCell.Offset(0, 1) = Variable1 ActiveCell.Offset(0, 2) = Variable2 etc... je souhaite boucler sur ma liste de variables (c'est une plage nommée) , ce qui me permet d'ajouter ou supprimer des variables sans avoir à r éécrire ou supprimer des lignes de code. J'espère que c'est plus clair ainsi !!! ThierryP Le mardi 1 octobre 2019 21:29:38 UTC+2, MichD a écrit :
Bonjour, Je n'ai pas compris ta question!
MichD
En supposant que j'ai compris ta demande... Ajoute la bibliothèque suivante à ton projetVBA Barre des menus / outils / références / et coche cet item: "Microsoft Scripting Runtime" Cela va te permettre d'accéder à un nouvel objet "Dictionary". Un exemple sur la manière de manipuler cet objet. '------------------------------------- Sub test() Dim Dic As Scripting.Dictionary Dim C As Range Set Dic = CreateObject("Scripting.Dictionary") 'Ceci permet d'éviter les doublons s'il y en a dans la liste. 'un object dictionary ne peut pas avoir 2 Keys identiques, 'cela provoque une erreur. For Each C In Range("Couleurs") If Not Dic.Exists(C.Value) Then Dic.Add C.Value, C.Offset(0, 1).Value End If Next 'Pour boucler sur les Keys qui représentent 'Les noms des couleurs de la plage nommée For Each k In Dic.Keys x = k Next 'Pour boucler sur les Keys qui représentent 'Les noms des couleurs de la plage nommée For Each x In Dic.Items Valeur = x Next 'Ceci te donne la position de cette couleur "Montage_ARS" 'dans la collection des Keys B = Application.Match("Montage_ARS", Dic.Keys, 0) 'Pour trouver la valeur numérique associée à la couleur 'Le premier index d'un dictionnaire est 0 et non 1. aa = Dic.Keys(0) 'Nom de la couleur A = Dic.Items(0) 'Valeur de la couleur N = Dic.Count 'nombre d'entrées dans le dictionnaire 'Pour supprimer un item du dictionnaire Dic.Remove "Montage_ARS" End Sub '------------------------------------- MichD
En supposant que j'ai compris ta demande...
Ajoute la bibliothèque suivante à ton projetVBA
Barre des menus / outils / références / et coche cet item:
"Microsoft Scripting Runtime"
Cela va te permettre d'accéder à un nouvel objet "Dictionary".
Un exemple sur la manière de manipuler cet objet.
'-------------------------------------
Sub test()
Dim Dic As Scripting.Dictionary
Dim C As Range
Set Dic = CreateObject("Scripting.Dictionary")
'Ceci permet d'éviter les doublons s'il y en a dans la liste.
'un object dictionary ne peut pas avoir 2 Keys identiques,
'cela provoque une erreur.
For Each C In Range("Couleurs")
If Not Dic.Exists(C.Value) Then
Dic.Add C.Value, C.Offset(0, 1).Value
End If
Next
'Pour boucler sur les Keys qui représentent
'Les noms des couleurs de la plage nommée
For Each k In Dic.Keys
x = k
Next
'Pour boucler sur les Keys qui représentent
'Les noms des couleurs de la plage nommée
For Each x In Dic.Items
Valeur = x
Next
'Ceci te donne la position de cette couleur "Montage_ARS"
'dans la collection des Keys
B = Application.Match("Montage_ARS", Dic.Keys, 0)
'Pour trouver la valeur numérique associée à la couleur
'Le premier index d'un dictionnaire est 0 et non 1.
aa = Dic.Keys(0) 'Nom de la couleur
A = Dic.Items(0) 'Valeur de la couleur
N = Dic.Count 'nombre d'entrées dans le dictionnaire
'Pour supprimer un item du dictionnaire
Dic.Remove "Montage_ARS"
En supposant que j'ai compris ta demande... Ajoute la bibliothèque suivante à ton projetVBA Barre des menus / outils / références / et coche cet item: "Microsoft Scripting Runtime" Cela va te permettre d'accéder à un nouvel objet "Dictionary". Un exemple sur la manière de manipuler cet objet. '------------------------------------- Sub test() Dim Dic As Scripting.Dictionary Dim C As Range Set Dic = CreateObject("Scripting.Dictionary") 'Ceci permet d'éviter les doublons s'il y en a dans la liste. 'un object dictionary ne peut pas avoir 2 Keys identiques, 'cela provoque une erreur. For Each C In Range("Couleurs") If Not Dic.Exists(C.Value) Then Dic.Add C.Value, C.Offset(0, 1).Value End If Next 'Pour boucler sur les Keys qui représentent 'Les noms des couleurs de la plage nommée For Each k In Dic.Keys x = k Next 'Pour boucler sur les Keys qui représentent 'Les noms des couleurs de la plage nommée For Each x In Dic.Items Valeur = x Next 'Ceci te donne la position de cette couleur "Montage_ARS" 'dans la collection des Keys B = Application.Match("Montage_ARS", Dic.Keys, 0) 'Pour trouver la valeur numérique associée à la couleur 'Le premier index d'un dictionnaire est 0 et non 1. aa = Dic.Keys(0) 'Nom de la couleur A = Dic.Items(0) 'Valeur de la couleur N = Dic.Count 'nombre d'entrées dans le dictionnaire 'Pour supprimer un item du dictionnaire Dic.Remove "Montage_ARS" End Sub '------------------------------------- MichD
MichD
Même exemple + commentaire plus approprié '----------------------------------------------------- Sub test() Dim Dic As Scripting.Dictionary Dim C As Range Set Dic = CreateObject("Scripting.Dictionary") 'Remplir le dictionary des noms des couleurs 'et de la valeur numérique de ces couleurs 'Dic.Add Key, Item 'Dans un dictionary, on ne peut pas avoir '2 keys identiques => cela génère une erreur. For Each C In Range("Couleurs") If Not Dic.Exists(C.Value) Then Dic.Add C.Value, C.Offset(0, 1).Value End If Next 'Le premier index d'un dictionnaire est 0 et non 1. aa = Dic.Keys(0) 'Nom de la couleur A = Dic.Items(0) 'Valeur de la couleur N = Dic.Count 'nombre d'entrées dans le dictionnaire 'Pour boucler sur les Keys qui représentent 'Les noms des couleurs de la plage nommée For Each k In Dic.Keys x = k Next 'Pour boucler sur les valeurs numériques des couleurs For Each x In Dic.Items Valeur = x Next 'Ceci te donne la position de cette couleur "Montage_ARS" 'dans la collection des Keys B = Application.Match("Montage_ARS", Dic.Keys, 0) 'Pour trouver la valeur numérique associée à la couleur B BB = Dic.Items(B) 'Pour supprimer un item du dictionnaire Dic.Remove "Montage_ARS" End Sub '----------------------------------------------------- MichD
Même exemple + commentaire plus approprié
'-----------------------------------------------------
Sub test()
Dim Dic As Scripting.Dictionary
Dim C As Range
Set Dic = CreateObject("Scripting.Dictionary")
'Remplir le dictionary des noms des couleurs
'et de la valeur numérique de ces couleurs
'Dic.Add Key, Item
'Dans un dictionary, on ne peut pas avoir
'2 keys identiques => cela génère une erreur.
For Each C In Range("Couleurs")
If Not Dic.Exists(C.Value) Then
Dic.Add C.Value, C.Offset(0, 1).Value
End If
Next
'Le premier index d'un dictionnaire est 0 et non 1.
aa = Dic.Keys(0) 'Nom de la couleur
A = Dic.Items(0) 'Valeur de la couleur
N = Dic.Count 'nombre d'entrées dans le dictionnaire
'Pour boucler sur les Keys qui représentent
'Les noms des couleurs de la plage nommée
For Each k In Dic.Keys
x = k
Next
'Pour boucler sur les valeurs numériques des couleurs
For Each x In Dic.Items
Valeur = x
Next
'Ceci te donne la position de cette couleur "Montage_ARS"
'dans la collection des Keys
B = Application.Match("Montage_ARS", Dic.Keys, 0)
'Pour trouver la valeur numérique associée à la couleur B
BB = Dic.Items(B)
'Pour supprimer un item du dictionnaire
Dic.Remove "Montage_ARS"
End Sub
'-----------------------------------------------------
Même exemple + commentaire plus approprié '----------------------------------------------------- Sub test() Dim Dic As Scripting.Dictionary Dim C As Range Set Dic = CreateObject("Scripting.Dictionary") 'Remplir le dictionary des noms des couleurs 'et de la valeur numérique de ces couleurs 'Dic.Add Key, Item 'Dans un dictionary, on ne peut pas avoir '2 keys identiques => cela génère une erreur. For Each C In Range("Couleurs") If Not Dic.Exists(C.Value) Then Dic.Add C.Value, C.Offset(0, 1).Value End If Next 'Le premier index d'un dictionnaire est 0 et non 1. aa = Dic.Keys(0) 'Nom de la couleur A = Dic.Items(0) 'Valeur de la couleur N = Dic.Count 'nombre d'entrées dans le dictionnaire 'Pour boucler sur les Keys qui représentent 'Les noms des couleurs de la plage nommée For Each k In Dic.Keys x = k Next 'Pour boucler sur les valeurs numériques des couleurs For Each x In Dic.Items Valeur = x Next 'Ceci te donne la position de cette couleur "Montage_ARS" 'dans la collection des Keys B = Application.Match("Montage_ARS", Dic.Keys, 0) 'Pour trouver la valeur numérique associée à la couleur B BB = Dic.Items(B) 'Pour supprimer un item du dictionnaire Dic.Remove "Montage_ARS" End Sub '----------------------------------------------------- MichD
ThierryP
Bonsoir Denis, Merci pour ton exemple et les explications détaillées !!! Pour l'instant, je m'en suis sorti en créant un tableau pour les diff érentes activités et le script est bien plus simple !!! J'alimente mes variables : For Each cellule In Sheets(Mois).Range("B" & I & ":BK" & I) For K = 1 To UBound(Activites) If cellule.Interior.Color = Range("Liste_Code_Couleurs")(K) T hen Activites(K) = Activites(K) + 0.5 Next et ensuite je remplis mes cellules : For Z = 1 To Application.WorksheetFunction.CountA(Range("Liste_Variab les")) ActiveCell.Offset(0, Z) = Activites(Z) Next J'ai pu éliminer pas mal de lignes et surtout automatiser en partie en cas de modification de variables (ajout, suppression etc...) Merci pour le coup de main, comme d'habitude ! ThierryP
Bonsoir Denis,
Merci pour ton exemple et les explications détaillées !!!
Pour l'instant, je m'en suis sorti en créant un tableau pour les diff érentes activités et le script est bien plus simple !!!
J'alimente mes variables :
For Each cellule In Sheets(Mois).Range("B" & I & ":BK" & I)
For K = 1 To UBound(Activites)
If cellule.Interior.Color = Range("Liste_Code_Couleurs")(K) T hen Activites(K) = Activites(K) + 0.5
Next
et ensuite je remplis mes cellules :
For Z = 1 To Application.WorksheetFunction.CountA(Range("Liste_Variab les"))
ActiveCell.Offset(0, Z) = Activites(Z)
Next
J'ai pu éliminer pas mal de lignes et surtout automatiser en partie en cas de modification de variables (ajout, suppression etc...)
Bonsoir Denis, Merci pour ton exemple et les explications détaillées !!! Pour l'instant, je m'en suis sorti en créant un tableau pour les diff érentes activités et le script est bien plus simple !!! J'alimente mes variables : For Each cellule In Sheets(Mois).Range("B" & I & ":BK" & I) For K = 1 To UBound(Activites) If cellule.Interior.Color = Range("Liste_Code_Couleurs")(K) T hen Activites(K) = Activites(K) + 0.5 Next et ensuite je remplis mes cellules : For Z = 1 To Application.WorksheetFunction.CountA(Range("Liste_Variab les")) ActiveCell.Offset(0, Z) = Activites(Z) Next J'ai pu éliminer pas mal de lignes et surtout automatiser en partie en cas de modification de variables (ajout, suppression etc...) Merci pour le coup de main, comme d'habitude ! ThierryP