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 :

Suppression de lignes variables : "La méthode Delete de la classe Range a échoué"


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Autodidacte galérien
    Inscrit en
    Mai 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Autodidacte galérien
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 5
    Par défaut Suppression de lignes variables : "La méthode Delete de la classe Range a échoué"
    Bonjour à toutes et tous,


    J'ai besoin de supprimer un nombre de lignes variable dans un tableau et je me heurte systématiquement à la même erreur :
    Nom : 1004_error.png
Affichages : 571
Taille : 3,6 Ko

    Voici un résumé de ce que mon code est censé faire :
    - ouvrir un autre classeur
    - comparer la taille d'un certain tableau (déclaré comme Tableau) dans le classeur cible et d'un tableau vide dans mon classeur original
    - insérer des lignes en plus ou supprimer les lignes en trop
    - copier les données du classeur cible vers le classeur original

    Je bloque sur la partie "Supprimer les lignes en trop avant copie"

    Voilà mon bout de code qui pose problème ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    If DiffLine > 0 Then
     
        With FOEHNNY_onglet_PE
            .Activate
            .Rows((FirstLinePE + 8) & ":" & (FirstLinePE + DiffLine - 1)).Select
            Selection.EntireRow.Delete
        End With
     
    End If
    L'erreur pointe systématiquement sur la méthode Delete. J'ai tenté des variantes mais aucune n'a fonctionné, i.e. le même message d'erreur a été généré.
    J'ai tenté de remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Selection.EntireRow.Delete
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Selection.Delete
    ou
    FOEHNNY_onglet_PE.Rows((FirstLinePE + 8) & ":" & (FirstLinePE + DiffLine - 1)).Delete
    ou
    Rows(Selection.Row).Delete shift:=xlUp
    également par une boucle For qui ferait du mais peine perdue...

    J'avoue que là, je sèche... Je me débrouille de façon expérimentale avec VBA mais je n'en ai qu'une connaissance extensive.

    Merci d'avance à ceux qui pourront m'aider !

  2. #2
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,

    Tout d'abord, en VBA il faut éviter les Select (c'est inutile).
    Ton code s'écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If DiffLine > 0 Then
      FOEHNNY_onglet_PE.Rows((FirstLinePE + 8) & ":" & (FirstLinePE + DiffLine - 1)).EntireRow.Delete
    End If
    La raison de l'echec peut être multiple.
    - Vérifie les valeurs de FOEHNNY_onglet_PE, de FirstLinePEet et de DiffLine
    - l'onglet ne serait-t'il pas protégé ?
    - la plage supprimée appartient-t'elle à une matrice ?
    - ...

  3. #3
    Membre averti
    Homme Profil pro
    Eleveur d'oran outang en Meuse
    Inscrit en
    Décembre 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Eleveur d'oran outang en Meuse
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2019
    Messages : 13
    Par défaut
    Hello !

    Si tu veux garder ton format avec les .Select pourquoi ne pas utiliser Selection.ClearContents ! Ca marche bien mais laisse des cases blanches à la place de supprimer la ligne. A voir si ça fonctionne !

    Bisous

  4. #4
    Membre à l'essai
    Homme Profil pro
    Autodidacte galérien
    Inscrit en
    Mai 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Autodidacte galérien
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 5
    Par défaut
    Citation Envoyé par Patrice740 Voir le message
    Bonjour,

    Tout d'abord, en VBA il faut éviter les Select (c'est inutile).
    Ton code s'écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If DiffLine > 0 Then
      FOEHNNY_onglet_PE.Rows((FirstLinePE + 8) & ":" & (FirstLinePE + DiffLine - 1)).EntireRow.Delete
    End If
    La raison de l'echec peut être multiple.
    - Vérifie les valeurs de FOEHNNY_onglet_PE, de FirstLinePEet et de DiffLine
    - l'onglet ne serait-t'il pas protégé ?
    - la plage supprimée appartient-t'elle à une matrice ?
    - ...
    Bonjour Patrice

    Oui, pardon, les Select sont un résidu de ma tentative de trouver l'erreur, je vérifiais quelle plage de données était sélectionnée. Merci pour la correction.
    Pour ce qui est de tes pistes :
    - j'ai vérifié pas à pas mes valeurs, a priori pas de problème de ce côté (j'utilise le FOEHNNY_onglet_PE juste avant)
    - j'ai lancé un FOEHNNY_onglet_PE.Unprotect juste avant dans mon code

    - la plage supprimée appartient-t'elle à une matrice ?
    Quand tu parles de "matrice" tu veux dire un tableau déclaré dans l'onglet en question ?
    Oui, c'est le cas. Je cherche à supprimer des lignes recouvrant deux tableaux côte-à-côte, même.
    Ça pose problème ?

  5. #5
    Membre à l'essai
    Homme Profil pro
    Autodidacte galérien
    Inscrit en
    Mai 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Autodidacte galérien
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 5
    Par défaut
    @Ticroso

    Salut ! Non, je ne tiens pas particulièrement aux Select
    Par contre, je tiens à supprimer mes lignes en trop ! (pas seulement effacer le contenu)

  6. #6
    Membre averti
    Homme Profil pro
    Eleveur d'oran outang en Meuse
    Inscrit en
    Décembre 2019
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Eleveur d'oran outang en Meuse
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2019
    Messages : 13
    Par défaut
    Citation Envoyé par Minimilaze Voir le message
    @Ticroso

    Salut ! Non, je ne tiens pas particulièrement aux Select
    Par contre, je tiens à supprimer mes lignes en trop ! (pas seulement effacer le contenu)
    Peut être qu'en raisonnant à l'inverse cela pourrait fonctionner ! Je m'explique : au final tu cherche à supprimer ce qu'il y a en trop, ce qui revient à garder ce qui est nécessaire non ? Pourquoi pas copier dans une autre feuille ce qui t'intéresse puis la renommer et supprimer la première feuille ?

  7. #7
    Membre à l'essai
    Homme Profil pro
    Autodidacte galérien
    Inscrit en
    Mai 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Autodidacte galérien
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 5
    Par défaut
    Citation Envoyé par Ticroso Voir le message
    Peut être qu'en raisonnant à l'inverse cela pourrait fonctionner ! Je m'explique : au final tu cherche à supprimer ce qu'il y a en trop, ce qui revient à garder ce qui est nécessaire non ? Pourquoi pas copier dans une autre feuille ce qui t'intéresse puis la renommer et supprimer la première feuille ?
    Ce n'est pas idiot, mais à terme mes onglets contiendront vraiment beaucoup beaucoup de données. Recopier à chaque lancement de macro quasiment l'ensemble de mes données, ce n'est pas jouable en terme de temps d'exécution.
    Pour comprendre ce que je cherche à faire, j'ai besoin en gros de redimensionner un tableau (dans mon fichier original) à la taille d'un autre tableau (dans mon fichier cible) pour en faire ensuite un copié-collé en utilisant la méthode DataBodyRange.
    Or, il est possible que mon tableau original soit plus grand que mon tableau cible. D'où la nécessité de supprimer les lignes excédentaires avant de faire la copie.

  8. #8
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Citation Envoyé par Minimilaze Voir le message
    Quand tu parles de "matrice" tu veux dire un tableau déclaré dans l'onglet en question ?
    Oui, c'est le cas. Je cherche à supprimer des lignes recouvrant deux tableaux côte-à-côte, même.
    Ça pose problème ?
    Que je parlais de matrice je parlais d'une formule matricielle sur plusieurs cellules

    Par contre, si tu as 2 tableaux structurés cote à cote, tu ne peux pas supprimer des lignes entières, il faut supprimer les lignes d'un tableau et celles de l'autre séparément.

    Et conserver les Select c'est franchement contre productif (les ajouter pour détecter l'anomalie du code est une bonne méthode)

  9. #9
    Membre à l'essai
    Homme Profil pro
    Autodidacte galérien
    Inscrit en
    Mai 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Autodidacte galérien
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2013
    Messages : 5
    Par défaut
    Citation Envoyé par Patrice740 Voir le message
    Que je parlais de matrice je parlais d'une formule matricielle sur plusieurs cellules

    Par contre, si tu as 2 tableaux structurés cote à cote, tu ne peux pas supprimer des lignes entières, il faut supprimer les lignes d'un tableau et celles de l'autre séparément.

    Et conserver les Select c'est franchement contre productif (les ajouter pour détecter l'anomalie du code est une bonne méthode)
    OK, je ne savais pas pour les tableaux.
    Du coup, je viens de tester la suppression tableau par tableau et ça fonctionne. J'ai réussi à réduire mes tableaux.

    Merci beaucoup pour le coup de main ! Je passe le sujet en "Résolu" !

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

Discussions similaires

  1. [XL-2019] Erreur D'exécution'1004' La méthode Delete de la classe Range a échoué.
    Par Miraie dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 16/10/2019, 13h19
  2. La Méthode Activate de la classe Range a échoué
    Par Amiral19 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 06/07/2007, 14h46
  3. 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