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 1004 définie par l'application ou par l'objet


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 97
    Par défaut Erreur 1004 définie par l'application ou par l'objet
    Bonjour à tous,

    Je réalise une macro qui me récupère les "X" plus grande valeurs et les "X" valeurs plus petite dans une plage ( rows2).

    Mais mon code m'indique une erreur 1004 sur la ligne wsBoard.Range(Cells((10 + x) + (1 * x), 11), Cells((10 + x) + (1 * x), 15)).Merge et si je saute cette instruction j'ai la même erreur à la ligne du dessous.

    Pouvez vous m'expliquer ou se trouve l'erreur ?

    Code VB : 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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    Private Sub grandevaleurs()
    Dim x, y As Integer
    Dim NombreG, NombreP As Double
    Dim ColonneG, colonneP As Integer
    Dim wsDonnees, wsBoard As Object
     
    Select Case quantite ' quantite: variable Public
        Case Is > 10
        y = 5
        Case Is < 10 > 7
        y = 3
        Case Is > 4 < 7
        y = 2
        Case Is = 2
        y = 1
        Case Is < 2
        Exit Sub
    End Select
     
        For x = 1 To y 'boucle pour récupérer les plus grandes valeurs et les plus petites
     
             Set wsDonnees = ThisWorkbook.Worksheets("Donnees")
             Set wsBoard = ThisWorkbook.Worksheets("Tableau")
            'récupère la Xieme valeur la plus élevée dans la 2eme ligne
            NombreG = wsDonnees.Application.WorksheetFunction.Large(Rows(2), x) ' Valeur de la "X" valeur la plus grande
            NombreP = wsDonnees.Evaluate("Small(IF(" & Rows(2).Address & ">1," & Rows(2).Address & ")," & x & ")") ' Valeur de la "X" valeur la plus petite
            'recherche le numéro de la colonne pour la valeur trouvée
            ColonneG = wsDonnees.Application.Match(NombreG, Rows(2), 0) 'repupere le N° de colonne de la "X" valeur la plus grande
            colonneP = wsDonnees.Application.Match(NombreP, Rows(2), 0) 'repupere le N° de colonne de la "X" valeur la plus petite
     
            If x = y Then Exit Sub ' si x à atteint y alors on sort du Sub
     
            ' Afin d'éviter d'avoir des doublons, si la valeur "x" est égale à la valeur de "X+1" alors on sort du sub
            If wsDonnees.Application.WorksheetFunction.Large(Rows(2), x) = wsDonnees.Application.WorksheetFunction.Large(Rows(2), x + 1) Then Exit Sub
     
            ' Afin d'éviter d'avoir des doublons, si la valeur "x" est égale à la valeur de "X+1" alors on sort du sub
            If wsDonnees.Evaluate("Small(IF(" & Rows(2).Address & ">1," & Rows(2).Address & ")," & x & ")") = wsDonnees.Evaluate("Small(IF(" & Rows(2).Address & ">1," & Rows(2).Address & ")," & x + 1 & ")") Then Exit Sub
     
             wsBoard.Range(Cells((10 + x) + (1 * x), 11), Cells((10 + x) + (1 * x), 15)).Merge ' Fusion d'une plage de cellule
     
            ' Copie de l'entete de la valeur  "X"  la plus grande dans une autre feuille
             wsDonnees.Range(Cells(1, ColonneG)).Value.Copy wsBoard.Range(Cells((10 + x) + (1 * x), 11), Cells((10 + x) + (1 * x), 15))
     
             wsBoard.Range(Cells((10 + x) + (1 * x), 17), Cells((10 + x) + (1 * x), 18)).Merge ' Fusion d'une plage de cellule
     
             wsBoard.Range(Cells((10 + x) + (1 * x), 17), Cells((10 + x) + (1 * x), 18)) = NombreG ' Copie de la "X" valeur la plus grande
     
             wsBoard.Range(Cells((20 - x) - (1 * x), 22), Cells((20 - x) - (1 * x), 26)).Merge ' Fusion d'une plage de cellule
     
             ' Copie de l'entete de la valeur  "X"  la plus petite dans une autre feuille
             wsDonnees.Range(Cells(1, colonneP)).Value.Copy wsBoard.Range(Cells((20 - x) - (1 * x), 22), Cells((20 - x) - (1 * x), 26))
     
             wsBoard.Range(Cells((20 - x) - (1 * x), 27), Cells((20 - x) - (1 * x), 29)).Merge ' Fusion d'une plage de cellule
     
             Range(Cells((20 - x) - (1 * x), 27), Cells((20 - x) - (1 * x), 29)) = NombreP ' Copie de la "X" valeur la plus petite
     
        Next x
    End Sub

    Merci

  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
    Citation Envoyé par Florian53 Voir le message
    Je réalise une macro qui me récupère les "X" plus grande valeurs et les "X" valeurs plus petite dans une plage ( rows2).
    Juste pour info, les fonction Excel GRANDE.VALEUR() et PETITE.VALEUR() font ça sans VBA.
    https://support.office.com/fr-FR/art...b-01672ec00a64
    https://support.office.com/fr-FR/art...b-14c45384df07

    Mais mon code m'indique une erreur 1004 sur la ligne "wsBoard.Range(Cells((10 + x) + (1 * x), 11), Cells((10 + x) + (1 * x), 15)).Merge" et si je saute cette instruction j'ai la même erreur à la ligne du dessous.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
             wsBoard.Range(wsBoard.Cells((20 - x) - (1 * x), 27), wsBoard.Cells((20 - x) - (1 * x), 29)).Merge
    Reporte aussi ce principe sur les lignes suivantes (même si, pour certaines, un seul Cells dans un Range, je n'en comprends pas l'utilité).

  3. #3
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 97
    Par défaut
    Bonjour Mehnir et merci pour ta réponse,

    Ce bout de Vba fais suite à une longue série d'exécution de code qui extrait et analyse une base de données ( environ 500 000 lignes).
    Une fois l'analyse faite j'arrive sur une feuille "Tableau" et par l'action sur différents boutons le contenu de la feuille change toutes les données.
    Un coup c'est les grandes et petites valeurs, l'autre coup des graphiques et encore d'autre chose. le contenu est dynamique. C'est la raison pourquoi je passe en vba et pas en formule.

  4. #4
    Membre confirmé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Novembre 2011
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2011
    Messages : 97
    Par défaut
    Voici un fichier pour l'exemple :
    Fichiers attachés Fichiers attachés

  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 Florian53 Voir le message
    Voici un fichier pour l'exemple :
    Pourquoi tu envoies un fichier alors que je t'ai déjà donné une correction ?

Discussions similaires

  1. [XL-2007] Erreur 1004 définie par l'application : affectation valeur à une cellule
    Par Fiédia dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/06/2011, 20h57
  2. Erreur d'exécution 1004. Erreur définie par l'application ou par l'object
    Par Quentin15 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/06/2011, 20h59
  3. ERREUR 1004-erreur défini par l'application ou par l'objet
    Par zineb87 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/02/2010, 16h40
  4. Erreur 1004 définie par l'application ou par l'objet
    Par GreatDeveloperOnizuka dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 05/12/2007, 09h33

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