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 :

Erreur de la classe Range (Clearcontents)


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Contrôleur de gestion
    Inscrit en
    Août 2020
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Contrôleur de gestion

    Informations forums :
    Inscription : Août 2020
    Messages : 41
    Par défaut Erreur de la classe Range (Clearcontents)
    Bonjour les développeurs je reviens vers vous à cause d'un problème
    quand j'exécute ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    'Pour Non
    If Target = "Non" Then Target.Offset(0, 2).ClearContents
    If Target = "Non" Then Target.Offset(0, 3).ClearContents
    If Target = "Non" Then Target.Offset(0, 6).ClearContents
    'Pour VIDE
    If Target = "" Then Target.Offset(0, 2).ClearContents
    If Target = "" Then Target.Offset(0, 3).ClearContents
    If Target = "" Then Target.Offset(0, 6).ClearContents
    Exit sub 
    End Sub
    EXCEL SE bloque , se FERME et laisse ce message d'erreur : Erreur d'exécution -2147417848 (80010108) La méthode Clearcontents de l'objet Range a échoué"

  2. #2
    Membre confirmé
    Homme Profil pro
    Automaticien
    Inscrit en
    Octobre 2019
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Automaticien

    Informations forums :
    Inscription : Octobre 2019
    Messages : 75
    Par défaut
    Salut, essais ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    If Target.value = "Non" Then 
    Target.Offset(0, 2).ClearContents
    Target.Offset(0, 3).ClearContents
    Target.Offset(0, 6).ClearContents
    end if
    'Pour VIDE
    If Target.value = "" Then 
    Target.Offset(0, 2).ClearContents
    Target.Offset(0, 3).ClearContents
    Target.Offset(0, 6).ClearContents
    end if
    Exit sub
    End Sub
    Après je pencherais pour "Target.Offset(x, y).value = ""

  3. #3
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    bonjour

    la première partie est logique, en effet avec Worksheet_Change si tu saisie non en colonne A tu efface l'équivalent en colonne D ou autre
    ce que je comprends pas la deuxiemme partie : si cellule est vide !!
    et oui ça peut planter parce que tu n'indique pas ou s'applique la règle et comme ça le code tourne en vide


    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
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A2:A" & Cells(Rows.Count, 1).End(xlUp).Row)) Is Nothing Then
    If Target = "Non" Then
    Target.Offset(0, 2).ClearContents
    Target.Offset(0, 3).ClearContents
    Target.Offset(0, 6).ClearContents
    End If
    'Pour VIDE
    If Target = "" Then
    Target.Offset(0, 2).ClearContents
    Target.Offset(0, 3).ClearContents
    Target.Offset(0, 6).ClearContents
    End If
    End If
    End Sub
    revenir avec explication de la deuxieme partie du code

  4. #4
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    plus simple :
    ça suppose pour la deuxième partie du code que tu as des données en A et qd tu efface une donnée , l'équivalent en B s’efface aussi
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Columns(1)) Is Nothing Then
    If Target = "Non" Then
    Target.Offset(0, 2).ClearContents
    Target.Offset(0, 3).ClearContents
    Target.Offset(0, 6).ClearContents
    End If
    'Pour VIDE
    If Target = "" Then
    Target.Offset(0, 2).ClearContents
    Target.Offset(0, 3).ClearContents
    Target.Offset(0, 6).ClearContents
    End If
    End If
    End Sub

  5. #5
    Membre averti
    Femme Profil pro
    Contrôleur de gestion
    Inscrit en
    Août 2020
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Contrôleur de gestion

    Informations forums :
    Inscription : Août 2020
    Messages : 41
    Par défaut
    Bennasr ce que je veux dire par vide est que si l'utilisateur efface les données en colonne C et la colonne devient VIDE , les données en colonnes E, F et I s'effacent automatiquement .
    Et en fait votre code et celui de weetoz fonctionnent parfaitement pour le "non" et les autres valeurs que j'ai . Mais rien ne se passe pour le vide.
    Est ce qu'il y a une autre manière de dire cellule vide au développeur à part "" ??

  6. #6
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    voir ma dernière proposition (4)

  7. #7
    Membre averti
    Femme Profil pro
    Contrôleur de gestion
    Inscrit en
    Août 2020
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Contrôleur de gestion

    Informations forums :
    Inscription : Août 2020
    Messages : 41
    Par défaut
    La proposition est suuuuper MMMMEERCI !
    J'ai une AUTRE PETITE QUESTION : ce code s'exécute quand la personne fait entrer "Non" si elle saisit "non" ou "NON" le code ne s'applique pas. Comment je peux faire pour le dire au développeur ?

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Mon grain de sel...

    Comme Philippe le signale, il faut désactiver l'écoute des évènements mais il faut alors gérer l'erreur avec un On Error Resume Next ou On Error Goto, car si une erreur survient entre la désactivation et la réactivation de l'écoute des évènements, le code sortira de la procédure pour rendre la main à Excel sans réactiver l'écoute.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #9
    Membre averti
    Femme Profil pro
    Contrôleur de gestion
    Inscrit en
    Août 2020
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Contrôleur de gestion

    Informations forums :
    Inscription : Août 2020
    Messages : 41
    Par défaut
    Ceci était mon code !

    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
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Columns(3)) Is Nothing Then
     
    'Pour non
    If Target = "Non" Or Target = "NON" Or Target = "non" Then
    Target.Offset(0, 2).ClearContents
    Target.Offset(0, 3).ClearContents
    End If
     
    'Pour vide
    If Target = "" Then
    Target.Offset(0, 2).ClearContents
    Target.Offset(0, 3).ClearContents
     
        End If
    Si j'ai bien compris je dois maintenant faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    rivate Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Columns(3)) Is Nothing Then
     
    'Pour non
    If LCase(Target.Value) = "non" Then
    Target.Offset(0, 2).ClearContents
    Target.Offset(0, 3).ClearContents
    End if
    C'est ça ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2016] Erreur de la classe Range (Clearcontents)
    Par hhoodb dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/05/2019, 13h31
  2. [XL-2003] [VBA] Erreur 1004 - Delete Classe range
    Par mirmoleboss dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 29/07/2011, 16h53
  3. [XL-2003] Erreur sur la classe Range
    Par PPN83 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/12/2010, 23h26
  4. [VBA-E] Erreur methode select classe range
    Par kdestine dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 17/09/2007, 11h05
  5. Réponses: 13
    Dernier message: 29/06/2007, 18h03

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