Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Goalseek selon critères dans une macro

pingouinal

XLDnaute Occasionnel
Bonjour tout le monde,

Dans le fichier joint, j'aurais besoin d'effectuer des goalseek (valeur cible en français je crois, désolé mon Excel est en anglais) qui vérifient des critères. Et là je sèche complètement.

Pour expliquer cela par l'exemple, j'aurais besoin que selon la valeur en C2, la macro effectue un goalseek en E2 pour attendre la valeur moyenne donnée dans le tableau du dessous (cellule F9 puisque le groupe est 3).
Basé sur ce résultat, il faudrait que la macro puisse vérifier que la valeur correspondante en D2 est bien comprise entre les valeurs en B9 et C9. Si c'est le cas, on s'arrête là, sinon on essaie un goalseek en E2 avec une autre valeur comprise entre D9 et E9
Le but est d'arriver à avoir une marge 1 et une marge 2 dans la gamme de valeurs données dans le tableau du bas, tout en étant le plus proche possible de F9 pour la cellule E2.
Si aucune valeur ne va, mettre #N/A en G2.

Selon vous, est-ce possible? Et si oui, comment faire?

D'avance merci pour votre aide.
 

Pièces jointes

  • Marges.xlsx
    10.7 KB · Affichages: 33

Hieu

XLDnaute Impliqué
Re : Goalseek selon critères dans une macro

Salut,

Voilà la macro que je te propose

Code:
Sub mlkzjk()
cible = WorksheetFunction.Index(Range("b7:f9"), _
            WorksheetFunction.Match(Range("c2"), Range("a7:a9"), 0), 5)
Range("E2").GoalSeek Goal:=cible, ChangingCell:=Range("G2")

If Range("D2") < Range("b9") Or Range("D2") > Range("c9") Then
temp1 = WorksheetFunction.Index(Range("b7:f9"), _
            WorksheetFunction.Match(Range("c2"), Range("a7:a9"), 0), 3)
temp2 = WorksheetFunction.Index(Range("b7:f9"), _
            WorksheetFunction.Match(Range("c2"), Range("a7:a9"), 0), 4)
Delta = temp2 - temp1

    For i = 0 To 100
        cible = temp1 + Delta * i / 100
        Range("E2").GoalSeek Goal:=cible, ChangingCell:=Range("G2")
        If Range("D2") > Range("b9") And Range("D2") < Range("c9") Then Exit Sub
    Next i
End If
End Sub

++
Hieu
 

Pièces jointes

  • Marges_v0.xlsm
    18.8 KB · Affichages: 21

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…