Modifier cette macro

D

Domi

Guest
Bonjour,

Cette macro que j'ai trouvé sur ce site a pour but d'effectuer un tri aléatoire de la colonne A à partir de la cellule A1.
Or, moi, pour un souci de présentation, je dois effectuer un tri de la colonne C à partir de la cellule C4.

Voyez-vous comment modifier ce code :

Sub TriColonneAleatoire()
Dim Val As Range
Dim Lig As Byte
Dim Tableau()
Dim Tableau2()
Dim i As Byte, j As Byte, k As Byte
Dim Aleat As Integer

Lig = Range('A65536').End(xlUp).Row
ReDim Tableau(Lig)
For Each Val In Range('A1:A' & Lig)
Tableau(Val.Row - 1) = Val
Next Val

For i = 1 To Lig
Randomize
Aleat = Int(Rnd * UBound(Tableau)) + 1
Cells(i, 1) = Tableau(Aleat - 1)

ReDim Tableau2(Lig - i)

For j = 1 To Lig - i
k = 0
If j >= Aleat Then k = 1
Tableau2(j - 1) = Tableau(j + k - 1)
Next j
ReDim Tableau(Lig - i)
For j = 1 To Lig - i
Tableau(j - 1) = Tableau2(j - 1)
Next j

Next i

End Sub

Je vous joint aussi l'exemple trouver sur ce site en pièce jointe.

------------------------
Merci d'avance [file name=TriAleatoireColonne.zip size=11845]Lien supprimé
 

Pièces jointes

  • TriAleatoireColonne.zip
    11.6 KB · Affichages: 115
Dernière modification par un modérateur:

PascalXLD

XLDnaute Barbatruc
Modérateur
Bonjour

Modifies ces lignes ( j'ai pas tester)

Lig = Range('A65536').End(xlUp).Row
ReDim Tableau(Lig)
For Each Val In Range('A1:A' & Lig)
Tableau(Val.Row - 1) = Val
Next Val

par

Lig = Range('C65536').End(xlUp).Row-3
ReDim Tableau(Lig)
For Each Val In Range('C4:C' & Lig)
Tableau(Val.Row - 1) = Val
Next Va

et

Cells(i, 1) = Tableau(Aleat - 1)

par

Cells(i, 1) = Tableau(Aleat - 1)l
 

PascalXLD

XLDnaute Barbatruc
Modérateur
Re

Là voilà modifiée mais cette fois tester

Option Explicit

Sub TriColonneAleatoire()
Dim Val As Range
Dim Lig As Byte
Dim Tableau()
Dim Tableau2()
Dim i As Byte, j As Byte, k As Byte
Dim Aleat As Integer

Lig = Range('C65536').End(xlUp).Row - 3
ReDim Tableau(Lig)
For Each Val In Range('C4:C' & Lig + 3)
Tableau(Val.Row - 4) = Val
Next Val

For i = 1 To Lig
Randomize
Aleat = Int(Rnd * UBound(Tableau)) + 1
Cells(i + 3, 3) = Tableau(Aleat - 1)

ReDim Tableau2(Lig - i)

For j = 1 To Lig - i
k = 0
If j >= Aleat Then k = 1
Tableau2(j - 1) = Tableau(j + k - 1)
Next j
ReDim Tableau(Lig - i)
For j = 1 To Lig - i
Tableau(j - 1) = Tableau2(j - 1)
Next j

Next i


Bon WE
 
B

bonjour

Guest
j'ai un souccis avec cette macro de capaciter
Sub TriColonneAleatoire()
Dim Val As Range
Dim Lig As Byte
Dim Tableau()
Dim Tableau2()
Dim i As Byte, j As Byte, k As Byte
Dim Aleat As Integer

Lig = Range('A65536').End(xlUp).Row
ReDim Tableau(Lig)
For Each Val In Range('A1:A' & Lig)
Tableau(Val.Row - 1) = Val
Next Val

For i = 1 To Lig
Randomize
Aleat = Int(Rnd * UBound(Tableau)) + 1
Cells(i, 1) = Tableau(Aleat - 1)

ReDim Tableau2(Lig - i)

For j = 1 To Lig - i
k = 0
If j >= Aleat Then k = 1
Tableau2(j - 1) = Tableau(j + k - 1)
Next j
ReDim Tableau(Lig - i)
For j = 1 To Lig - i
Tableau(j - 1) = Tableau2(j - 1)
Next j

Next i

End Sub

le probleme viens de cette ligne
Lig = Range('A65536').End(xlUp).Row

merci de bien m'aider
 

Discussions similaires

Réponses
11
Affichages
297

Statistiques des forums

Discussions
312 294
Messages
2 086 893
Membres
103 404
dernier inscrit
sultan87