IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Impossibilité d'effacer une Cellule avec Condition


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    janvier 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : janvier 2021
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Impossibilité d'effacer une Cellule avec Condition
    Bonjour ,

    Je ne suis pas du tout un expert Excel.

    Toutefois , je souhaiterais pouvoir effacer 2 Cellules en fonction de la Valeur d'une Cellule initiale , tout en ramenant , après effacement le curseur
    sur cette Cellule Initiale :

    - positionnement sur D30 à laquelle est associée une Liste Déroulante (Oui , Non)
    - Oui permet d'alimenter I29 et I30
    - après Alimentation des 2 Cellules , l'Utilisateur décide de sélectionner "Non" dans D30 . Résultat attendu : effacement de I29 et I30 et retour sur
    D30 (sinon le Curseur sera toujours positionné sur I30 si aucun Evènement ne vient l'infléchir)

    J'ai procédé comme ceci :

    - Clic Droit dans l'Onglet : sélection de Visualiser le Code
    - j'ai saisi le Code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
              Private Sub Worksheet_Change(ByVal Target As Range)
              If Range("D30") = "Non" Then
              Range("I29").Select
              Selection.ClearContents
              Range("I30").Select
             Selection.ClearContents 
             End if
              End Sub
    - j'ai fait : fichier / enregistrer le Document
    - retour sur l'Onglet et saisi de Non dans D30 . Cela a provoqué un Message d'Erreur , du style :

    Erreur d'exécution 214741....
    La méthode 'select' de l'Objet 'Range' a échoué
    J'ai essayé en remplaçant le ClearContents par .VALUE = "" : toujours pareil.
    J'ai même réussi a bloqué totalement EXCEL (je ne sais pas si c'est dû au fait que le Débogage ne s'arrêtait pas ou autre) , j'en suis venu
    à rebouter la Machine.

    Si vous aviez une idée

    Merci !

  2. #2
    Membre émérite Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    novembre 2013
    Messages
    1 472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : novembre 2013
    Messages : 1 472
    Points : 2 256
    Points
    2 256
    Par défaut
    Créer un bouton de commande et lui associer ce code (à adapter):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Sub miseAjour()
     
        Dim myRange As Range
     
        With ActiveSheet
            Set myRange = .Range("D30")
     
            If myRange <> "" Then
                myRange.Activate
                If myRange = "Oui" Then
                    .[I29] = "aaaaa"
                    .[I30] = "bbbbb"
                Else
                    .Range("I29:I30").ClearContents
                    myRange.Select
                End If
            End If
     
        End With
     
    End Sub

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    janvier 2010
    Messages
    10 620
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : janvier 2010
    Messages : 10 620
    Points : 25 314
    Points
    25 314
    Billets dans le blog
    30
    Par défaut
    Bonjour,
    La procédure événementielle Worksheet_Change réagit dès que l'on change la valeur d'une cellule or en supprimant les données de deux cellules, il y a changement et donc si l'on effectue un changement dans une cellule et que l'on efface deux cellules, la procédure va s'enclencher trois fois au risque dans certain cas de boucler indéfiniment et provoquer une erreur.

    Il y a donc lieu
    • de vérifier si la cellule où a lieu le changement est celle qui nécessite l'effacement de D2, D3 (pour mon exemple)
    • de ne pas utiliser la méthode Select ou l'objet Selection parfaitement inutile dans 98% des cas en VBA
    • de court-circuiter momentanément l'interception des événements (Application.EnableEvents = False)

    Si la donnée modifiée est issue d'une liste déroulante, il n'y a aucune raison de sélectionner la cellule, ici B2, puisqu'il n'y a aucune validation par la touche Retour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Worksheet_Change(ByVal Target As Range)
      With Target
        If .Address = "$B$2" Then
            If StrComp(.Value, "Non", vbTextCompare) = 0 Then
               Application.EnableEvents = False
               Range("D2:D3").ClearContents
               Application.EnableEvents = True
            End If
        End If
      End With
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Ma dernière contribution : VBA - Les macros complémentaires

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    janvier 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : janvier 2021
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci pour votre investissement pour trouver une solution à mon problème.
    Il faut que je teste , j'étais pris sur autre chose.

  5. #5
    Membre expérimenté Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    décembre 2017
    Messages
    713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : décembre 2017
    Messages : 713
    Points : 1 430
    Points
    1 430
    Par défaut
    Bonjour, plutôt que:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
       Private Sub Worksheet_Change(ByVal Target As Range)
              If Range("D30") = "Non" Then
              Range("I29").Select
              Selection.ClearContents
              Range("I30").Select
             Selection.ClearContents 
             End if
              End Sub
    Vous avez plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
       Private Sub Worksheet_Change(ByVal Target As Range)
              If Range("D30").value = "Non" Then
              Range("I29:i30").ClearContents
             End if
              End Sub
    Cordialement
    On a deux vies, la deuxième commence quand on se rend compte qu'on n'en a qu'une.
    Confucius

  6. #6
    Membre émérite Avatar de Zekraoui_Jakani
    Homme Profil pro
    Inscrit en
    novembre 2013
    Messages
    1 472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : novembre 2013
    Messages : 1 472
    Points : 2 256
    Points
    2 256
    Par défaut worksheet change
    J'ai intentionnellement évité "Sub Worksheet_Change(ByVal Target As Range)" à cause du risque d'une boucle infinie qui peut planter XL; l'astuce de Pierre "EnableEvents" est judicieuse !

    Pardon, je voulais écrire "l'astuce de Philippe"

Discussions similaires

  1. [XL-2013] Verrouiller une plage de cellules avec condition
    Par jfmeehan dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/12/2015, 01h57
  2. Réponses: 8
    Dernier message: 30/07/2015, 14h40
  3. Réponses: 6
    Dernier message: 06/01/2014, 22h08
  4. Réponses: 10
    Dernier message: 01/07/2013, 16h06
  5. repositionnement d'une cellule avec condition
    Par commetuveux dans le forum Conception
    Réponses: 9
    Dernier message: 20/10/2009, 12h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo