IF THEN ELSE

clouistiti

XLDnaute Nouveau
Bonjour,

J'ai programmé la fonction solveur en Visual Basic car ma plage de cellules variables (que j'ai appelé Criteria) varie selon certaines conditions. Je dois avoir un problème avec mes conditions car ça me plage de cellules variables n'est jamais la bonne. Help !

PrivateSub CommandButton1_Click()
Worksheets('').Activate
SolverReset
If IsEmpty ('A16:A22') Then Criteria=('C15')
ElseIf IsEmty('A17:A22') Then Criteria= ('C15:C16')
ElseIf IsEmty('A18:A22') Then Criteria= ('C15:C17')
ElseIf IsEmty('A19:A22') Then Criteria= ('C15:C18')
ElseIf IsEmty('A20:A22') Then Criteria= ('C15:C19')
ElseIf IsEmty('A21:A22') Then Criteria= ('C15:C20')
ElseIf IsEmty('A22') Then Criteria ('C15:C21')
Else: Criteria=('C15:C22')
EndIf
SolverOptions
SolverOK SetCell:=Range('C23')
MaxMinVal:=1,_
ByChange:=Criteria
SolverAdd Cellref:=Range('D24'),_
Relation:=2,_
FormulaText:='$D$23'
SolverSolve UserFinish:=False
SolverSave SaveArea:=Range('L1')
End Sub

Merci d'avance.
 
B

Bébère

Guest
Bonjour Clouistiti,

Je viens en passant voir ton message, je ne connais rien en Vba mais j'ai bien l'intention de m'y mettre mais dans ton listing tu donne:

'ElseIf IsEmty('A22') Then Criteria ('C15:C21') '

Or il me semble qu'il manque un signe '=' après Criteria et avant la parenthèse. Peut-être que dans ton fichier original il y est et donc cela vient d'ailleurs mais hélas je ne peux d'être aucune utilité.

Bien à vous.

Bébère.
 

Minick

XLDnaute Impliqué
Salut,

Si tu testes comme cela If IsEmpty('A16:A22')...
ce sera toujours faux car en gros tu lui demande de verifier que la chaine 'A16:A22'=''

De plus, tu ne peux pas utiliser IsEmpty pour verifier une plage de cellule.

Il faut que tu verifies cellule par cellule.

en adoptant une synthaxe plutot dans ce style:

Code:
If IsEmpty(Range('A16'))....

ou
Code:
If Range('A16')=''.....


En esperant t'aider un peu

@+
 

le Fnake

XLDnaute Junior
Salut,

Un truc dans ce style peut éventuellement résoudre ton problème

i = 22
If IsEmpty(Range('A22')) Then
i = i - 1
If IsEmpty(Range('A21')) Then
i = i - 1
If IsEmpty(Range('A20')) Then
i = i - 1
If IsEmpty(Range('A19')) Then
i = i - 1
If IsEmpty(Range('A18')) Then
i = i - 1
If IsEmpty(Range('A17')) Then
i = i - 1
If IsEmpty(Range('A16')) Then
i = i - 1
End If
End If
End If
End If
End If
End If
End if
criteria = 'C15:C' & i
 

clouistiti

XLDnaute Nouveau
macro solveur en visual basic

Merci ! ça marche.
J'ai un nouveau petit problème. Quand je clique la première fois sur mon bouton relié à cette macro, il s'arrête après la définition de la plage des cellules variables (ByChange:=Criteria). Quand je reclique, il va au bout de la macro. Pourquoi ?

PrivateSub CommandButton1_Click()
Worksheets('').Activate
SolverReset
i = 22
If IsEmpty(Range('A22')) Then
i = i - 1
If IsEmpty(Range('A21')) Then
i = i - 1
If IsEmpty(Range('A20')) Then
i = i - 1
If IsEmpty(Range('A19')) Then
i = i - 1
If IsEmpty(Range('A18')) Then
i = i - 1
If IsEmpty(Range('A17')) Then
i = i - 1
If IsEmpty(Range('A16')) Then
i = i - 1
End If
End If
End If
End If
End If
End If
End if
Criteria = 'C15:C' & i
SolverOptions
SolverOK SetCell:=Range('C23')
MaxMinVal:=1,_
ByChange:=Criteria
SolverAdd Cellref:=Range('D24'),_
Relation:=2,_
FormulaText:='$D$23'
SolverSolve UserFinish:=False
SolverSave SaveArea:=Range('L1')
End Sub

Merci d'avance.
 

Statistiques des forums

Discussions
312 333
Messages
2 087 375
Membres
103 529
dernier inscrit
gonzi