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 424 : Objet Requis


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Novembre 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Novembre 2015
    Messages : 25
    Par défaut Erreur 424 : Objet Requis
    Bonjour,
    J'ai une erreur 424 à la ligne 9 et je n'arrive pas à identifier l'objet ou l'erreur d'écriture.
    Je voudrais effacer la cellule sélectionnée dans le tableau mais aussi la cellule de la colonne précédente.
    J'avais pensé carrément effacer la ligne avec selection.Rows(i).Delete mais cela ne marche pas non plus.
    Quelqu'un peut me donner un coup de pouce ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub pourcentage_faible()
    Dim Cloture As Variant, i As Long, Pourcentage As Double, Dcel As Range
     
    Set Dcel = Range("N" & Rows.Count).End(xlUp)(1, 2)
    Cloture = Range("N5", Dcel)
    For i = 2 To UBound(Cloture)
    Pourcentage = (Cloture(i, 1) / Cloture(i - 1, 1))
    If 0.9975 < Pourcentage And Pourcentage < 1.0025 Then
    Cloture(i, 1).ClearContents
    'selection.Rows(i).Delete
    End If
    Next i
    End Sub

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut


    Bonjour,

    juste en vérifiant le type de donnée ou le contenu de la variable dans la fenêtre des Variables locales
    puis corriger son type de donnée dans sa déclaration.

    Voir aussi l'aide VBA interne de l'instruction Set

    _________________________________________________________________________________________________________
    Je suis Paris, Charlie, Bruxelles, …

  3. #3
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,


    au passage, on réserve le Type Variant pour deux cas bien précis :

    - on ne sait pas ce que va récupérer la variable, par exemple si elle va recevoir une valeur ou une erreur
    - on sait d'entrée de jeu que la variable va changer de type durant la procédure, tant par un choix du développeur, que par le contexte des données (ou objets) qu'on lui affecte (ou instancie)


    or là c'est pas ton cas, ainsi il faut directement déclarer le bon type, donc il est inutile de procéder ainsi pour plusieurs raisons :

    - le type Variant est très gourmand en termes d'utilisation de mémoire, puisque VBA va réserver l'espace le plus gros pour une variable
    - le type Variant oblige VBA a "choisir" le type, donc ça ralenti l'exécution
    - étant donné que tu as la (mauvaise) habitude de ne pas spécifier une propriété quand tu t'y réfères (voir ta ligne 7), tu laisses l'ambiguïté se gérer d'elle-même, ce qui provoque souvent des résultats ou erreurs inattendues ou difficile à diagnostiquer sans inspecter tes variables.

  4. #4
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Perso, je verrai comme ça
    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
    Sub pourcentage_faible()
    Dim Cloture, i As Long, Pourcentage As Double, Dcel As Range
     
    Set Dcel = Range("N" & Rows.Count).End(xlUp)(1, 2)
    Cloture = Range("N5", Dcel)
    For i = 2 To UBound(Cloture)
      Pourcentage = (Cloture(i, 1) / Cloture(i - 1, 1))
      If Pourcentage > 0.9975 And Pourcentage < 1.0025 Then
        'Cloture(i, 1).ClearContents 'non c'est un tableau
        Cloture(i, 1) = ""
      End If
    Next i
    Range("N" & Rows.Count).End(xlUp)(1, 2).ClearContents
    Range("N5").Resize(UBound(Cloture, 1), UBound(Cloture, 2)) = Cloture
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  5. #5
    Membre averti
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Novembre 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Novembre 2015
    Messages : 25
    Par défaut
    J'attendais de recevoir dans ma boite mail, un message du forum m'annonçant une réponse à la discussion.
    Et je ne recevais rien. Et je pataugeais... jusqu'à ce que je me dise : et si je me connectais aujourd'hui ?
    Merci pour vos réponses rapides qui vont me faire progresser.

  6. #6
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,
    J'attendais de recevoir dans ma boite mail, un message du forum m'annonçant une réponse à la discussion.
    A toi de prévoir l'option, si tu ne sais pas, cliques sur "Tableau de bord"
    Nom : tab.JPG
Affichages : 610
Taille : 13,7 Ko

    et dans les options générales
    Nom : options generales.JPG
Affichages : 724
Taille : 47,1 Ko
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  7. #7
    Membre averti
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Novembre 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Novembre 2015
    Messages : 25
    Par défaut
    Je suis allé voir comme tu me l'indiques mais c'était bien paramétré.
    Mystère !
    Eric

  8. #8
    Membre averti
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Novembre 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Novembre 2015
    Messages : 25
    Par défaut
    Citation Envoyé par casefayere Voir le message
    Perso, je verrai comme ça
    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
    Sub pourcentage_faible()
    Dim Cloture, i As Long, Pourcentage As Double, Dcel As Range
     
    Set Dcel = Range("N" & Rows.Count).End(xlUp)(1, 2)
    Cloture = Range("N5", Dcel)
    For i = 2 To UBound(Cloture)
      Pourcentage = (Cloture(i, 1) / Cloture(i - 1, 1))
      If Pourcentage > 0.9975 And Pourcentage < 1.0025 Then
        'Cloture(i, 1).ClearContents 'non c'est un tableau
        Cloture(i, 1) = ""
      End If
    Next i
    Range("N" & Rows.Count).End(xlUp)(1, 2).ClearContents
    Range("N5").Resize(UBound(Cloture, 1), UBound(Cloture, 2)) = Cloture
    End Sub
    J'ai testé et cela bloque après la première condition réalisé.
    La ligne 10 ayant donné Cloture(i , 1) = "", à la boucle suivante, c'est Cloture(i - 1, 1) qui prend la valeur de "" et une erreur 13 se produit puisque la division se fait par "".
    Peut-être en stockant dans une variable temporaire qu'on effacerait ensuite ?

  9. #9
    Membre averti
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Novembre 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Novembre 2015
    Messages : 25
    Par défaut
    J'ai réussi à utiliser ta proposition et à l'améliorer, tout seul, comme un grand (programmeur).
    J'explique comment j'y suis arrivé :
    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
    Sub pourcentage()
    Dim Cloture, i As Long, pourcentage As Double, Dcel As Range, x As Long
     
    Set Dcel = Range("N" & Rows.Count).End(xlUp)(1, 2)
    Cloture = Range("N5", Dcel)
    For i = 2 To UBound(Cloture)
        For x = 1 To UBound(Cloture)
            If Not Cloture(i - x, 1) = "" Then
            pourcentage = (Cloture(i, 1) / Cloture(i - x, 1))
                If pourcentage > 0.99 And pourcentage < 1.01 Then
                Cloture(i, 1) = ""
                Exit For
                End If
            Exit For
            End If
        Next x
    Next i
    Range("N" & Rows.Count).End(xlUp)(1, 2).ClearContents
    Range("N5").Resize(UBound(Cloture, 1), UBound(Cloture, 2)) = Cloture
    End Sub
    Avec la solution de Casefayere, je me trouvais avec une division par zéro lors du second passage de la boucle. A cause de la ligne 10 : Cloture(i,1) = "".
    A chaque passage de la boucle, Cloture(i,1) devient Cloture(i-1,1) avec une valeur "" et donc une division impossible.
    J'ai donc créé une seconde boucle, avec le compteur x, pour tester que la valeur précédente ne soit pas zéro.
    Et le tour était joué !

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

Discussions similaires

  1. Find - Erreur 424 - Objet requis
    Par wilfried_42 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/02/2009, 09h42
  2. erreur 424, objet requis
    Par Nessie37 dans le forum VBA Access
    Réponses: 8
    Dernier message: 08/01/2009, 12h20
  3. Erreur 424 objet requis
    Par davyvba dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/06/2008, 17h52
  4. erreur "424" Objet requis
    Par fifrelin_70 dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 29/10/2007, 19h48
  5. Erreur 424 Objet requis sur connexion à Access
    Par darkian dans le forum ASP
    Réponses: 4
    Dernier message: 21/06/2006, 11h32

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