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 d'execution 1004


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 80
    Par défaut ERREUR d'execution 1004
    Bonjour,
    Sur une ligne de ma macro, j'ai une erreur d'exécution 1004 "La méthode range() de l'objet a échoué!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Range(Cells(17, L1), Cells(20, L1 + 4)).Sort key1:=Cells(17, L1 + 1), key2:=(Cells(17, L1 + 4)), key3:=Range(Cells(17, L1 + 2)), order1:=xlDescending, Header:=xlYes
    J'ai repris l'aide donnée sur le différence entre "range" et "cells" mais je n'y arrive pas.
    Auriez vous une idée sur mon erreur de syntaxe?
    Merci
    La tempête est en train de passer sur la Bretagne
    Pascal

  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,

    1) Quand on débute et qu'on utilise Range et Cells il est très fortement conseillé de préciser leur parent (et la méthode ou la propriété).
    2) On essaie de donner aux variables des noms représentatifs : pourquoi utilises-tu L1 pour un numéro de colonne (plutôt que C1) ?

  3. #3
    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
    Je serais tenté de miser une pièce sur le fait que la variable L1 représente un numéro (ou un nombre) de lignes.
    Si j'ai juste, tu as inversé ligne et colonne dans tes Cells.

    De plus, les notations comme Range(Cells(17, L1 + 2)) sont redondantes : Si le Range ne représente qu'une seule cellule, le Cells suffit par lui-même.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 80
    Par défaut
    Bonjour,
    Merci pour vous être penchés sur mon problème.
    Pour le "nommage" des variables, il est vrai qu'à force de faire des tests, je me suis noyé!!

    J'ai réécrit mon code (ci dessous) avec des noms plus explicites. Cela "plante" a chaque fois sur le tri (une erreur d'exécution 1004 "La méthode range() de l'objet a échoué!)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
           Range(Cells(Ligne + 11, Col), Cells(Ligne + 14, Col + 4)).Sort key1:=Cells(Ligne + 11, Col + 1), key2:=(Cells(Ligne + 11, Col + 4)), key3:=Cells(Ligne + 11, Col + 1), order1:=xlDescending, Header:=xlYes
    Merci encore pour votre aide

    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
     
    Sub CLST1()
    '
    ' CLS TOUR1 POULE1
    '
    Application.ScreenUpdating = False
    'Application.EnableEvents = False ' => désactive les événements
    Call DEpro
     
    '''''''''''''''''''''''''''''''''''''''''
    Dim I As Integer
    Dim Ligne As Integer
    Dim Col As Integer
     
    Ligne = 6
    Col = 4
     
    Sheets("TOUR1").Select
      For I = 1 To 10
          Range(Cells(Ligne, Col), Cells(Ligne + 3, Col + 4)).Select
          Selection.Copy
          Cells(Ligne + 11, Col).Select
          Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Application.CutCopyMode = False
     
        With ActiveSheet
            Range(Cells(Ligne + 11, Col), Cells(Ligne + 14, Col + 4)).Sort key1:=Cells(Ligne + 11, Col + 1), key2:=(Cells(Ligne + 11, Col + 4)), key3:=Cells(Ligne + 11, Col + 1), order1:=xlDescending, Header:=xlYes
        End With
     
        Range(Cells(Ligne + 11, Col + 1), Cells(Ligne + 14, Col + 4)).ClearContents
        Cells(Ligne + 2, 13).Select
     
    Col = Col + 9
      Next
     
    End Sub

  5. #5
    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
    Citation Envoyé par pascalcom Voir le message
    With ActiveSheet
    Range(Cells(Ligne + 11, Col), Cells(Ligne + 14, Col + 4)).Sort key1:=Cells(Ligne + 11, Col + 1), key2:=(Cells(Ligne + 11, Col + 4)), key3:=Cells(Ligne + 11, Col + 1), order1:=xlDescending, Header:=xlYes
    End With[/CODE]
    Deux petit commentaire liminaire.

    Un With ActiveSheet ne sert à rien puisque, par définition, la feuille active est celle utilisée par défaut.

    Dans ton cas précis, le With lui-même est inutile puisqu'il n'est relié à aucun des éléments contenu par sa structure.
    Pour rappel, pour qu'un élément face référence au With qui le contient, il faut le précéder d'un ".".
    Lire ceci : https://docs.microsoft.com/fr-fr/off...with-statement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
           Range(Cells(Ligne + 11, Col), Cells(Ligne + 14, Col + 4)).Sort key1:=Cells(Ligne + 11, Col + 1), key2:=(Cells(Ligne + 11, Col + 4)), key3:=Cells(Ligne + 11, Col + 1), order1:=xlDescending, Header:=xlYes
    Déjà, il est étonnant que la 3è clé de tri soit la même que la première.

    Il est aussi possible que les parenthèses soient perturbatrices en évaluant la cellule plutôt que de transmettre sa référence.

    Essaye ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(Cells(Ligne + 11, Col), Cells(Ligne + 14, Col + 4)).Sort key1:=Cells(Ligne + 11, Col + 1), key2:=Cells(Ligne + 11, Col + 4), order1:=xlDescending, Header:=xlYes

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 80
    Par défaut
    Bonjour,
    Merci beaucoup Menhir, c'était bien la parenthèse superflue qui nuisait au déroulement de la macro.
    Pour la 3eme clé de tri c'était bien une erreur, il fallait tester une autre colonne, j'avais aussi oublié des "order". Pour le With ActiveSheet Patrice740 m'a mis un peu la pression et n'étant par très à l'aise avec les Active, Select, with, ... peur de ne pas être au bon endroit, très souvent je répète des sheet().select ce qui ralentissent souvent les exécutions.
    Encore un grand merci pour ton efficacité et la clarté de tes réponses.

    Pascal
    En Bretagne après la tempête pluie et pluie

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

    - Dans ton code tu ne précises toujours pas les parents des Range et des Cells
    - Tu copies les valeurs d'une plage, puis tu tries les valeurs copiées pour ensuite les effacer et tu répètes ça 10 fois !!!
    Difficile de comprendre ce que tu voudrais faire mais il est inutile des copier des valeurs pour ensuite les effacer !

    Bien que je sois mal placé pour te donner ce conseil (vu que je ne l'applique jamais) : tu devrais commencer par écrire un algorithme

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

Discussions similaires

  1. Erreur d'execution 1004
    Par kanabzh29 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 06/11/2008, 09h34
  2. erreur d'execution 1004
    Par Damientreize dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/04/2008, 16h36
  3. TCD Problème Erreur d'Execution '1004'
    Par zenix dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 11/02/2008, 12h11
  4. pb 'erreur d'execution 1004' problème RANGE
    Par rpauquet dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 05/07/2007, 15h38
  5. [VBA-E] erreur d'execution '1004' sur masquage feuille
    Par Cupoftea dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/04/2007, 18h34

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