OVH Cloud OVH Cloud

tri défectueux

3 réponses
Avatar
joel.andre
Bonsoir,

Il agit de trier près de 4500 lignes d'un tableau sur la base des valeurs
d'une colonne, de la plus petite (0) à la plus grande (16 000 000).
Sous Excel 2000, j'ai bien réalisé une "moulinette" en vba qui fonctionne
"correctement" jusqu'à 3500 lignes mais qui perd les pédales au delà, car
les lignes ne sont plus triées correctement.
Le tableau comporte 9 colonnes.
Les valeurs sensibles sont en colonne 3. Ce sont celles là qui doivent
servir à la réorganisation du tableau.
Chaque ligne doit conserver ses données.

Je ne trouve pas de solution.
Merci pour vos conseils.

Voilà la "moulinette" qui est dans une macro :

For Compteur = PositionDépart To PositionDépart + Order - 2
Tampon = Cells(PositionDépart + DécalageLigne, 3)

For Position = PositionDépart + DécalageLigne To PositionDépart +
Order - 2
If Tampon > Cells(Position + 1, 3) Then
Tampon = Cells(Position + 1, 3)
Numéroligne = Position + 1
End If
Next Position

Rows(Numéroligne & ":" & Numéroligne).Select
Selection.Cut
Rows(Compteur & ":" & Compteur).Select
Selection.Insert Shift:=xlDown

DécalageLigne = DécalageLigne + 1
Next Compteur

3 réponses

Avatar
MichelB
Bonsoir joel.andré

Pourquoi ne pas trier les lignes avec l'option 'Trier', sans passer par VBA
?

L'idéal serait d'avoir une ligne (en ligne 1) Noms des champs nommant chaque
colonne,
puis se placer dans la base et faire 'Trier'
On indique dans la boite de dialogue le nom entré dans la colonne 3
et le tri se fait sans problème

--
Salut
Michel ---- ;o)
Enlever _nospam pour me répondre


"joel.andre" a écrit dans le message de news:
418fc11f$0$18885$
Bonsoir,

Il agit de trier près de 4500 lignes d'un tableau sur la base des valeurs
d'une colonne, de la plus petite (0) à la plus grande (16 000 000).
Sous Excel 2000, j'ai bien réalisé une "moulinette" en vba qui fonctionne
"correctement" jusqu'à 3500 lignes mais qui perd les pédales au delà, car
les lignes ne sont plus triées correctement.
Le tableau comporte 9 colonnes.
Les valeurs sensibles sont en colonne 3. Ce sont celles là qui doivent
servir à la réorganisation du tableau.
Chaque ligne doit conserver ses données.

Je ne trouve pas de solution.
Merci pour vos conseils.

Voilà la "moulinette" qui est dans une macro :

For Compteur = PositionDépart To PositionDépart + Order - 2
Tampon = Cells(PositionDépart + DécalageLigne, 3)

For Position = PositionDépart + DécalageLigne To PositionDépart +
Order - 2
If Tampon > Cells(Position + 1, 3) Then
Tampon = Cells(Position + 1, 3)
Numéroligne = Position + 1
End If
Next Position

Rows(Numéroligne & ":" & Numéroligne).Select
Selection.Cut
Rows(Compteur & ":" & Compteur).Select
Selection.Insert Shift:=xlDown

DécalageLigne = DécalageLigne + 1
Next Compteur




Avatar
JpPradier
Bonsoir joel

Tu selectionnes ton tableau, puis Données/Trier/Selon colonne 3 et voilà !
Si tu tiens absolument au VBA, meme manip avec l'enregistreur de macro.

j-p
Avatar
GD
Bonsour ®joel.andre ,
1-supprimer toutes les lignes vides et colonnes vides dans la plage à trier
2-supprimer éventuellement les cellules fusionnées
3-s'assurer que les valeurs à trier sont de meme type : exclusivement
numerique ou exclusivement alphanumérique
4- s'il y a des doublons, prévoir un tri secondaire sur une autre colonne

sans macro ni VBA, Excel peut trier allégrement les +65000 lignes d'une
colonne....

@+

wrote:
Bonsoir,

Il agit de trier près de 4500 lignes d'un tableau sur la base des
valeurs d'une colonne, de la plus petite (0) à la plus grande (16 000
000).
Sous Excel 2000, j'ai bien réalisé une "moulinette" en vba qui
fonctionne "correctement" jusqu'à 3500 lignes mais qui perd les
pédales au delà, car les lignes ne sont plus triées correctement.
Le tableau comporte 9 colonnes.
Les valeurs sensibles sont en colonne 3. Ce sont celles là qui doivent
servir à la réorganisation du tableau.
Chaque ligne doit conserver ses données.

Je ne trouve pas de solution.
Merci pour vos conseils.

Voilà la "moulinette" qui est dans une macro :

For Compteur = PositionDépart To PositionDépart + Order - 2
Tampon = Cells(PositionDépart + DécalageLigne, 3)

For Position = PositionDépart + DécalageLigne To PositionDépart +
Order - 2
If Tampon > Cells(Position + 1, 3) Then
Tampon = Cells(Position + 1, 3)
Numéroligne = Position + 1
End If
Next Position

Rows(Numéroligne & ":" & Numéroligne).Select
Selection.Cut
Rows(Compteur & ":" & Compteur).Select
Selection.Insert Shift:=xlDown

DécalageLigne = DécalageLigne + 1
Next Compteur