Excel VBA macro code if ... then ...

Résolu/Fermé
-
 aladdin1234 -
Bonjour,

Je suis débutant avec excel et je n'y connais absolument rien en macro VBA. Quelqu'un aurait-il la gentillesse de me proposer un code pour une macro réalisant ceci: si d5="" (cellule vide) alors modifier le contenu des cellules c4 à c33 de façon à ce que toutes ces cellules deviennent vides elles aussi (=""). Je veux que la macro s'exécute à chaque fois que le contenu de la cellule d5 est modifié. Enfin, j'aimerais savoir comment régler les paramètres de sécurité d'excel afin que la macro s'exécute sans problèmes (éviter la demande d'autorisation à chaque utilisation du classeur). Merci!


2 réponses

Messages postés
24292
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
26 janvier 2022
7 038
Bonjour,

1) à mettre dans le code de la feuille concernée :
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, [D5]) Is Nothing Then
        If [D5] = "" Then [C4:C33].ClearContents
    End If
End Sub


2)
Je te déconseille de désactiver le contrôle des macros.
Par contre tu peux te créer une signature, 'certificat numérique pour les projet VBA' dans les outils Office.
Ensuite dans VBE menu 'outils / signature electronique...' signer ton projet et l'enregistrer.
A l'ouverture du fichier tu pourras choisir d'accepter toujours cette signature, il ne te demandera plus rien.

eric

Merci Éric! J'ai essayé le code que tu m'as proposé pour la macro mais quand j'efface la cellule D5, la macro s'exécute en boucle infinie et VBA m'envoie un message d'erreur. Quelle est la solution? Concernant le certificat numérique et la signature électronique, je l'ai fait et ça fonctionne bien !
Messages postés
24292
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
26 janvier 2022
7 038
Bonjour,

Tu as d'autres macros qui en sont la cause.
Celle-ci s'exécute au pire 2 fois.
Si tu veux vraiment qu'elle ne s'exécute qu'une fois (dans l'hypothèse ou elle est seule) alors :
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, [D5]) Is Nothing Then
        Application.EnableEvents = False
        If [D5] = "" Then [C4:C33].ClearContents
        Application.EnableEvents = True
    End If
End Sub


eric
Ça fonctionne très bien !

Merci ! ! !