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 :

[VBA] Erreur 1004 - Delete Classe range [XL-2003]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 12
    Points : 8
    Points
    8
    Par défaut [VBA] Erreur 1004 - Delete Classe range
    Bonjour,

    J'ai un petit problème avec l'utilisation d'une formule de suppression j'obtiens une erreur 1004: La méthode Delete de la classe range à échoué


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sheets("4-Dependencies").Activate ' Activation de la feuille 4-Dependencies
     
    For n = ActiveSheet.Range("C" & Columns.Count).End(xlUp).Row To 1 Step -1
     
    If ActiveSheet.Range("C" & n).Value = ID Then ActiveSheet.Rows(n).Delete
     
    Next n
    C'est l'expression "ActiveSheet.Rows(n).Delete"qui est surlignée en jaune.
    Ce que je ne comprends pas trop c'est que lorsque je fais appel à cette instruction sur des données déjà existantes ca marche mais si je l'utilise après avoir utilisé ma fonction d'ajout de donnée ca ne marche pas.

    Est-ce quelqu'un peut m'aider?
    Merci.

  2. #2
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Octobre 2008
    Messages : 273
    Points : 323
    Points
    323
    Par défaut
    Bonjour,
    Je ne vois pas ce qui cloche avec ce code ??
    Tu as bien déclaré tes variables ?

    Peux-tu essayer ça et voir si ça marche ?:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ...Then ActiveSheet.Range("C" & n).EntireRow.Delete

  3. #3
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Points : 9 402
    Points
    9 402
    Par défaut
    Bonjour,

    En utilisant ce code (légèrement différent) par d'erreurs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim i As Integer
    Dim iFin As Long
     
    iFin = Range("A:A").End(xlDown).Row
     
    For i = 1 To iFin
        If Range("A" & i).Value <> "" Then
            Range("A" & i).Delete
            i = i - 1
        End If
    Next i

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par oOVaveOo Voir le message
    Bonjour,
    Je ne vois pas ce qui cloche avec ce code ??
    Tu as bien déclaré tes variables ?
    Je ne vois pas non plus, comment dois-je déclarer mes variables car c'est peut être sur cette partie là que je ne fais pas ce qu'il faut.

    Citation Envoyé par oOVaveOo Voir le message
    Peux-tu essayer ça et voir si ça marche ?:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ...Then ActiveSheet.Range("C" & n).EntireRow.Delete
    J'avais déjà essayé ce code même erreur.


    Citation Envoyé par jfontaine Voir le message
    Bonjour,

    En utilisant ce code (légèrement différent) par d'erreurs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim i As Integer
    Dim iFin As Long
     
    iFin = Range("A:A").End(xlDown).Row
     
    For i = 1 To iFin
        If Range("A" & i).Value <> "" Then
            Range("A" & i).Delete
            i = i - 1
        End If
    Next i
    J'ai adapté ton code à mon exemple mais j'ai un soucis cela ne supprime rien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    iFin = Range("C:C").End(xlDown).Row
     
    For i = 1 To iFin
        If Range("C" & i).Value = ID Then
            Range("C" & i).Delete
            i = i - 1
        End If
    Next i
    "A:A" Ca fait toute la colonne A?
    Si on est sur un xlDown pourquoi faire i = i -1?

    Merci à vous

  5. #5
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Octobre 2008
    Messages : 273
    Points : 323
    Points
    323
    Par défaut
    Tu peux mettre la fonction complète ou c'est trop long ?

  6. #6
    Membre habitué Avatar de LouiMz
    Homme Profil pro
    Inscrit en
    Février 2010
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 104
    Points : 154
    Points
    154
    Par défaut
    Bonjour,

    Remplacer Columns.Count par Rows.Count ^^

  7. #7
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Ton code initial est bon à condition de remplacer columns.count par rows.count

    J'ai enlevé le Activate

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim N As Long
     
    Application.ScreenUpdating = False
    With Sheets("4-Dependencies")
        For N = .Range("C" & .Rows.Count).End(xlUp).Row To 1 Step -1
            If .Range("C" & N).Value = ID Then .Rows(N).Delete
        Next N
    End With
    Sinon, sans passer par une boucle, tu peux utiliser un filtre automatique sur la colonne C (avec ID comme critère) et supprimer en uns seule fois les lignes visibles
    Exemple avec filtre automatique (pour éviter les boucles):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim N As Long
     
    Application.ScreenUpdating = False
    With Sheets("4-Dependencies")
        .AutoFilterMode = False
        N = .Range("C" & .Rows.Count).End(xlUp).Row
        .Range("C1:C" & N).AutoFilter field:=1, Criteria1:=ID
        If .Range("C1:C" & N).SpecialCells(xlCellTypeVisible).Count > 1 Then .Range("C2:C" & N).SpecialCells(xlCellTypeVisible).EntireRow.Delete
        .AutoFilterMode = False
    End With
    EDIT
    Bien vu LouiMz

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par mercatog Voir le message
    Ton code initial est bon à condition de remplacer columns.count par rows.count

    J'ai enlevé le Activate

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim N As Long
     
    Application.ScreenUpdating = False
    With Sheets("4-Dependencies")
        For N = .Range("C" & .Rows.Count).End(xlUp).Row To 1 Step -1
            If .Range("C" & N).Value = ID Then .Rows(N).Delete
        Next N
    End With
    Cela ne marche pas.

    Citation Envoyé par mercatog Voir le message
    Sinon, sans passer par une boucle, tu peux utiliser un filtre automatique sur la colonne C (avec ID comme critère) et supprimer en uns seule fois les lignes visibles
    Exemple avec filtre automatique (pour éviter les boucles):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim N As Long
     
    Application.ScreenUpdating = False
    With Sheets("4-Dependencies")
        .AutoFilterMode = False
        N = .Range("C" & .Rows.Count).End(xlUp).Row
        .Range("C1:C" & N).AutoFilter field:=1, Criteria1:=ID
        If .Range("C1:C" & N).SpecialCells(xlCellTypeVisible).Count > 1 Then .Range("C2:C" & N).SpecialCells(xlCellTypeVisible).EntireRow.Delete
        .AutoFilterMode = False
    End With
    Cette solution fonctionne je vais donc la retenir mais quelqu'un a-t-il une idée du pourquoi du comment l'autre solution ne fonctionne pas?

    Pour le .Row j'avais vu et oublié de le modifier après.

    merci à vous tous pour votre précieuse aide.

  9. #9
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    quelqu'un a t'il une idée du pourquoi du comment l'autre solution ne fonctionne pas?
    "Ne fonctionne pas" ne veut rien dire (message d'erreur? lequel? ne supprime rien? supprime au mauvais endroit?...)

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Toujours le même message et ne supprime que partiellement.

  11. #11
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Ta feuille est protégée?

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Elle l'était mais ne l'est plus depuis que j'ai repris la charge du projet.

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

Discussions similaires

  1. Erreur d'exécution 1004 : la classe Range a échoué.
    Par stagiairecg dans le forum Excel
    Réponses: 3
    Dernier message: 31/03/2015, 14h55
  2. [XL-2010] erreur 1004 methode delete classe range échouée
    Par emi81 dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 13/03/2013, 18h50
  3. Réponses: 8
    Dernier message: 25/01/2008, 12h48
  4. erreur 1004 sur un range
    Par oscar.cesar dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 02/11/2007, 17h35
  5. [VBA-E] Erreur methode select classe range
    Par kdestine dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 17/09/2007, 12h05

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