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

Résolu/Fermé
aladdin1234 - 28 nov. 2011 à 03:43
 aladdin1234 - 4 déc. 2011 à 03:01
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!


A voir également:

2 réponses

eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
28 nov. 2011 à 09:18
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
0
aladdin1234
29 nov. 2011 à 02:09
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 !
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
29 nov. 2011 à 07:42
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
0
Ça fonctionne très bien !

Merci ! ! !
0