Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Classement dans une userform

  • Initiateur de la discussion Initiateur de la discussion aziz
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

aziz

XLDnaute Occasionnel
Bonjour à tous sur le Forum,
je souhaiterai savoir pourquoi, lorsque je lance ma userform " classement par date "
j'ai ma ligne " Denis serge" le -143 ne ce place pas à la fin ??
merci pour votre aide.
 

Pièces jointes

Re : Classement dans une userform

Bonjour,

Les données en colonne I sont obtenues par une formule qui inclue parfois un espace.
Les données sont interprétées par excel tantôt en String, tantôt en numérique.
Il faut convertir explicitement ces données en numériques (voir ///ajout dans le code)
Code:
Private Sub UserForm_Activate()
Dim Te(), Ts(), Le&, Ls&, C&, TLgnFlt() As Long
'mettre mon user form en pleine écran
Me.StartUpPosition = 3
Me.Width = Application.Width
Me.Height = Application.Height
Me.Left = 0
Me.Top = 0
Te = Feuil1.[A3].Resize(Feuil1.[A60000].End(xlUp).Row - 2, 10).Value ' Affecte au tableau Te la valeur de la plage _
   commençant à la cellule A3 de la feuille Excel représenté par l'objet Worksheet nommé Feuil1 dans la rubrique _
   Microsoft Excel Objets du projet VBA, pour un nombre de ligne égal au numéro de la dernière cellule non vide au _
   dessus de la A60000 diminué de 2 (en effet 2 lignes sont sautées quand on commence à la 3), et pour 10 colonnes.
ReDim TLgnFlt(1 To UBound(Te))
For Le = 1 To UBound(Te)

  If IsNumeric(Te(Le, 10)) Then Te(Le, 10) = CDbl(Te(Le, 10)) '///ajout

   If Not IsEmpty(Te(Le, 10)) Then Ls = Ls + 1: TLgnFlt(Ls) = Le
   Next Le
ReDim Preserve TLgnFlt(1 To Ls)
ReDim Ts(1 To Ls, 1 To 5)
With New TableIndex
   .Réinit TLgnFlt
   While .Actif: .BInfA = Te(.B, 10) < Te(.A, 10): Wend ' Voir plus haut ce que content Te
  Ls = 0
   .Parcourir
   While .Actif: Le = .Suivant: Ls = Ls + 1: ' Voir module de classe TableIndex
     For C = 1 To 5: Ts(Ls, C) = Te(Le, Choose(C, 2, 3, 7, 9, 10))
      Next C: Wend: End With
Me.ListBox1.List = Ts
End Sub

Les données sont triées du plus petit au plus grand si bien que les nombres négatifs sont en tête de liste.
 
Re : Classement dans une userform

Bonjour
C'est probablement dû aux natures différentes des données stockées dans les cellules de cette colonne J: Il y en a deux de type Double et cinq de type String.
C'est du à la formule qui rend tantôt un nombre tantôt un texte.
Mettez donc simplement en J3 :
Code:
=SI(ESTNUM($I3);$I3-AUJOURDHUI();"")
Propagé vers le bas, et ça ira beaucoup mieux.

C'est aussi le bazar dans les colonne A et I d'ailleurs: la moitié sont des String l'autre des Date.
S'il viennent de TextBox utilisez CDate pour les convertir en dates.
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
303
Réponses
118
Affichages
3 K
Réponses
9
Affichages
224
Réponses
2
Affichages
165
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…