Bonjour à vous.
Je rencontre actuellement un problème avec un code sous VBA.
Je m'explique : J'ai besoin pour l'école de créer un fichier excel "automatisé" où de nombreuses cellules interagissent ensemble lors de la modification d'une valeur quelconque. Je dois, par exemple, modifier mes valeurs de "T°consigne" et "DKevap" afin que ces valeurs renvoient un résultat dans la cellule "puissance frigorifique" comme présenté ci-après :
Pour cela, je suis aidé du tableau ci-dessous ainsi que de la formule d'interpolation pour trouver les valeurs comprises entre ces nombres (valeurs constantes).
La formule est la suivante : x3 = x1+(y3-y1) * ((x2-x1) / (y2-y1)).
En codant, j'ai réussi pour les DKevap (compris en 5 et 15) à interpoler les valeurs avec les t° de consigne correspondantes (entre -5 et 0) et à faire intéragir mon tableau excel de façon dynamique. Cependant, lorsque j'essaie de faire correspondre les DKevap avec les t° de consigne comprises en 0 et 5, celui-ci n'est pas dynamique entre ces valeurs... C'est pourtant exactement les mêmes codes, ce ne sont que les emplacements des cellules qui changent. Je dois obligatoirement exécuter la macro pour avoir le résultat.
Voici le code :
'ai constaté que les macros non automatique était défini entre guillemets comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102 Private Sub Worksheet_Change(ByVal Target As Range) If Range("B9").Value <= 0 And Range("B9").Value >= -5 And Range("B10").Value = 5 Then 'Pour T°consigne entre (-5;0) et DKevap =5 If Target.Address = Range("B9").Address Then Run ("negatifCinq") 'Pour T°consigne entre (-5;0) et DKevap =5 quand on agit sur B9 (T°consigne) ElseIf Target.Address = Range("B10").Address Then Run ("negatifCinq") 'Pour T°consigne entre (-5;0) et DKevap =5 quand on agit sur B10 (DK Evap) End If ElseIf Range("B9").Value <= 0 And Range("B9").Value >= -5 And Range("B10").Value = 6 Then If Target.Address = Range("B9").Address Then Run ("negatifSix") 'Pour T°consigne entre (-5;0) et DKevap =6 quand on agit sur B9 (T°consigne) ElseIf Target.Address = Range("B10").Address Then Run ("negatifSix") 'Pour T°consigne entre (-5;0) et DKevap =6 quand on agit sur B10 (DK Evap) End If ElseIf Range("B9").Value <= 0 And Range("B9").Value >= -5 And Range("B10").Value = 7 Then If Target.Address = Range("B9").Address Then Run ("negatifSept") 'Pour T°consigne entre (-5;0) et DKevap =7 quand on agit sur B9 (T°consigne) ElseIf Target.Address = Range("B10").Address Then Run ("negatifSept") 'Pour T°consigne entre (-5;0) et DKevap =7 quand on agit sur B10 (DK Evap) End If ElseIf Range("B9").Value <= 0 And Range("B9").Value >= -5 And Range("B10").Value = 8 Then If Target.Address = Range("B9").Address Then Run ("negatifHuit") 'Pour T°consigne entre (-5;0) et DKevap =8 quand on agit sur B9 (T°consigne) ElseIf Target.Address = Range("B10").Address Then Run ("negatifHuit") 'Pour T°consigne entre (-5;0) et DKevap =8 quand on agit sur B10 (DK Evap) End If ElseIf Range("B9").Value <= 0 And Range("B9").Value >= -5 And Range("B10").Value = 9 Then If Target.Address = Range("B9").Address Then Run ("negatifNeuf") 'Pour T°consigne entre (-5;0) et DKevap =9 quand on agit sur B9 (T°consigne) ElseIf Target.Address = Range("B10").Address Then Run ("negatifNeuf") 'Pour T°consigne entre (-5;0) et DKevap =9 quand on agit sur B10 (DK Evap) End If ElseIf Range("B9").Value <= 0 And Range("B9").Value >= -5 And Range("B10").Value = 10 Then If Target.Address = Range("B9").Address Then Run ("negatifDix") 'Pour T°consigne entre (-5;0) et DKevap =10 quand on agit sur B9 (T°consigne) ElseIf Target.Address = Range("B10").Address Then Run ("negatifDix") 'Pour T°consigne entre (-5;0) et DKevap =10 quand on agit sur B10 (DK Evap) End If ElseIf Range("B9").Value <= 0 And Range("B9").Value >= -5 And Range("B10").Value = 11 Then If Target.Address = Range("B9").Address Then Run ("negatifOnze") 'Pour T°consigne entre (-5;0) et DKevap =11 quand on agit sur B9 (T°consigne) ElseIf Target.Address = Range("B10").Address Then Run ("negatifOnze") 'Pour T°consigne entre (-5;0) et DKevap =11 quand on agit sur B10 (DK Evap) End If ElseIf Range("B9").Value <= 0 And Range("B9").Value >= -5 And Range("B10").Value = 12 Then If Target.Address = Range("B9").Address Then Run ("negatifDouze") 'Pour T°consigne entre (-5;0) et DKevap =12 quand on agit sur B9 (T°consigne) ElseIf Target.Address = Range("B10").Address Then Run ("negatifDouze") 'Pour T°consigne entre (-5;0) et DKevap =12 quand on agit sur B10 (DK Evap) End If ElseIf Range("B9").Value <= 0 And Range("B9").Value >= -5 And Range("B10").Value = 13 Then If Target.Address = Range("B9").Address Then Run ("negatifTreize") 'Pour T°consigne entre (-5;0) et DKevap =13 quand on agit sur B9 (T°consigne) ElseIf Target.Address = Range("B10").Address Then Run ("negatifTreize") 'Pour T°consigne entre (-5;0) et DKevap =13 quand on agit sur B10 (DK Evap) End If ElseIf Range("B9").Value <= 0 And Range("B9").Value >= -5 And Range("B10").Value = 14 Then If Target.Address = Range("B9").Address Then Run ("negatifQuatorze") 'Pour T°consigne entre (-5;0) et DKevap =14 quand on agit sur B9 (T°consigne) ElseIf Target.Address = Range("B10").Address Then Run ("negatifQuatorze") 'Pour T°consigne entre (-5;0) et DKevap =14 quand on agit sur B10 (DK Evap) End If ElseIf Range("B9").Value <= 0 And Range("B9").Value >= -5 And Range("B10").Value = 15 Then If Target.Address = Range("B9").Address Then Run ("negatifQuinze") 'Pour T°consigne entre (-5;0) et DKevap =15 quand on agit sur B9 (T°consigne) ElseIf Target.Address = Range("B10").Address Then Run ("negatifQuinze") 'Pour T°consigne entre (-5;0) et DKevap =1 quand on agit sur B10 (DK Evap) End If ElseIf Range("B9").Value <= 5 And Range("B9").Value >= 0 And Range("B10").Value = 5 Then If Target.Address = Range("B9").Address Then Run ("NulCinq") 'Pour T°consigne entre (0;5) et DKevap =5 quand on agit sur B9 (T°consigne) ElseIf Target.Address = Range("B10").Address Then Run ("NulCinq") 'Pour T°consigne entre (0;5) et DKevap =5 quand on agit sur B10 (DK Evap) End If ElseIf Range("B9").Value <= 5 And Range("B9").Value >= 0 And Range("B10").Value = 6 Then If Target.Address = Range("B9").Address Then Run ("NulSix") 'Pour T°consigne entre (0;5) et DKevap =6 quand on agit sur B9 (T°consigne) ElseIf Target.Address = Range("B10").Address Then Run ("NulSix") 'Pour T°consigne entre (0;5) et DKevap = 5 quand on agit sur B10 (DK Evap) End If End If End Sub Je vous joint également le code d'un module type car ils sont très répétitifs, ce ne sont également que les emplacements des cellules qui diffèrent. Sub NegatifSix() Dim eFormule eFormule = Range("P5").Value + (-Range("B9").Value + Range("P3").Value) * ((Range("Q5").Value - Range("P5").Value) / (Range("Q3").Value + Range("P3").Value)) Range("L5") = eFormule End Sub
J'espère avoir été assez clair, j'ai dû mal à exposer le problème car je ne maîtrise pas le VBA et ne suis pas très à l'aise avec le langage informatique (j'apprends sur le tas).
Merci d'avance pour vos réponses, astuces et conseils.
Bonne journée
Partager