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 :

Quand j'execute ma macro j'ai erreur 1004 je comprends pas pourquoi [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    Juin 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Expert sécurité informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2018
    Messages : 17
    Points : 6
    Points
    6
    Par défaut Quand j'execute ma macro j'ai erreur 1004 je comprends pas pourquoi
    j'ai écrit une macro en vba qui consiste à supprimer une ligne lorsque les données sont sup à 7 dans la colonne BF c'est à dire la 58 mais je reçois un message d'erreur "1004" sur la ligne (Rows(I).Delete) je comprends pas pourquoi j'ai besoin de votre aide merci! le code est le suivant merci
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    Sub es()
     
     Dim i As Long
     
    ' COPIE DES LIGNES DESIREES DANS LES FEUILLES DE CALCUL DEDIEES
    Dim BoEcran As Boolean, BoBarre As Boolean, BoEvent As Boolean, BoSaut As Boolean
    Dim iCalcul As Integer
     
     
    ' on conserve d'abord les configurations existantes
     
    BoEcran = Application.ScreenUpdating
    BoBarre = Application.DisplayStatusBar
    iCalcul = Application.EnableEvents
    BoSaut = ActiveSheet.DisplayPageBreaks
     
    ' on force les configurations
     
    Application.ScreenUpdating = False
    Application.DisplayStatusBar = False
    Application.Calculation = xlManual
    Application.EnableEvents = False
    ActiveSheet.DisplayPageBreaks = False
     
     
    For i = Range("i500000").End(xlUp).Row To 1 Step -1
     If Cells(i, 58) > "7" Then
     Rows(i).Delete
     End If
     
    Next i
     
    'les configurations sont restaurées
     
    Application.ScreenUpdating = BoEcran
    Application.DisplayStatusBar = BoBarre
    Application.Calculation = iCalcul
    Application.EnableEvents = BoEvent
    ActiveSheet.DisplayPageBreaks = BoSaut
     
     
    End Sub

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Déjà, commence par enlever les guillemets qui entourent ton 7 si tu veux que l'inégalité fonctionne.

    Ensuite, regarde la valeur de i (fenêtre de variables locales) quand l'exécution bugue.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    Juin 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Expert sécurité informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2018
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Menhir oui j'ai retire les guillemets et le message d'erreur est "erreur d'execution 1004 la methode delete de la classe range a échoué" et j'ai ce problem uniquement avec les valeurs de la colonne BF (58) je comprends pas

  4. #4
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    On fait une seconde tentative :
    Citation Envoyé par Menhir Voir le message
    regarde la valeur de i (fenêtre de variables locales) quand l'exécution bugue.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    Juin 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Expert sécurité informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2018
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Menhir Voir le message
    On fait une seconde tentative :
    la variable i a pour valuer 1 de type Long; le problème est que la macro supprime effectivement les lignes mais j'ai toujours le message d'erreur

  6. #6
    Membre régulier
    Femme Profil pro
    Responsable audit interne
    Inscrit en
    Février 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable audit interne
    Secteur : Santé

    Informations forums :
    Inscription : Février 2016
    Messages : 67
    Points : 91
    Points
    91
    Par défaut
    Pourquoi partir de la cellule i500000 ?
    Il vaudrait mieux utiliser Sheets("MaFeuille").Cells(1, 1).CurrentRegion.Rows.Count

    Peut-être que dans la colonne "I", il y a des cellules vides à la fin, et qu'on ne démarre pas du bas du tableau ?

    J'ai mis les valeurs supérieures à 7 en colonne 3, et testé le code suivant, ça marche nickel...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub test()
     
    For i = Cells(1, 1).CurrentRegion.Rows.Count To 1 Step -1
     If Cells(i, 3) > 7 Then
     Rows(i).Delete
     End If
     
    Next i
     
    End Sub

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    Juin 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Expert sécurité informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2018
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Finndelle74 Voir le message
    Pourquoi partir de la cellule i500000 ?
    Il vaudrait mieux utiliser Sheets("MaFeuille").Cells(1, 1).CurrentRegion.Rows.Count

    Peut-être que dans la colonne "I", il y a des cellules vides à la fin, et qu'on ne démarre pas du bas du tableau ?

    J'ai mis les valeurs supérieures à 7 en colonne 3, et testé le code suivant, ça marche nickel...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub test()
     
    For i = Cells(1, 1).CurrentRegion.Rows.Count To 1 Step -1
     If Cells(i, 3) > 7 Then
     Rows(i).Delete
     End If
     
    Next i
     
    End Sub
    Ouais comme je t'ai dit ça fonctionne bien j'ai aussi essayé avec ton code ça supprime normalement mais à la fin j'ai toujours ce message d'erreur le même

  8. #8
    Membre régulier
    Femme Profil pro
    Responsable audit interne
    Inscrit en
    Février 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable audit interne
    Secteur : Santé

    Informations forums :
    Inscription : Février 2016
    Messages : 67
    Points : 91
    Points
    91
    Par défaut
    Essaie de jeter un oeil à cette discussion :
    https://www.developpez.net/forums/d1...-classe-range/

    Tu exécutes la macro depuis la feuille sur laquelle tes lignes doivent être supprimées ?

    Sinon envoie ton fichier pour voir.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    Juin 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Expert sécurité informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2018
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Finndelle74 Voir le message
    Essaie de jeter un oeil à cette discussion :
    https://www.developpez.net/forums/d1...-classe-range/

    Tu exécutes la macro depuis la feuille sur laquelle tes lignes doivent être supprimées ?

    Sinon envoie ton fichier pour voir.
    oui j'insére la macro dans un module et j'execute sur la feuille où je supprime et le fichier est trop lourd j'arrive pas à le joindre

  10. #10
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Salut.

    Perso, je n'aime pas le CurrentRegion. Je préfère partir du bas de la feuille.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub DelRows()
      Dim i As Long
     
      For i = Range("i1048576").End(xlUp).Row To 1 Step -1
        If Cells(i, 58) = 7 Then Rows(i).Delete
      Next i
    End Sub
    Tu dis que lorsque tu as l'erreur, i vaut 1. Quelle est la valeur de BF1 (celle qui est comparée à 7 sur la ligne qui pose problème?

    Autre idée: Ta feuille ne serait pas protégée sur la ligne 1, par hasard?
    "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...
    ---------------

  11. #11
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Au lieu de partir de la dernière cellule, essaie de commencer tes occurrences à la ligne qui pose problème.
    D'où l'intérêt, soit dit en passant, de la fenêtre des variables locales mentionnée par Menhir.

    Attention, Findelle. La propriété CurrentRegion ne gère pas les lignes vides.
    Pour ma part, je préfère partir de la dernière ligne de la feuille active.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim derlign As Integer, i As Integer ' à adapter
     
    With Worksheets(1)
          derlign = .Cells(.Rows.Count, 1).End(xlUp).Row
          For i = derlign To 1 Step -1

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  12. #12
    Membre régulier
    Femme Profil pro
    Responsable audit interne
    Inscrit en
    Février 2016
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable audit interne
    Secteur : Santé

    Informations forums :
    Inscription : Février 2016
    Messages : 67
    Points : 91
    Points
    91
    Par défaut
    Citation Envoyé par MarcelG Voir le message
    Attention, Findelle. La propriété CurrentRegion ne gère pas les lignes vides.
    Pour ma part, je préfère partir de la dernière ligne de la feuille active.
    Oui j'en suis bien consciente. En général, ma première colonne contient ma clé, donc elle est remplie jusqu'en bas de mon tableau.
    Sinon j'utilise en effet .Cells(.Rows.Count, 1).End(xlUp).Row

    C'était juste le "i500000" qui me chiffonnait ! ;)

  13. #13
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Histoire que l'on soit certain de ton code, peux-tu remettre le code du bloc For... Next actuel?
    "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...
    ---------------

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    Juin 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Expert sécurité informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2018
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Salut.

    Perso, je n'aime pas le CurrentRegion. Je préfère partir du bas de la feuille.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub DelRows()
      Dim i As Long
     
      For i = Range("i1048576").End(xlUp).Row To 1 Step -1
        If Cells(i, 58) = 7 Then Rows(i).Delete
      Next i
    End Sub
    Tu dis que lorsque tu as l'erreur, i vaut 1. Quelle est la valeur de BF1 (celle qui est comparée à 7 sur la ligne qui pose problème?

    Autre idée: Ta feuille ne serait pas protégée sur la ligne 1, par hasard?
    la igne 1 BF1 c'est le nom de la colonne ; elle est nommé couverture

  15. #15
    Responsable
    Office & Excel


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Ok.

    Pourquoi aller jusque la ligne 1 puisqu'elle contient l'intitulé de ta colonne? Ta boucle For doit aller jusqu'à 2. ( For i = ... to 2 step -1)

    Tu utilises, je suppose, un tableau structuré et tu ne peux pas supprimer la ligne d'entête dudit tableau.

    J'aurais dû y penser, en fait ^^
    "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...
    ---------------

  16. #16
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Et c'est d'ailleurs ce qui crée sans doute l'erreur : comparaison d'un libellé avec un nombre.

    P.S. Ne vous fiez pas à la photo, il a l'air cruel et féroce, mais Pierre est gentil (salut à toi, cela faisait un bail )

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  17. #17
    Futur Membre du Club
    Homme Profil pro
    Expert sécurité informatique
    Inscrit en
    Juin 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Expert sécurité informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2018
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Ok.

    Pourquoi aller jusque la ligne puisqu'elle contient l'intitulé de ta colonne? Ta boucle For doit aller jusqu'à 2. ( For i = ... to 2 step -1)

    Tu utilises, je suppose, un tableau structuré et tu ne peux pas supprimer la ligne d'entête dudit tableau.

    J'aurais dû y penser, en fait ^^
    Merci c'est tt bon c'était ça le problème

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

Discussions similaires

  1. [XL-2010] Problème macro Excel avec erreur 1004
    Par MikeBusters dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 09/03/2018, 17h48
  2. Ma jolie macro fonctionne mais je ne comprends pas pourquoi ^
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 01/07/2007, 06h06
  3. Je ne comprends pas pourquoi cette erreur
    Par amine_en_france dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 09/06/2007, 22h09
  4. Erreur que je comprends pas
    Par makohsarah dans le forum Langage
    Réponses: 1
    Dernier message: 30/08/2006, 18h14
  5. Réponses: 2
    Dernier message: 14/01/2006, 20h29

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