code tri par date ?

jool

XLDnaute Junior
bonsoir,

j'ai un usf qui me remplis un tableau (colonne A, B, C) et à chaque fois que je renseigne mon usf et que je clique sur commandbutton1, il remplit mon tableau en allant à la ligne du dessous. exemple pour la 1ere fois que je clique il remplit A2 B2 et C2, pour la 2eme fois A3 B3 C3...

En colonne A se sont des dates, et elles ne seront pas insérer par odre croissant. Je souhaiterais quand cliquant sur ce bouton, elles se rangent par ordre croissant.

voici les codes actuels pour bouton1 :

Private Sub CommandButton1_Click()
Dim Sh As Worksheet
On Error Resume Next
Set Sh = Sheets(ComboBox1.Value)
If Err Then MsgBox "Feuille introuvable", 48: ComboBox1.DropDown: Exit Sub 'en cas d'entrée manuelle incorrecte
On Error GoTo 0
Sh.Visible = True 'en cas de feuille masquée
Sh.Activate
'--------------suite du code de validation
Dim DLl&, ii&
DLl = ActiveSheet.[A65536].End(xlUp).Offset(1).Row
For ii = 1 To 3
ActiveSheet.Cells(DLl, ii) = Me.Controls("TextBox" & ii)
Next
Unload UserForm4
UserForm4.Show
End Sub

que doit-il etre ajouter ?

merci
 

PMO2

XLDnaute Accro
Re : code tri par date ?

Bonjour,

A tout hasard, essayez le code suivant

Code:
Private Sub CommandButton1_Click()
Dim Sh As Worksheet
On Error Resume Next
Set Sh = Sheets(ComboBox1.Value)
If Err Then MsgBox "Feuille introuvable", 48: ComboBox1.DropDown: Exit Sub 'en cas d'entrée manuelle incorrecte
On Error GoTo 0
Sh.Visible = True 'en cas de feuille masquée
Sh.Activate
'--------------suite du code de validation
Dim DLl&, ii&
DLl = ActiveSheet.[A65536].End(xlUp).Offset(1).Row
For ii = 1 To 3
ActiveSheet.Cells(DLl, ii) = Me.Controls("TextBox" & ii)
Next
'########
Dim R As Range
Set R = Sh.[a1].CurrentRegion
R.Sort Key1:=Sh.[a1], Order1:=xlAscending, Header:=xlYes 'xlYes si Titres (sinon xlNo)
'########
Unload UserForm4
UserForm4.Show
End Sub

Cordialement.

PMO
Patrick Morange
 

jool

XLDnaute Junior
Re : code tri par date ?

Bonjour,

Merci, ca fonctionne bien mais il y a un soucis car en colonne A, je rentre des dates. Ca trie seulement en fonction des jours. ex : 21/04/2009 se place avant 22/03/2009.

j'ai essayé de mettre la colonne A en format Date, mais sans resultat !

Comment faire ?
 

13GIBE59

XLDnaute Accro
Re : code tri par date ?

Bonjour, Jool.

Je ne connais pas le code exact que tu cherches, mais j'ai eu le même problème que toi que j'ai résolu en utilisant l'enregistreur de macro.
Dans mon fichier, les dates sont en colonne C, le fichier va jusqu'en colonne L et ça donne :

Code:
  'Tri par date
    Range([C9], [C65536].End(xlUp)).Select
    Range([C8], [L65536].End(xlUp)).Sort Key1:=Range("C9"), Order1:=xlAscending, Header:= _
        xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal

J'espère que cela te conviendra.

JB
 

jeanpierre

Nous a quitté
Repose en paix
Re : code tri par date ?

Bonjour jool, PMO2, 13GIBE59, le forum,

Peut-etre à côté, mais une idée.

Tes dates doivent être en Format Texte, auquel cas tu saisies 1 dans une cellule vide, tu en fais un Copier et après selection de ta colonne A, un Collage spécial et tu coches Multiplication. Te reste à reformater ta colonne en Date jj/mm/aaaa.

Bon 1er mai.

Jean-Pierre
 

pierrejean

XLDnaute Barbatruc
Re : code tri par date ?

bonjour a tous

A tester

Code:
For ii = 1 To 3
if ii=1 then
 ActiveSheet.Cells(DLl, ii) = Cdate(Me.Controls("TextBox" & ii))
else
 ActiveSheet.Cells(DLl, ii) = Me.Controls("TextBox" & ii)
end if
Next

dans le code de PMO2
 

jool

XLDnaute Junior
Re : code tri par date ?

Merci à tous, voici le code et une dernière question :

Dim DLl&, ii&
DLl = ActiveSheet.[A65536].End(xlUp).Offset(1).Row
For ii = 1 To 3
ActiveSheet.Cells(DLl, ii) = Me.Controls("TextBox" & ii)
Next
For ii = 1 To 3
If ii = 1 Then
ActiveSheet.Cells(DLl, ii) = CDate(Me.Controls("TextBox" & ii))
End If
'########
Dim R As Range
Set R = Sh.[a1].CurrentRegion
R.Sort Key1:=Sh.[a1], Order1:=xlAscending, Header:=xlYes 'xlYes si Titres (sinon xlNo)
'########
Next

quoi modifier pour ne trier que les colonnes A, B, C, car en D, j'ai des formules ?

Encore MERCI.
 

nolich

XLDnaute Occasionnel
Re : code tri par date ?

Bonjour jool, PMO2, 13GIBE59, Jean-Pierre et Pierre-Jean ;), bonjour à toutes et à tous :)

jool, je ne vais rien te proposer de plus, mais simplement faire une synthèse de ce qui t'a été proposé :)

Code:
[COLOR="Blue"]Private Sub[/COLOR] CommandButton1_Click()
[COLOR="Green"]'[/COLOR]
[COLOR="blue"]Dim[/COLOR] Sh [COLOR="blue"]As[/COLOR] Worksheet
[COLOR="blue"]Dim[/COLOR] DLl&, ii&
[COLOR="green"]'[/COLOR]
  [COLOR="blue"]On Error Resume Next[/COLOR]
  
  [COLOR="blue"]Set[/COLOR] Sh = Sheets(ComboBox1.Value)
  
  [COLOR="blue"]If[/COLOR] Err [COLOR="blue"]Then[/COLOR]
    MsgBox "Feuille introuvable", 48
    ComboBox1.DropDown
    [COLOR="blue"]Exit Sub[/COLOR] [COLOR="Green"]'en cas d'entrée manuelle incorrecte[/COLOR]
  [COLOR="blue"]End If[/COLOR]
  
  [COLOR="blue"]On Error GoTo 0[/COLOR]
  
  Sh.Visible = [COLOR="blue"]True[/COLOR] [COLOR="green"]'en cas de feuille masquée[/COLOR]
  Sh.Activate
[COLOR="green"]  '--------------suite du code de validation
  ' Petite modif perso, il est plus long de
  ' lire ou d'écrire une propriété d'un objet,
  ' Offset(1) dans ton cas, que de faire une
  ' addition... Même si cela n'a pas trop
  ' d'influence dans ce code, les bonnes
  ' habitudes se prennent dès le début :)[/COLOR]
  DLl = ActiveSheet.[A65536].End(xlUp).Row + 1
  
[COLOR="green"]  '--------------------------------------------
  ' code de Pierre-Jean (pour les dates)
  '--------------------------------------------[/COLOR]
  [COLOR="blue"]For[/COLOR] ii = 1 [COLOR="blue"]To[/COLOR] 3
    [COLOR="blue"]If[/COLOR] ii = 1 [COLOR="blue"]Then[/COLOR]
     ActiveSheet.Cells(DLl, ii) = [COLOR="blue"]CDate[/COLOR](Me.Controls("TextBox" & ii))
    [COLOR="blue"]Else[/COLOR]
     ActiveSheet.Cells(DLl, ii) = Me.Controls("TextBox" & ii)
    [COLOR="blue"]End If[/COLOR]
  [COLOR="blue"]Next[/COLOR]
[COLOR="green"]  '--------------------------------------------
  ' Fin du code de Pierre-Jean
  '--------------------------------------------[/COLOR]
  
  [COLOR="green"]'--------------------------------------------
  ' à partir du code de PMO2
  '--------------------------------------------[/COLOR]
  [A1].CurrentRegion.Sort key1:=Sh.[A1]
  
  [COLOR="green"]'--------------------------------------------[/COLOR]
  
  Unload UserForm4
  UserForm4.Show
  
[COLOR="blue"]End Sub[/COLOR]

@+
 

nolich

XLDnaute Occasionnel
Re : code tri par date ?

Re,

Merci à tous, voici le code et une dernière question :

Dim DLl&, ii&
DLl = ActiveSheet.[A65536].End(xlUp).Offset(1).Row
For ii = 1 To 3
ActiveSheet.Cells(DLl, ii) = Me.Controls("TextBox" & ii)
Next
For ii = 1 To 3
If ii = 1 Then
ActiveSheet.Cells(DLl, ii) = CDate(Me.Controls("TextBox" & ii))
End If
'########
range([A1],cells(DLl,"C").Sort Key1:=Sh.[a1]
'########
Next

quoi modifier pour ne trier que les colonnes A, B, C, car en D, j'ai des formules ?

Encore MERCI.

@+
 

pierrejean

XLDnaute Barbatruc
Re : code tri par date ?

Re

Toujours a tester:

Code:
Dim DLl&, ii&
DLl = ActiveSheet.[A65536].End(xlUp).Offset(1).Row
For ii = 2 To 3
ActiveSheet.Cells(DLl, ii) = Me.Controls("TextBox" & ii)
Next
ActiveSheet.Cells(DLl,1) = CDate(Me.TextBox1))
End If
'########
Dim R As Range
Set R = Sh.range("A1:C" & DLl)
R.Sort Key1:=Sh.[a1], Order1:=xlAscending, Header:=xlYes 'xlYes si Titres (sinon xlNo)
'########
Next

Edit: Salut nolich
 

nolich

XLDnaute Occasionnel
Re : code tri par date ?

Re :)

Voudrais tu dire que la réponse à ma dernière question se trouve dans ta synthèse ?

Non, pas du tout, j'ai simplement pris ton code et je l'ai mis à jour avec les propositions de PMO2 et de Pierre-Jean ;)

Par contre, dans mon dernier post je t'ai fait une proposition pour ta dernière demande, mais Pierre-Jean m'a devancé :) :) :)

Ah ben non, c'est moi qui l'ai devancé :p Errare humanum est

@+ sur un autre fil ;) Acta est fabula
 
Dernière édition:

jool

XLDnaute Junior
Re : code tri par date ?

Merci, ça fonctionne très bien !

Dim DLl&, ii&
DLl = ActiveSheet.[A65536].End(xlUp).Offset(1).Row
For ii = 1 To 3
ActiveSheet.Cells(DLl, ii) = Me.Controls("TextBox" & ii)
Next
For ii = 1 To 3
If ii = 1 Then
ActiveSheet.Cells(DLl, ii) = CDate(Me.Controls("TextBox" & ii))
End If
'########
Dim R As Range
Set R = Sh.Range("A1:C" & DLl)
R.Sort Key1:=Sh.[a1], Order1:=xlAscending, Header:=xlYes 'xlYes si Titres (sinon xlNo)
'########
Next

Bon week end.
 

Statistiques des forums

Discussions
312 581
Messages
2 089 910
Membres
104 303
dernier inscrit
Patdec