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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    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 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
    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.

  3. #3
    Membre averti
    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
    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 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
    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.

  5. #5
    Membre averti
    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
    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 éclairé
    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
    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
    Membre averti
    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
    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
    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.

    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...
    ---------------

  9. #9
    Membre averti
    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
    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

  10. #10
    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
    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...
    ---------------

  11. #11
    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
    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...
    ---------------

  12. #12
    Expert confirmé
    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 : 67
    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
    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 )

  13. #13
    Membre averti
    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
    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