TANTQUE(k>1 et Tab[k-1]>Tampon)
Tab[k] <--- Tab[k-1]
k <--- k-1
FINTANTQUE
Tab[k] <--- Tampon
FINPOUR
FIN
Sub Trier1()
Dim table(1 To 5, 1 To 1)
table(1, 1) = 5
table(2, 1) = 6
table(3, 1) = 1
table(4, 1) = 8
table(5, 1) = 2
For i = 2 To 5
tampon = table(i, 1)
k = i
Do While (k > 1 And table(k - 1, 1) > tampon)
table(k, 1) = table(k - 1, 1)
k = k - 1
Loop
table(k, 1) = tampon
Next i
Range("A1:A5").Value = table
End Sub
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Charabeuh
Bonjour,
il me semble que : l'instruction "Do While (k > 1 And table(k - 1, 1) > tampon)" essaie toujours d'évaluer les deux arguments de l'opérateur "AND" même si le premier est faux. ==> si k= 1 l'évaluation de "table(k - 1, 1)" conduit à référencer "table(0,1)" qui n'existe pas. En déclarant Dim table(0 To 5, 1 To 1) on évite cette erreur. Dans ce cas remplacer : Range("A1:A5").Value = table par : Range("A1:A6").Value = table
Cdlt
"Tatanka" a écrit dans le message de groupe de discussion :
Bonsoir,
J'essaie vainement de traduire ce pseudo code en VBA. Où erre-je ?
TANTQUE(k>1 et Tab[k-1]>Tampon) Tab[k] <--- Tab[k-1] k <--- k-1 FINTANTQUE
Tab[k] <--- Tampon FINPOUR
FIN
Sub Trier1() Dim table(1 To 5, 1 To 1) table(1, 1) = 5 table(2, 1) = 6 table(3, 1) = 1 table(4, 1) = 8 table(5, 1) = 2 For i = 2 To 5 tampon = table(i, 1) k = i Do While (k > 1 And table(k - 1, 1) > tampon) table(k, 1) = table(k - 1, 1) k = k - 1 Loop table(k, 1) = tampon Next i Range("A1:A5").Value = table End Sub
Merci Serge
Bonjour,
il me semble que :
l'instruction "Do While (k > 1 And table(k - 1, 1) > tampon)"
essaie toujours d'évaluer les deux arguments de l'opérateur "AND"
même si le premier est faux.
==> si k= 1 l'évaluation de "table(k - 1, 1)" conduit à référencer
"table(0,1)" qui n'existe pas.
En déclarant Dim table(0 To 5, 1 To 1) on évite cette erreur.
Dans ce cas remplacer : Range("A1:A5").Value = table
par : Range("A1:A6").Value = table
Cdlt
"Tatanka" <garnote3ENLEVER@videotron.ca> a écrit dans le message de groupe
de discussion : O2iex0nsKHA.5356@TK2MSFTNGP02.phx.gbl...
Bonsoir,
J'essaie vainement de traduire ce pseudo code en VBA.
Où erre-je ?
TANTQUE(k>1 et Tab[k-1]>Tampon)
Tab[k] <--- Tab[k-1]
k <--- k-1
FINTANTQUE
Tab[k] <--- Tampon
FINPOUR
FIN
Sub Trier1()
Dim table(1 To 5, 1 To 1)
table(1, 1) = 5
table(2, 1) = 6
table(3, 1) = 1
table(4, 1) = 8
table(5, 1) = 2
For i = 2 To 5
tampon = table(i, 1)
k = i
Do While (k > 1 And table(k - 1, 1) > tampon)
table(k, 1) = table(k - 1, 1)
k = k - 1
Loop
table(k, 1) = tampon
Next i
Range("A1:A5").Value = table
End Sub
il me semble que : l'instruction "Do While (k > 1 And table(k - 1, 1) > tampon)" essaie toujours d'évaluer les deux arguments de l'opérateur "AND" même si le premier est faux. ==> si k= 1 l'évaluation de "table(k - 1, 1)" conduit à référencer "table(0,1)" qui n'existe pas. En déclarant Dim table(0 To 5, 1 To 1) on évite cette erreur. Dans ce cas remplacer : Range("A1:A5").Value = table par : Range("A1:A6").Value = table
Cdlt
"Tatanka" a écrit dans le message de groupe de discussion :
Bonsoir,
J'essaie vainement de traduire ce pseudo code en VBA. Où erre-je ?
TANTQUE(k>1 et Tab[k-1]>Tampon) Tab[k] <--- Tab[k-1] k <--- k-1 FINTANTQUE
Tab[k] <--- Tampon FINPOUR
FIN
Sub Trier1() Dim table(1 To 5, 1 To 1) table(1, 1) = 5 table(2, 1) = 6 table(3, 1) = 1 table(4, 1) = 8 table(5, 1) = 2 For i = 2 To 5 tampon = table(i, 1) k = i Do While (k > 1 And table(k - 1, 1) > tampon) table(k, 1) = table(k - 1, 1) k = k - 1 Loop table(k, 1) = tampon Next i Range("A1:A5").Value = table End Sub
Merci Serge
db
Tatanka a écrit :
Bonsoir,
Sub Trier1() Dim table(1 To 5, 1 To 1) table(1, 1) = 5 table(2, 1) = 6 table(3, 1) = 1 table(4, 1) = 8 table(5, 1) = 2 For i = 2 To 5 tampon = table(i, 1) k = i Do While (k > 1 And table(k - 1, 1) > tampon) table(k, 1) = table(k - 1, 1) k = k - 1 Loop table(k, 1) = tampon Next i Range("A1:A5").Value = table End Sub
Bonjour,
D'accord avec Charabeuh sur la raison du dysfonctionnement. Une solution possible :
Do While (k > 1) If table(k - 1, 1) > tampon Then Exit Do table(k, 1) = table(k - 1, 1) k = k - 1 Loop
db
Tatanka a écrit :
Bonsoir,
Sub Trier1()
Dim table(1 To 5, 1 To 1)
table(1, 1) = 5
table(2, 1) = 6
table(3, 1) = 1
table(4, 1) = 8
table(5, 1) = 2
For i = 2 To 5
tampon = table(i, 1)
k = i
Do While (k > 1 And table(k - 1, 1) > tampon)
table(k, 1) = table(k - 1, 1)
k = k - 1
Loop
table(k, 1) = tampon
Next i
Range("A1:A5").Value = table
End Sub
Bonjour,
D'accord avec Charabeuh sur la raison du dysfonctionnement.
Une solution possible :
Do While (k > 1)
If table(k - 1, 1) > tampon Then Exit Do
table(k, 1) = table(k - 1, 1)
k = k - 1
Loop
Sub Trier1() Dim table(1 To 5, 1 To 1) table(1, 1) = 5 table(2, 1) = 6 table(3, 1) = 1 table(4, 1) = 8 table(5, 1) = 2 For i = 2 To 5 tampon = table(i, 1) k = i Do While (k > 1 And table(k - 1, 1) > tampon) table(k, 1) = table(k - 1, 1) k = k - 1 Loop table(k, 1) = tampon Next i Range("A1:A5").Value = table End Sub
Bonjour,
D'accord avec Charabeuh sur la raison du dysfonctionnement. Une solution possible :
Do While (k > 1) If table(k - 1, 1) > tampon Then Exit Do table(k, 1) = table(k - 1, 1) k = k - 1 Loop
db
Hervé
Bonjour, Peut être ceci ? A adapter si ce n'est pas le cas :
Sub test()
Dim Tbl() Dim I As Integer
Dim table(1 To 5, 1 To 1) table(1, 1) = 5 table(2, 1) = 6 table(3, 1) = 1 table(4, 1) = 8 table(5, 1) = 2
Tbl = Tri(table)
For I = 1 To UBound(table) Debug.Print table(I, 1) Next I
End Sub
Function Tri(Tbl()) As Variant() Dim Tempo Dim I As Integer Dim J As Integer
'éffectue un tri décroissant "<" 'pour un tri croissant ">"
'avec boucle Do Loop Do While I < UBound(Tbl) - 1 I = I + 1 Do While J < UBound(Tbl) J = J + 1 'sens du tri < ou > If Tbl(I, 1) < Tbl(J, 1) Then Tempo = Tbl(J, 1) Tbl(J, 1) = Tbl(I, 1) Tbl(I, 1) = Tempo End If Loop J = I Loop
'avec boucle For Next '' For I = 1 To UBound(Tbl) - 1 '' For J = I + 1 To UBound(Tbl) '' J = J + 1 '' 'sens du tri < ou > '' If Tbl(I, 1) < Tbl(J, 1) Then '' Tempo = Tbl(J, 1) '' Tbl(J, 1) = Tbl(I, 1) '' Tbl(I, 1) = Tempo '' End If '' Next J '' Next I
End Function
Hervé.
"Tatanka" a écrit dans le message de news:
Bonsoir,
J'essaie vainement de traduire ce pseudo code en VBA. Où erre-je ?
TANTQUE(k>1 et Tab[k-1]>Tampon) Tab[k] <--- Tab[k-1] k <--- k-1 FINTANTQUE
Tab[k] <--- Tampon FINPOUR
FIN
Sub Trier1() Dim table(1 To 5, 1 To 1) table(1, 1) = 5 table(2, 1) = 6 table(3, 1) = 1 table(4, 1) = 8 table(5, 1) = 2 For i = 2 To 5 tampon = table(i, 1) k = i Do While (k > 1 And table(k - 1, 1) > tampon) table(k, 1) = table(k - 1, 1) k = k - 1 Loop table(k, 1) = tampon Next i Range("A1:A5").Value = table End Sub
Merci Serge
Bonjour,
Peut être ceci ? A adapter si ce n'est pas le cas :
Sub test()
Dim Tbl()
Dim I As Integer
Dim table(1 To 5, 1 To 1)
table(1, 1) = 5
table(2, 1) = 6
table(3, 1) = 1
table(4, 1) = 8
table(5, 1) = 2
Tbl = Tri(table)
For I = 1 To UBound(table)
Debug.Print table(I, 1)
Next I
End Sub
Function Tri(Tbl()) As Variant()
Dim Tempo
Dim I As Integer
Dim J As Integer
'éffectue un tri décroissant "<"
'pour un tri croissant ">"
'avec boucle Do Loop
Do While I < UBound(Tbl) - 1
I = I + 1
Do While J < UBound(Tbl)
J = J + 1
'sens du tri < ou >
If Tbl(I, 1) < Tbl(J, 1) Then
Tempo = Tbl(J, 1)
Tbl(J, 1) = Tbl(I, 1)
Tbl(I, 1) = Tempo
End If
Loop
J = I
Loop
'avec boucle For Next
'' For I = 1 To UBound(Tbl) - 1
'' For J = I + 1 To UBound(Tbl)
'' J = J + 1
'' 'sens du tri < ou >
'' If Tbl(I, 1) < Tbl(J, 1) Then
'' Tempo = Tbl(J, 1)
'' Tbl(J, 1) = Tbl(I, 1)
'' Tbl(I, 1) = Tempo
'' End If
'' Next J
'' Next I
End Function
Hervé.
"Tatanka" <garnote3ENLEVER@videotron.ca> a écrit dans le message de
news:O2iex0nsKHA.5356@TK2MSFTNGP02.phx.gbl...
Bonsoir,
J'essaie vainement de traduire ce pseudo code en VBA.
Où erre-je ?
TANTQUE(k>1 et Tab[k-1]>Tampon)
Tab[k] <--- Tab[k-1]
k <--- k-1
FINTANTQUE
Tab[k] <--- Tampon
FINPOUR
FIN
Sub Trier1()
Dim table(1 To 5, 1 To 1)
table(1, 1) = 5
table(2, 1) = 6
table(3, 1) = 1
table(4, 1) = 8
table(5, 1) = 2
For i = 2 To 5
tampon = table(i, 1)
k = i
Do While (k > 1 And table(k - 1, 1) > tampon)
table(k, 1) = table(k - 1, 1)
k = k - 1
Loop
table(k, 1) = tampon
Next i
Range("A1:A5").Value = table
End Sub
Bonjour, Peut être ceci ? A adapter si ce n'est pas le cas :
Sub test()
Dim Tbl() Dim I As Integer
Dim table(1 To 5, 1 To 1) table(1, 1) = 5 table(2, 1) = 6 table(3, 1) = 1 table(4, 1) = 8 table(5, 1) = 2
Tbl = Tri(table)
For I = 1 To UBound(table) Debug.Print table(I, 1) Next I
End Sub
Function Tri(Tbl()) As Variant() Dim Tempo Dim I As Integer Dim J As Integer
'éffectue un tri décroissant "<" 'pour un tri croissant ">"
'avec boucle Do Loop Do While I < UBound(Tbl) - 1 I = I + 1 Do While J < UBound(Tbl) J = J + 1 'sens du tri < ou > If Tbl(I, 1) < Tbl(J, 1) Then Tempo = Tbl(J, 1) Tbl(J, 1) = Tbl(I, 1) Tbl(I, 1) = Tempo End If Loop J = I Loop
'avec boucle For Next '' For I = 1 To UBound(Tbl) - 1 '' For J = I + 1 To UBound(Tbl) '' J = J + 1 '' 'sens du tri < ou > '' If Tbl(I, 1) < Tbl(J, 1) Then '' Tempo = Tbl(J, 1) '' Tbl(J, 1) = Tbl(I, 1) '' Tbl(I, 1) = Tempo '' End If '' Next J '' Next I
End Function
Hervé.
"Tatanka" a écrit dans le message de news:
Bonsoir,
J'essaie vainement de traduire ce pseudo code en VBA. Où erre-je ?
TANTQUE(k>1 et Tab[k-1]>Tampon) Tab[k] <--- Tab[k-1] k <--- k-1 FINTANTQUE
Tab[k] <--- Tampon FINPOUR
FIN
Sub Trier1() Dim table(1 To 5, 1 To 1) table(1, 1) = 5 table(2, 1) = 6 table(3, 1) = 1 table(4, 1) = 8 table(5, 1) = 2 For i = 2 To 5 tampon = table(i, 1) k = i Do While (k > 1 And table(k - 1, 1) > tampon) table(k, 1) = table(k - 1, 1) k = k - 1 Loop table(k, 1) = tampon Next i Range("A1:A5").Value = table End Sub
Merci Serge
Tatanka
Salut Charabeuh, db et Hervé,
Merci pour vos précieux conseils. Pour le moment je m'amuse avec ça :
Sub Trier_Sur_Une_Colonne() 'Selection : Plage de cellules adjacentes sur une colonne 'et contenant des valeurs numériques. 'La macro entre les valeurs triées dans la colonne 'juste à droite de la sélection. Dim table ordre = Application.InputBox _ (Prompt:="Entrez 1 pour croissant ou 2 pour décroissant.", _ Title:="Ordre du tri sur une colonne", Type:=1) If Not (ordre = 1 Or ordre = 2) Then Exit Sub table = Selection If Selection.Columns.Count <> 1 Then Exit Sub n = UBound(table, 1) For i = 2 To n tampon = table(i, 1) k = i Do While k > 1 Select Case ordre Case 1: If table(k - 1, 1) < tampon Then Exit Do Case 2: If table(k - 1, 1) > tampon Then Exit Do End Select table(k, 1) = table(k - 1, 1) k = k - 1 Loop table(k, 1) = tampon Next i Selection.Offset(0, 1).Value = table End Sub
Sub Trier_Sur_Une_Ligne() 'Selection : Plage de cellules adjacentes sur une ligne 'et contenant des valeurs numériques. 'La macro entre les valeurs triées dans la ligne 'juste en-dessous de la sélection. Dim table ordre = Application.InputBox _ (Prompt:="Entrez 1 pour croissant ou 2 pour décroissant.", _ Title:="Ordre du tri sur une ligne", Type:=1) If Not (ordre = 1 Or ordre = 2) Then Exit Sub table = Selection If Selection.Rows.Count <> 1 Then Exit Sub n = UBound(table, 2) For i = 2 To n tampon = table(1, i) k = i Do While k > 1 Select Case ordre Case 1: If table(1, k - 1) < tampon Then Exit Do Case 2: If table(1, k - 1) > tampon Then Exit Do End Select table(1, k) = table(1, k - 1) k = k - 1 Loop table(1, k) = tampon Next i Selection.Offset(1, 0).Value = table End Sub
Serge
Salut Charabeuh, db et Hervé,
Merci pour vos précieux conseils.
Pour le moment je m'amuse avec ça :
Sub Trier_Sur_Une_Colonne()
'Selection : Plage de cellules adjacentes sur une colonne
'et contenant des valeurs numériques.
'La macro entre les valeurs triées dans la colonne
'juste à droite de la sélection.
Dim table
ordre = Application.InputBox _
(Prompt:="Entrez 1 pour croissant ou 2 pour décroissant.", _
Title:="Ordre du tri sur une colonne", Type:=1)
If Not (ordre = 1 Or ordre = 2) Then Exit Sub
table = Selection
If Selection.Columns.Count <> 1 Then Exit Sub
n = UBound(table, 1)
For i = 2 To n
tampon = table(i, 1)
k = i
Do While k > 1
Select Case ordre
Case 1: If table(k - 1, 1) < tampon Then Exit Do
Case 2: If table(k - 1, 1) > tampon Then Exit Do
End Select
table(k, 1) = table(k - 1, 1)
k = k - 1
Loop
table(k, 1) = tampon
Next i
Selection.Offset(0, 1).Value = table
End Sub
Sub Trier_Sur_Une_Ligne()
'Selection : Plage de cellules adjacentes sur une ligne
'et contenant des valeurs numériques.
'La macro entre les valeurs triées dans la ligne
'juste en-dessous de la sélection.
Dim table
ordre = Application.InputBox _
(Prompt:="Entrez 1 pour croissant ou 2 pour décroissant.", _
Title:="Ordre du tri sur une ligne", Type:=1)
If Not (ordre = 1 Or ordre = 2) Then Exit Sub
table = Selection
If Selection.Rows.Count <> 1 Then Exit Sub
n = UBound(table, 2)
For i = 2 To n
tampon = table(1, i)
k = i
Do While k > 1
Select Case ordre
Case 1: If table(1, k - 1) < tampon Then Exit Do
Case 2: If table(1, k - 1) > tampon Then Exit Do
End Select
table(1, k) = table(1, k - 1)
k = k - 1
Loop
table(1, k) = tampon
Next i
Selection.Offset(1, 0).Value = table
End Sub
Merci pour vos précieux conseils. Pour le moment je m'amuse avec ça :
Sub Trier_Sur_Une_Colonne() 'Selection : Plage de cellules adjacentes sur une colonne 'et contenant des valeurs numériques. 'La macro entre les valeurs triées dans la colonne 'juste à droite de la sélection. Dim table ordre = Application.InputBox _ (Prompt:="Entrez 1 pour croissant ou 2 pour décroissant.", _ Title:="Ordre du tri sur une colonne", Type:=1) If Not (ordre = 1 Or ordre = 2) Then Exit Sub table = Selection If Selection.Columns.Count <> 1 Then Exit Sub n = UBound(table, 1) For i = 2 To n tampon = table(i, 1) k = i Do While k > 1 Select Case ordre Case 1: If table(k - 1, 1) < tampon Then Exit Do Case 2: If table(k - 1, 1) > tampon Then Exit Do End Select table(k, 1) = table(k - 1, 1) k = k - 1 Loop table(k, 1) = tampon Next i Selection.Offset(0, 1).Value = table End Sub
Sub Trier_Sur_Une_Ligne() 'Selection : Plage de cellules adjacentes sur une ligne 'et contenant des valeurs numériques. 'La macro entre les valeurs triées dans la ligne 'juste en-dessous de la sélection. Dim table ordre = Application.InputBox _ (Prompt:="Entrez 1 pour croissant ou 2 pour décroissant.", _ Title:="Ordre du tri sur une ligne", Type:=1) If Not (ordre = 1 Or ordre = 2) Then Exit Sub table = Selection If Selection.Rows.Count <> 1 Then Exit Sub n = UBound(table, 2) For i = 2 To n tampon = table(1, i) k = i Do While k > 1 Select Case ordre Case 1: If table(1, k - 1) < tampon Then Exit Do Case 2: If table(1, k - 1) > tampon Then Exit Do End Select table(1, k) = table(1, k - 1) k = k - 1 Loop table(1, k) = tampon Next i Selection.Offset(1, 0).Value = table End Sub
Serge
Hervé
Bonjour Serge,
Pour le moment je m'amuse avec ça :
Qu'importe le flacon pourvu qu'on est l'ivresse ;o)
Hervé
"Tatanka" a écrit dans le message de news:
Salut Charabeuh, db et Hervé,
Merci pour vos précieux conseils. Pour le moment je m'amuse avec ça :
Sub Trier_Sur_Une_Colonne() 'Selection : Plage de cellules adjacentes sur une colonne 'et contenant des valeurs numériques. 'La macro entre les valeurs triées dans la colonne 'juste à droite de la sélection. Dim table ordre = Application.InputBox _ (Prompt:="Entrez 1 pour croissant ou 2 pour décroissant.", _ Title:="Ordre du tri sur une colonne", Type:=1) If Not (ordre = 1 Or ordre = 2) Then Exit Sub table = Selection If Selection.Columns.Count <> 1 Then Exit Sub n = UBound(table, 1) For i = 2 To n tampon = table(i, 1) k = i Do While k > 1 Select Case ordre Case 1: If table(k - 1, 1) < tampon Then Exit Do Case 2: If table(k - 1, 1) > tampon Then Exit Do End Select table(k, 1) = table(k - 1, 1) k = k - 1 Loop table(k, 1) = tampon Next i Selection.Offset(0, 1).Value = table End Sub
Sub Trier_Sur_Une_Ligne() 'Selection : Plage de cellules adjacentes sur une ligne 'et contenant des valeurs numériques. 'La macro entre les valeurs triées dans la ligne 'juste en-dessous de la sélection. Dim table ordre = Application.InputBox _ (Prompt:="Entrez 1 pour croissant ou 2 pour décroissant.", _ Title:="Ordre du tri sur une ligne", Type:=1) If Not (ordre = 1 Or ordre = 2) Then Exit Sub table = Selection If Selection.Rows.Count <> 1 Then Exit Sub n = UBound(table, 2) For i = 2 To n tampon = table(1, i) k = i Do While k > 1 Select Case ordre Case 1: If table(1, k - 1) < tampon Then Exit Do Case 2: If table(1, k - 1) > tampon Then Exit Do End Select table(1, k) = table(1, k - 1) k = k - 1 Loop table(1, k) = tampon Next i Selection.Offset(1, 0).Value = table End Sub
Serge
Bonjour Serge,
Pour le moment je m'amuse avec ça :
Qu'importe le flacon pourvu qu'on est l'ivresse ;o)
Hervé
"Tatanka" <garnote3ENLEVER@videotron.ca> a écrit dans le message de
news:ucToJw0sKHA.1344@TK2MSFTNGP02.phx.gbl...
Salut Charabeuh, db et Hervé,
Merci pour vos précieux conseils.
Pour le moment je m'amuse avec ça :
Sub Trier_Sur_Une_Colonne()
'Selection : Plage de cellules adjacentes sur une colonne
'et contenant des valeurs numériques.
'La macro entre les valeurs triées dans la colonne
'juste à droite de la sélection.
Dim table
ordre = Application.InputBox _
(Prompt:="Entrez 1 pour croissant ou 2 pour décroissant.", _
Title:="Ordre du tri sur une colonne", Type:=1)
If Not (ordre = 1 Or ordre = 2) Then Exit Sub
table = Selection
If Selection.Columns.Count <> 1 Then Exit Sub
n = UBound(table, 1)
For i = 2 To n
tampon = table(i, 1)
k = i
Do While k > 1
Select Case ordre
Case 1: If table(k - 1, 1) < tampon Then Exit Do
Case 2: If table(k - 1, 1) > tampon Then Exit Do
End Select
table(k, 1) = table(k - 1, 1)
k = k - 1
Loop
table(k, 1) = tampon
Next i
Selection.Offset(0, 1).Value = table
End Sub
Sub Trier_Sur_Une_Ligne()
'Selection : Plage de cellules adjacentes sur une ligne
'et contenant des valeurs numériques.
'La macro entre les valeurs triées dans la ligne
'juste en-dessous de la sélection.
Dim table
ordre = Application.InputBox _
(Prompt:="Entrez 1 pour croissant ou 2 pour décroissant.", _
Title:="Ordre du tri sur une ligne", Type:=1)
If Not (ordre = 1 Or ordre = 2) Then Exit Sub
table = Selection
If Selection.Rows.Count <> 1 Then Exit Sub
n = UBound(table, 2)
For i = 2 To n
tampon = table(1, i)
k = i
Do While k > 1
Select Case ordre
Case 1: If table(1, k - 1) < tampon Then Exit Do
Case 2: If table(1, k - 1) > tampon Then Exit Do
End Select
table(1, k) = table(1, k - 1)
k = k - 1
Loop
table(1, k) = tampon
Next i
Selection.Offset(1, 0).Value = table
End Sub
Qu'importe le flacon pourvu qu'on est l'ivresse ;o)
Hervé
"Tatanka" a écrit dans le message de news:
Salut Charabeuh, db et Hervé,
Merci pour vos précieux conseils. Pour le moment je m'amuse avec ça :
Sub Trier_Sur_Une_Colonne() 'Selection : Plage de cellules adjacentes sur une colonne 'et contenant des valeurs numériques. 'La macro entre les valeurs triées dans la colonne 'juste à droite de la sélection. Dim table ordre = Application.InputBox _ (Prompt:="Entrez 1 pour croissant ou 2 pour décroissant.", _ Title:="Ordre du tri sur une colonne", Type:=1) If Not (ordre = 1 Or ordre = 2) Then Exit Sub table = Selection If Selection.Columns.Count <> 1 Then Exit Sub n = UBound(table, 1) For i = 2 To n tampon = table(i, 1) k = i Do While k > 1 Select Case ordre Case 1: If table(k - 1, 1) < tampon Then Exit Do Case 2: If table(k - 1, 1) > tampon Then Exit Do End Select table(k, 1) = table(k - 1, 1) k = k - 1 Loop table(k, 1) = tampon Next i Selection.Offset(0, 1).Value = table End Sub
Sub Trier_Sur_Une_Ligne() 'Selection : Plage de cellules adjacentes sur une ligne 'et contenant des valeurs numériques. 'La macro entre les valeurs triées dans la ligne 'juste en-dessous de la sélection. Dim table ordre = Application.InputBox _ (Prompt:="Entrez 1 pour croissant ou 2 pour décroissant.", _ Title:="Ordre du tri sur une ligne", Type:=1) If Not (ordre = 1 Or ordre = 2) Then Exit Sub table = Selection If Selection.Rows.Count <> 1 Then Exit Sub n = UBound(table, 2) For i = 2 To n tampon = table(1, i) k = i Do While k > 1 Select Case ordre Case 1: If table(1, k - 1) < tampon Then Exit Do Case 2: If table(1, k - 1) > tampon Then Exit Do End Select table(1, k) = table(1, k - 1) k = k - 1 Loop table(1, k) = tampon Next i Selection.Offset(1, 0).Value = table End Sub