Variable + calcul permanent

  • Initiateur de la discussion Luc
  • Date de début
L

Luc

Guest
Bonjour, tout le monde
J’ai un souci sur VBA Excel – je souhaite avoir une macro qui calcule en continu le produit de deux cellules (ex =A1*B1) sans que la formule soit inscrite dans la cellule et sans que j’ai besoin de lancer la macro --> que se soit en continu.
Par ex : je souhaite que en C1 la macro calcul en temps reel le produit de A1 et B1. Lorsque je change A1, C1 doit changer. ceci doit etre piloté par la macro et aucune formule ne doit etre inscrite en C1

Le code ci-dessous satisfait ce 'calcul en continu' (merci Phibou !).
Mon problème est que je dois faire ce calcul 30 fois dans des cellules différentes (a chaque fois tout est décalé de 13 lignes)... Donc taper 30 fois le code...
Auriez-vous une combine avec des variables pour éviter de refaire 30 fois la manip ?

Merci beaucoup!!


Code :
Private Sub Worksheet_Change(ByVal Target As Range)
'Grand Total
'Original Budget
If Target.Address = '$E$7' Then
Range('E1129') = Range('E7') + Range('E417')
End If
If Target.Address = '$E$417' Then
Range('E1129') = Range('E7') + Range('E417')
End If
'Budget
If Target.Address = '$E$15' Then
Range('E1130') = Range('E15') + Range('E421')
End If
If Target.Address = '$E$421' Then
Range('E1130') = Range('E15') + Range('E421')
End If
'Budget Over (-) / Under (+)
If Target.Address = '$E$1130' Then
Range('E1131') = Range('E1129') - Range('E1130')
'Range('E1132') = (Range('E1129') - Range('E1130')) / Range('E1129')
End If
If Target.Address = '$E$1129' Then
Range('E1131') = Range('E1129') - Range('E1130')
End If
'Budget Over (-) / Under (+)
If Target.Address = '$E$1130' Then
Range('E1132') = (Range('E1129') - Range('E1130')) / Range('E1129')
End If
If Target.Address = '$E$1129' Then
Range('E1132') = (Range('E1129') - Range('E1130')) / Range('E1129')
End If


Bien cordialement,

Luc
 

JeanMarie

XLDnaute Barbatruc
Bonjour

Je ne sais pas si cela va répondre exactement à ton problème
Il faut utiliser la propriété OFFSET, qu permet de faire un décalage
Code:
Private Sub Worksheet_Change(ByVal Target As Range) 
Dim I as Byte
Dim vDec as Long
'Grand Total 
For I = 0 to 29
   vDec = I * 13
   'Original Budget 
   If Target.Address = range('$E$7'Â'Â').offset (vDec).address Then 
       Range('E1129'Â'Â').offset(vDec) = Range('E7'Â'Â').offset(vDec) +  range('E417'Â'Â').offset(vDec) 
   End If 
   ....
next I
End If

Bonne soirée, tiens nous au courant.

@+Jean-Marie

Message édité par: JeanMarie, à: 04/06/2005 19:50
 

CBernardT

XLDnaute Barbatruc
Bonsoir Luc et Jean-Marie,

Je n'ai peut-être pas tout compris ???

Je n'ai pu quajouter des or :

Private Sub Worksheet_Change(ByVal Target As Range)
'Grand Total
'Original Budget
If Target.Address = '$E$7' Or Target.Address = '$E$417' Then
Range('E1129') = Range('E7') + Range('E417')
End If
'Budget
If Target.Address = '$E$15' Or Target.Address = '$E$421' Then
Range('E1130') = Range('E15') + Range('E421')
End If
'Budget Over (-) / Under (+)
If Target.Address = '$E$1130' Or Target.Address = '$E$1129' Then
Range('E1131') = Range('E1129') - Range('E1130')
'Range('E1132') = (Range('E1129') - Range('E1130')) / Range('E1129')
End If
'Budget Over (-) / Under (+)
If Target.Address = '$E$1130' Or Target.Address = '$E$1129' Then
Range('E1132') = (Range('E1129') - Range('E1130')) / Range('E1129')
End If
End Sub


Cordialement

Bernard
 
L

Luc

Guest
Bernard,

Tu as raison, tu simplifies mon code en ajoutant des or :
Mais mon pb est le suivant, je dois réaliser une trentaine de fois ce calcul en décalant a chaque fois les cellules de 13 lignes.
Donc mon '$E$7' s’incrémente de 13 en 13 jusqu’a '$E$397
$E$417' s’incrémente de 13 en 13 jusqu’a $E$807'
Etc...

Jean Marie,

je pense que ton code est pas mal du tout ! Mais je ne comprends pas trop comment faire pour le deuxième I... Je comprends bien la logique ; tu prends une variable (I) que tu fais varier de 0 a 29 ensuite une autre variable (Vdec) qui s’incrémente de 13 en 13 par rapport a I.
Mais je comprend pas trop comment tu fais pour faire varier ton I...
Si tu as un peu de tps, pourrais tu me montrer concretement sur 2 séquences de I ?

Merci beaucoup !!!

Luc
 

JeanMarie

XLDnaute Barbatruc
Re...

Quand I vaut 0, vDec sera égale à 0, il n'y aura pas de décalage vers le bas.

Quand I vaut 1, vDec sera 13, la cellule E$7.offset(13) correspond à la cellule E$19

A chaque boucle de I, vDec sera augmenté de 13.

@+Jean-Marie
 

Discussions similaires

Réponses
7
Affichages
602

Statistiques des forums

Discussions
312 428
Messages
2 088 337
Membres
103 821
dernier inscrit
Lorient56