GoalSeek sur Range dynamique avec VBA

JBV010912

XLDnaute Nouveau
Bonjour à tous,

Voilà je suis plutôt débutant sous VBA et j'essaye de réaliser l'opération suivante:
- j'ai un tableau avec une série d'années
- l'utilisateur doit choisir la durée de la période qu'il veut tester avec GoalSeek, en commençant toujours avec la première année (par exemple 4 ans)
- pour la durée choisie, il peut imposer une valeur cible à la variable considérée (par exemple 0)
- ensuite le goal seek modifie la variable en appliquant la cible pour chaque année considérée

Pour m'en sortir j'ai utilisé des noms dynamiques :
Cellule à définir => A$1$:decaler(A$1$;;Nombre d'années) [les cellules visées contiennent des formules]
Valeur à atteindre => Valeur de référence définie par l'utilisateur [fait référence à une cellule d'une autre feuille]
Cellule à modifier => B$1$:decaler(B$1$;;Nombre d'années) [les cellules visées contiennent des valeurs]

Après je passe sous VBA et mon code ressemble à ceci

Range("Cellule à définir").GoalSeek goal:=Range("Valeur à atteindre"), Changingcell:=Range("Cellule à modifier")

Seulement VBA me met que mes références ne sont pas valides...
Help?
 

Hieu

XLDnaute Impliqué
Salut,

Le goalseek te permet de modifier UNE cellule par rapport à un autre;

Il faut boucler dessus :

VB:
For i = 1 to nb_annee
Range("a" & i).GoalSeek goal:=Range("z3"), Changingcell:=Range("b" & i)
next i

A adapter selon ton fichier.

++

PS : Pour la prochaine fois, un petit fichier excel vaut mieux qu'un long discours
 

JBV010912

XLDnaute Nouveau
Merci beaucoup!
Effectivement plus simple avec un fichier, désolé la prochaine fois j'en prépare un mais je ne peux pas sortir les données simplement là.
Mon seul souci avec le code c'est que le décalage se fait vers le bas en fonction des lignes, hors mes données sont triées par années en colonne :s
 

JBV010912

XLDnaute Nouveau
J'ai écrit ça :

j = Range("Start")
For j = 0 To j + Range("Nombre_Annees").Value

Range("Start").Offset(, j).GoalSeek goal:=Range("Cible").Value, Changingcell:=Range("Change").Offset(, j)
Next j

Mon problème désormais est que la macro ne s'arrête pas ...
 

Hieu

XLDnaute Impliqué
Re,

ta ligne
VB:
j = Range("Start")
ne sert à rien, puisque la ligne suivante te ré-initie ton j à j=0.
Si je reprends, par rapport au post #1,
je dirai
VB:
For j = 0 To j + Range("g1").Value
Range("A1").Offset(j, 0).GoalSeek Goal:=Range("G3"), ChangingCell:=Range("B1").Offset(j, 0)
Next j

en faisant l'hypothese que g3 a la valeur cible,

++
 

Pièces jointes

  • value_cible_v0.xlsm
    16.9 KB · Affichages: 74

Discussions similaires

Réponses
1
Affichages
114
  • Question
Microsoft 365 Code VBA
Réponses
10
Affichages
714

Statistiques des forums

Discussions
314 709
Messages
2 112 103
Membres
111 417
dernier inscrit
LYTH