GoalSeek sur Range dynamique avec VBA

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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?
 
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
 
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
 
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 ...
 
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

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Code VBA
Réponses
10
Affichages
773
Réponses
2
Affichages
371
Retour