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 ?

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

Bonjour,

ajoute ceci

         Debug.Print x & " :: " & (10 + x) + (1 * x)
         wsBoard.Range(Cells((10 + x) + (1 * x), 11), Cells((10 + x) + (1 * x), 15)).Merge ' Fusion d'une plage de cellule

et fais Ctrl+G dans l'éditeur de macro, tu verras peut-être pourquoi !!

y est-il toujours bien défini ? même si quantite <2

Bonjour et merci pour votre réponse:

en ajoutant le ligne de code que vous m'avez indiqué j'obtiens :" 1 :: 12"

--> 1 étant bien ma valeur "X", le résultat normal .

Pour y, ma plage actuellement que je teste est >10, donc y est bien défini dans ce cas.

As-tu eu une erreur 1004 ?

Si oui, quelle était la valeur affichée précédemment dans le "debug" ?

Si non, alors il n'y a plus de problème ...

Oui j'ai bien eu une erreur 1004 et la valeur affichée pendant celle ci est " 1 :: 12"

Voici un fichier pour l'exemple :

14test.xlsm (96.96 Ko)

Bonjour,

essaie ceci

Range(wsBoard.Cells((10 + x) + (1 * x), 11), wsBoard.Cells((10 + x) + (1 * x), 15)).Merge

au lieu de

wsBoard.Range(Cells((10 + x) + (1 * x), 11),Cells((10 + x) + (1 * x), 15)).Merge 

Bonjour,

Pas le temps de regarder dans le détail, mais ça :

        Case Is < 10 > 7

Ce n'est pas une syntaxe VBA !

L'évaluation se fait à partir de tes Case successifs, tu as d'abord : Case Is > 10

au second Case tu n'as plus à tester que parmi les valeurs <= 10, donc : Case Is > 7 doit suffire, et cela inclue la valeur 10 qui restait hors Case dans ta formulation précédente (mais qui ne pouvait d'ailleurs déboucher dans sa formulation initiale...)

Et ainsi de suite pour les suivants.

Cordialement.

Rechercher des sujets similaires à "erreur 1004 definie application objet"