2017-10-10 18 views
0

J'essaye de faire en sorte que la macro envoie un msgbox au cas où une checkbox de la feuille active (ActiveX) est cochée.Excel - Envoyer un msgbox si toutes les cases à cocher (ActiveX) sont décochées

Je ne sais pas pourquoi, mais quand je lance la macro, il saute la ligne « x = x + 1 » même si j'ai une case à cocher cochée ...

quelqu'un peut me aider?

Private Sub adecoagrobox1_Click() 


If adecoagrobox1.Value = True Then 
    On Error Resume Next 
    ThisWorkbook.Sheets("Comps_pivot").PivotTables("compspivot1").AddDataField Sheets("Comps_pivot").PivotTables(_ 
    "compspivot1").PivotFields("Adecoagro"), "Adecoagro ", xlSum 
Else 
    On Error Resume Next 
    ThisWorkbook.Sheets("Comps_pivot").PivotTables("compspivot1").PivotFields("Adecoagro "). _ 
    Orientation = xlHidden 

End If 

Dim control as OLEObject 
Dim x as integer 
x = x + 1 

    For Each control In ActiveSheet.OLEObjects 
If TypeName(control.Object) = "Checkbox" And control.Object.Value = 1 Then 
x = x + 1 
End If 
Next control 

If x = 0 Then 
MsgBox ("You must select at least one option") 
On Error Resume Next 
adecoagrobox1.Value = True 
ThisWorkbook.Sheets("Comps_pivot").PivotTables("compspivot1").AddDataField Sheets("Comps_pivot").PivotTables(_ 
    "compspivot1").PivotFields("Adecoagro"), "Adecoagro ", xlSum 

End If 


End Sub 

Merci beaucoup d'avance!

+1

Retirez le 'on error Resume déclarations Next' et voir quelle erreur vous rencontrez – YowE3K

+0

et notez que votre test fo r 'Si x = 0 Then' est inutile parce que vous avez un' x = x + 1' immédiatement après le 'Dim x comme entier' (hmmm, pourquoi ne pas le' i' dans 'integer' en majuscule - l'EDI devrait automatiquement changer cela?!?!) ce qui signifie que 'x' sera toujours au moins' 1'. – YowE3K

+0

Salut! Merci pour la réponse rapide! Lorsque je lance la macro, elle saute toujours le x = x + 1 ... Donc x est toujours égal à 0. Il ne lit pas quand une case est cochée ... x = 0 signifie qu'aucune case n'est cochée et il devrait montrer le msgbox –

Répondre

1

Voici ce qui se passe

Dim x as integer 

La valeur par défaut pour un entier est 0. Donc X est défini comme 0.

x = x + 1 

Immédiatement vous incrémentez et le définir comme 1.

If x = 0 Then 
MsgBox ("You must select at least one option") 

Donc la condition ci-dessus n'est jamais remplie

supprimer la ligne x = x + 1 juste après la déclaration, puis essayer

+0

Hey! Merci pour la réponse rapide! Mon intention est que si une case est cochée dans la feuille active (9 au total), x devrait être supérieur à zéro. Si la case n'est pas cochée, x doit être égal à zéro et envoyer un msgbox. le problème est que même lorsque j'ai coché les cases, il lit x comme 0. –

0

Ce fut une erreur très stupide ...

au lieu de B checkbox doit être en majuscules ... si CheckBox au lieu de Checkbox

et vrai aussi au lieu de 1

deux erreurs dans la même ligne

+0

Mais cela n'explique toujours pas pourquoi le premier 'x = x + 1' est ignoré. – YowE3K

+0

@Leonardo Marcondes, Si cela a résolu votre problème, êtes-vous en mesure d'accepter votre réponse afin que ce fil est marqué "résolu" et que d'autres ne passent pas de temps inutilement à traverser votre problème! Merci. –

+0

@BharatAnand Le problème est que cela ** ne résout pas ** le problème. Il y avait ** deux ** lignes de code qui étaient ignorées pour une raison quelconque et la modification proposée dans cette réponse explique seulement la raison pour laquelle ** une ** des lignes a été ignorée. – YowE3K