[VBA] Lancer Macro si conditions

Bonsoir,

J'ai fait un code qui fonctionne très bien, sauf que j'ai comme l'impression qu'il fait pas exactement ce à quoi je m'attends.

Le code permet de lancer un UserForm si 2 conditions sont réunies ; et plus précisément celle-ci :

-Si la feuille est vide, alors ouvrir l'UserForm.

Ça marche très bien.

Par ailleurs, si je renseigne des infos dans la feuille ; l'userform ne s'ouvre plus.

Très bien !

Si je supprime les données, que je clique sur une autre feuille, alors l'UserForm ne s'ouvre pas. La feuille est pourtant vide !

Je retourne sur une autre feuille, puis je reviens sur la feuille en question ; et là l'UserForm apparaît.

Sauriez-vous me dire d'où peut bien venir ce phénomène ??

Je joins un document pour illustrer ainsi que le code.

Dim a, b

Private Sub Worksheet_Activate()
    a = 0
    a = Application.WorksheetFunction.CountA(Rows("2:26"))

    If a = 0 And b = 0 Then UserForm1.Show
    If a = 0 Then b = 0 Else b = 1
End Sub

Merci de votre attention !

Bonne soirée.

6test01.xlsm (17.28 Ko)

bonsoir,

La macro est une macro évènementielle c'est à dire qu'elle s'exécute à l'occasion d'un évènement.

Ici c'est sur activation de la feuille. C'est à dire lorsque que tu arrives sur la feuille. Quand tu en pars, quand elle se vide ou quand il fait beau, il ne se passe rien et la macro ne s'active pas...

A+

Bonsoir, merci d'avoir pris le temps de répondre !

Je me suis mal exprimé.

Si je supprime les données, que je clique sur une autre feuille, puis que je retourne sur la feuille initiale alors l'UserForm ne s'ouvre pas. La feuille est pourtant vide ! (et la macro est donc supposé s'activer puisque la feuille vient d'être ouverte)

Après cela, je retourne sur une autre feuille, puis je reviens sur la feuille en question ; et là l'UserForm apparaît.

Il faut que je répète deux fois l'opération (à savoir switcher sur 2 feuilles 2 fois) pour que l'UserForm se lance. Il ne le fait pas dès le premier switch.

Bonne soirée.

J'ai simplifié, il restait une variable b que je n'utilise plus. Et tout est rentré dans l'ordre.

Dim a

Private Sub Worksheet_Activate()
    a = 0
    a = Application.WorksheetFunction.CountA(Rows("2:26")) 
    If a = 0 Then UserForm1.Show
    a = 1
End Sub
Rechercher des sujets similaires à "vba lancer macro conditions"