Appeler un autre code

J'essaie d'get une autre façon d'écrire cette ligne. Actuellement, je l'ai à l'endroit où si l'une des gammes AA2: AA7 = 1 puis appelez le code OneLineItem. Le problème est que le paramètre que j'ai besoin est si une seule de ces cellules est égale à 1 et qu'une seule autre cellule est supérieure à 1. C'est AA2 = 1 et AA7 = 200 (par exemple). Un problème auquel je suis impliqué est que AA2 = 1, AA3 = 100, AA7 = 200. Cependant, j'ai simplement besoin d'une cellule pour égaler 1 et une autre cellule soit> 1 et tout le rest à 0. Si ce critère est respecté, puis appelez le code OneLineItem. Je vous remercie.

If ActiveSheet.Range("AA2") = 1 Or ActiveSheet.Range("AA3") = 1 Or ActiveSheet.Range("AA4") = 1 Or ActiveSheet.Range("AA5") = 1 Or ActiveSheet.Range("AA6") = 1 Or _ ActiveSheet.Range("AA7") = 1 Then Call OneLineItem Else 

Il y a donc 6 nombres:

  • 1 devrait être 1
  • 1 devrait être supérieur à 1
  • 4 devrait être 0

Nous pouvons donc utiliser COUNTIF () pour find si elle suit le model

 Dim OneTrue As Boolean Dim MoreTrue As Boolean Dim RestTrue As Boolean RestTrue = Application.WorksheetFunction.CountIf([AA2:AA7], 0) = 4 [AA2:AA7].Cells.Count - 2 OneTrue = Application.WorksheetFunction.CountIf([AA2:AA7], 1) = 1 MoreTrue = Application.WorksheetFunction.CountIf([AA2:AA7], ">1") = 1 If RestTrue And OneTrue And MoreTrue Then Call OneLineItem End If 

Une autre méthode consisterait à nicher la FI:

 IF Application.WorksheetFunction.CountIf([AA2:AA7], 0) = [AA2:AA7].Cells.Count - 2 Then IF Application.WorksheetFunction.CountIf([AA2:AA7], 1) = 1 Then 'we do not need the third, If the others are true then the last must be true. 'Unless you can have negative numbers. Then you can add the third. Call OneLineItem End If End If 

L'avantage de la seconde est qu'il ne fait que les COUNTIFs nécessaires jusqu'à find un faux return, alors il ne fait plus. tandis que le premier fait tous les trois, peu importe quoi.