• Initiateur de la discussion Initiateur de la discussion clouistiti
  • Date de début Date de début

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 !

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

@+
 
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
 
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.
 
- 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

Retour