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 ?
Merci
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 ?
VB:
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