Trier des cellules non vide (avec une maro)

gagnonpeter

XLDnaute Junior
Bonjour!
J'ai crée des boutons dans lequel est rattaché une macro qui me permet de faire des tris. Mon problème est que quand ma macro fait son tri, souvent je me ramasse avec des lignes blanche en haut de ma plage de tri. Je crois que cela est causé par le fait que le tri est en ordre croissant et que comme j'ai parfois des lignes vides, elles sont pris en compte comme un 0 donc elles remontent dans le haut de ma plage de tri. Comment remédier à ca? Un code VBA?

Merci de votre aide!
 

Jacou

XLDnaute Impliqué
Re : Trier des cellules non vide (avec une maro)

Bonjour gagnonpeter,
je suggère de compléter la ou les macro qui font le tri par la suppression des lignes blanches.
sans fichier exemple anonymisé, il est difficile de se faire une meilleure idée du souci.
Bonne journée
 

job75

XLDnaute Barbatruc
Re : Trier des cellules non vide (avec une maro)

Bonjour gagnonpeter, Jacou,

Les lignes "vides" contiennent certainement des textes vides "" ou des espaces.

Pour que ces lignes soient placées en bas appeler cette macro à la fin de la macro de tri :

Code:
Sub LignesVidesEnBas()
Application.ScreenUpdating = False
With ActiveSheet.UsedRange
  With .Resize(, .Columns.Count + 1)
    With .Columns(.Columns.Count)
      .FormulaR1C1 = "=SIGN(SUMPRODUCT(N(TRIM(RC1:RC[-1])<>"""")))"
      .Value = .Value 'supprime les formules pour accélérer
    End With
    .Sort .Columns(.Columns.Count), xlDescending 'tri décroissant
    .Columns(.Columns.Count).ClearContents 'vide la colonne auxiliaire
  End With
End With
End Sub
A+
 

gagnonpeter

XLDnaute Junior
Re : Trier des cellules non vide (avec une maro)

Ca ne fonctionne pas. Je vous joint un fichier pour mieux comprendre. Si vous cliquez sur les bouton a droite, vous verrez que parfois mes données affichent dans le bas de ma page. Comment faire pour qu'elle restent toujours dans le haut de ma page?
 

Pièces jointes

  • TEST.xlsm
    61.8 KB · Affichages: 44
  • TEST.xlsm
    61.8 KB · Affichages: 47

job75

XLDnaute Barbatruc
Re : Trier des cellules non vide (avec une maro)

Re,

Ca ne fonctionne pas.

Bah vous devez être bien au courant puisque vous avez masqué les valeurs zéros.

En effet dans les options d'affichage de la feuille la case "Afficher un zéro dans les cellules qui ont une valeur nulle" a été décochée.

Il n'est donc pas question de textes vides mais de valeurs nulles.

Et il ne faut pas compter la colonne A.

Alors modifions la macro précédente :

Code:
Sub LignesNullesEnBas()
Application.ScreenUpdating = False
With ActiveSheet.UsedRange
  With .Resize(, .Columns.Count + 1)
    With .Columns(.Columns.Count)
      .FormulaR1C1 = "=SIGN(SUMPRODUCT(N(RC2:RC[-1]<>0)))"
      .Value = .Value 'supprime les formules pour accélérer
    End With
    .Sort .Columns(.Columns.Count), xlDescending 'tri décroissant
    .Columns(.Columns.Count).ClearContents 'vide la colonne auxiliaire
  End With
End With
End Sub
A+
 

gagnonpeter

XLDnaute Junior
Re : Trier des cellules non vide (avec une maro)

Je n'ai pas réussis à bien faire fonctionner la macro. J'ai refait celles qui étaient déjà sur le fichier (c'était un vieux fichier que j'ai repris) et il ne reste qu'à y ajouter la votre. Croyez vous que vous pouvez regarder à ca?
 

Pièces jointes

  • TEST1.xlsm
    63.7 KB · Affichages: 32
  • TEST1.xlsm
    63.7 KB · Affichages: 37

job75

XLDnaute Barbatruc
Re : Trier des cellules non vide (avec une maro)

Bonjour gagnonpeter,

Bon maintenant vous avez mis des textes en dehors du tableau, en colonne P...

Alors il ne faut pas utiliser ActiveSheet.UsedRange mais [A1].CurrentRegion.

Fichier joint.

Edit : attention vos boutons sont doubles ! Il faut affecter une macro à chacun !

A+
 

Pièces jointes

  • TEST(1).xlsm
    65.4 KB · Affichages: 32
  • TEST(1).xlsm
    65.4 KB · Affichages: 37
Dernière édition:

job75

XLDnaute Barbatruc
Re : Trier des cellules non vide (avec une maro)

Re,

Un truc un peu difficile à comprendre.

On peut n'affecter qu'une seule macro à chacun des boutons de tri et à son double :

Code:
Sub Tri()
If IsError(Application.Caller) Then Exit Sub 'sécurité
Dim nobjet, ncol, i, ordre
nobjet = Array(5, 6, 2, 3, 8, 9, 11, 12, 15, 16) 'numéros dans les noms des objets
ncol = Array(8, 8, 5, 5, 6, 6, 2, 2, 9, 9) 'numéros des colonnes de tri
i = Application.Match(Val(Split(Application.Caller)(1)), nobjet, 0)
ordre = IIf(ncol(i - 1) = 5, xlDescending, xlAscending)
Application.ScreenUpdating = False
[A1].CurrentRegion.Sort Columns(ncol(i - 1)), ordre, Header:=xlYes
LignesNullesEnBas
End Sub
Fichier (2).

A+
 

Pièces jointes

  • TEST(2).xlsm
    66.2 KB · Affichages: 46
  • TEST(2).xlsm
    66.2 KB · Affichages: 45

Discussions similaires

Réponses
12
Affichages
299
Réponses
4
Affichages
642

Statistiques des forums

Discussions
312 489
Messages
2 088 855
Membres
103 979
dernier inscrit
bderradji