Conditions If dans une macro

  • Initiateur de la discussion Initiateur de la discussion mikael2403
  • 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 !

M

mikael2403

Guest
Bonsoir le Forum,

Je bute sur une méthode If dans une macro. ça ne doit pas être très compliquée mais la macro ne fonctionne pas correctement.

Voici mon code :
Code:
If Target.Address = "$A$31" And (IsEmpty(Range("A27")) And IsEmpty(Range("A28"))) _
Or Sheets("Accueil").Range("U30").Value = "TEST" Then UserForm3.Show: Range("A31:C31").ClearContents

Pour traduire, je voudrais interdire la saisie dans la cellule A31 si les cellules A27 et A28 sont vides ou si la valeur de la cellule U30 de la feuille accueil est égale à "TEST".

Le code ci-dessus me lance le UserForm3 a chaque fois que j'entre du texte dans la cellule A31 même si les conditions ne sont pas respectées.

Ai-je fais une erreur dans ma saisie ?

Je vous remercie pour votre aide.

Mikael.
 
Re : Conditions If dans une macro

Bonsoir Mikael, bonsoir le forum,

Essaie comme ça :

Code:
If Target.Address <> "$A$31" Then Exit Sub
If Range("A27") = "" And Range("A28") = "" Then
    If Sheets("Accueil").Range("U30").Value = "TEST" Then
        UserForm3.Show
        Range("A31:C31").ClearContents
    End If
End If
 
Re : Conditions If dans une macro

Bonsoir Robert,

Je te remercie pour ta réponse rapide.
ça ne fonctionne pas.

Si j'entre du texte dans la cellule A31 et que la valeur de la cellule U30 de la feuille accueil est égale à TEST, je n'ai pas le UserForm3 qui s'affiche.
De même que si j'entre du texte dans A31 alors qu'A27 et A28 sont vides, le texte est autorisé. Ce que je ne veux pas.

Merci.😛
 
Re : Conditions If dans une macro

Bonsoir Mikael, bonsoir le forum

Pour que l'UserForm3 s'affiche il faut que les trois conditions soient réunies :
A27 vide
A28 vide
U30 (onglet accueil) ="TEST" (Attention à la casse (Majuscule/Minuscule))

Donc si tu édites dans A31 et que U30="TEST", cela n'est pas suffisant pour lancer l'Userform3... Il faut aussi que A27 et A28 soient vides.

Ensuite, j'aimerais savoir à quelle macro événementielle tu appliques ce code. À Change ou à SelectionChange ?

Car si tu l'appliques à Change, tu n'empêches pas l'édition en A31 puisque la macro ne se déclenche qu'une fois A31 validé... Il faudrait rajouter à ton code un Target.ClearContents si les conditions ne sont pas respéctées...

Je verrais les chose plutôt comme ça :
Code:
Private test As Boolean 'déclare la variable test au nveau du composant Sheet
Private Sub Worksheet_Change(ByVal Target As Range)
 
'ce test evite la boucle du Change puisque des cellules sont effaçées
If test = True Then 'condition : si test est vrai
    test = False 'test devient faux
    Exit Sub 'sort de la procédure
End If 'fin de la contition
'Condition : si l'édition se fait ailleurs qu'en A3, sort de la procédure
If Target.Address <> "$A$31" Then Exit Sub
If Range("A27") = "" And Range("A28") = "" Then 'condition 1 : sil A27 et A28 sont vides
    If Sheets("Accueil").Range("U30").Value = "TEST" Then 'condition 2 : si U30="TEST"
        UserForm3.Show 'affiche l'UserForm3
        Range("A31:C31").ClearContents 'efface le contenu de A31:C31 (la le code repart au début...)
    End If 'fin de la condition 2
End If 'fin de la condition 2
test = True 'définit la variable test
Target.ClearContents 'supprime l'édition faite en A31 (la le code repart au début aussi...)
End Sub

J'ai testé ça fonctionne bien...
 
Dernière édition:
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

A
Réponses
7
Affichages
1 K
A
Retour