| Tri automatique par Novasim220 |
jeudi 22 décembre 2005 à 13:43:48 |
Slt,
En effet, puisque ta "variable" de "stockage" est la feuille, ce serait logique de trier sur la feuille. En VB, certains objets permettent un tri automatique lors de la méthode "Add", mais cette fonctionalité n'est pas reconduit dans les objets VBA. Toutefois il est simple par code vba d'effectuer un tri automatique de la feuille après chaque saisi. Lupin
|
Salut,
Une fois que tu as la structure, il te suffit d'effectuer les opérations une par une sous l'enregistreur de macro ! Voici un exemple de ce que cela pourraît être :
Private Sub cmd_Valide_Click()
Dim Position As String
Dim Limite As Long
Application.ScreenUpdating = False
Application.DisplayAlerts = False
If (Tbx_Col_B.Value <> "") Then
If (Tbx_Col_C.Value <> "") Then
If (Tbx_Col_D.Value <> "") Then
ActiveCell.Offset(0, 0).Value = (ActiveCell.Row - 1)
ActiveCell.Offset(0, 1).Value = Tbx_Col_B.Value
ActiveCell.Offset(0, 2).Value = Tbx_Col_C.Value
ActiveCell.Offset(0, 3).Value = Tbx_Col_D.Value
Tbx_Col_B.Value = ""
Tbx_Col_C.Value = ""
Tbx_Col_D.Value = ""
ActiveCell.Offset(1, 0).Select
End If
End If
End If
' Capture de la position de la cellule active pour repositionnement
Position = ActiveCell.Address
'Sélection de la feuille
Cells.Select
' Tri sur la colonne B & C & D
Selection.Sort Key1:=Range("B2"), Order1:=xlAscending, Key2:=Range("C2") _
, Order2:=xlAscending, Key3:=Range("D2"), Order3:=xlAscending, Header:= _
xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:= _
xlSortNormal
'Dernière cellule à inclure dans le tri
Limite = (Range("A2").End(xlDown).Row - 1)
Range("A2:A" & Limite + 1).Select
' Tri sur la colonne A
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
'Fin de tri, reprendre position courante
Range(Position).Select
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
'
Lupin |
re :
Limite = Range("A2").End(xlDown).Row
Range("A2:A" & Limite).Select
Lupin |
re :
et même le tri n'est nécessaire que s'il y a ajout !
Private Sub cmd_Valide_Click()
Dim Position As String
Dim Limite As Long
Application.ScreenUpdating = False
Application.DisplayAlerts = False
If (Tbx_Col_B.Value <> "") Then
If (Tbx_Col_C.Value <> "") Then
If (Tbx_Col_D.Value <> "") Then
ActiveCell.Offset(0, 0).Value = (ActiveCell.Row - 1)
ActiveCell.Offset(0, 1).Value = Tbx_Col_B.Value
ActiveCell.Offset(0, 2).Value = Tbx_Col_C.Value
ActiveCell.Offset(0, 3).Value = Tbx_Col_D.Value
Tbx_Col_B.Value = ""
Tbx_Col_C.Value = ""
Tbx_Col_D.Value = ""
ActiveCell.Offset(1, 0).Select
' Capture de la position de la cellule active
Position = ActiveCell.Address
Cells.Select
' Tri sur la colonne B & C & D
Selection.Sort Key1:=Range("B2"), Order1:=xlAscending, Key2:=Range("C2") _
, Order2:=xlAscending, Key3:=Range("D2"), Order3:=xlAscending, Header:= _
xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:= _
xlSortNormal
Limite = Range("A2").End(xlDown).Row
Range("A2:A" & Limite).Select
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range(Position).Select
End If
End If
End If
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
'
Lupin
|
Salut Lupin,
Comme promis je te tiens au courant de ton code pour le tri des données. Après adaptation à mon projet , je confirme que cela fonctionne comme j'avais besoin et tant remercie. Si je peux me permettre, je te soumet 2 petites "anomalies" 1°) les données sont écrites dans une feuille: si la cellule active n'est pas la bonne, les données sont écrites "n'importe ou" en fait à l'endroit ou se trouve la cellule active. Par contre si la cellule active est la bonne pas de problème!! 2°)Imaginons que je supprime une ligne dans la feuille Excel, lors de la saisie d'une nouvelle valeur le tri s'effectue correctement mais ne réutilise pas l'index de la valeur supprimée (colonne A) Vois tu une possibilité ??? Merci d'avance Novasim |
Salut Novasim,
Et que pense tu de ceci :
Private Sub cmd_Valide_Click()
Dim Position As String
Dim Limite As Long
Dim Feuille As String
Dim Flag As Boolean
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Feuille = ActiveSheet.Name
'Choix de la cellule active
Sheets("Feuil1").Select
Limite = (Range("A2").End(xlDown).Row + 1)
Range("A" & Limite).Select
Flag = VerifieIndex
If (Tbx_Col_B.Value <> "") Then
If (Tbx_Col_C.Value <> "") Then
If (Tbx_Col_D.Value <> "") Then
ActiveCell.Offset(0, 0).Value = (ActiveCell.Row - 1)
ActiveCell.Offset(0, 1).Value = Tbx_Col_B.Value
ActiveCell.Offset(0, 2).Value = Tbx_Col_C.Value
ActiveCell.Offset(0, 3).Value = Tbx_Col_D.Value
Tbx_Col_B.Value = ""
Tbx_Col_C.Value = ""
Tbx_Col_D.Value = ""
ActiveCell.Offset(1, 0).Select
' Capture de la position de la cellule active
Position = ActiveCell.Address
Cells.Select
' Tri sur la colonne B & C & D
Selection.Sort Key1:=Range("B2"), Order1:=xlAscending, Key2:=Range("C2") _
, Order2:=xlAscending, Key3:=Range("D2"), Order3:=xlAscending, Header:= _
xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:= _
xlSortNormal
Limite = Range("A2").End(xlDown).Row
Range("A2:A" & Limite).Select
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range(Position).Select
End If
End If
End If
Sheets(Feuille).Select
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
'
Private Function VerifieIndex() As Boolean
Dim Ligne As Long
Dim Resultat As Variant
Ligne = Range("A2").End(xlDown).Row
If (Range("A" & Ligne).Value <> Ligne - 1) Then
'Refaire index
Range("A2").Select
While (ActiveCell.Offset(0, 0).Value <> "")
ActiveCell.Offset(0, 0).Value = (ActiveCell.Row - 1)
ActiveCell.Offset(1, 0).Select
Wend
End If
End Function
Lupin |
re :
point 1 : Feuille = ActiveSheet.Name 'Choix de la cellule active Sheets("Feuil1").Select Limite = (Range("A2").End(xlDown).Row + 1) Range("A" & Limite).Select ... ... ... Sheets(Feuille).Select 'Retour à la feuille en cours point 2 : Flag = VerifieIndex Lupin |
Salut Lupin,
vais essayer tout çà dans la matinée et te tiens au courant Sympa de ta part, Merci encore @+ |
Salut Lupin,
je viens d'adapter ton nouveau code a mon projet et çà fonctionne à merveille . Je te remercie de t'être cassé la tête pour moi. Cependant je n'ai pas compris pour ton second post: point 1 : Feuille = ActiveSheet.Name 'Choix de la cellule active Sheets("Feuil1").Select Limite = (Range("A2").End(xlDown).Row + 1) Range("A" & Limite).Select ... ... ... Sheets(Feuille).Select 'Retour à la feuille en cours point 2 : Flag = VerifieIndex étant donné que tout fonctionne correctement ? que dois je faire avec ces nouvelles lignes ???? Sont elles nécessaires ???? Encore une fois et au risque de me répéter je te remercie vivement et si tu veux voir ce pour quoi tu as bossé ; pas de problème dis le moi et je t'enverrai mon classeur. Bon après midi(neigeux) a bientôt Novasim220 |
Slt,
Le second message n'était que pour faire ressortir les changements apportés en réponse aux 2 points que tu avais soulevé. Donc, la différence est le message 5 et 8 est reproduit au message 9. Je suis bien content que le tout réponde à tes attentes, c'est une façon de faire mais il y en a plusieurs autres. Même si je code sous VBA depuis 10 ans, je ne me qualifie pas d'expert, et je sais pertinament qu'il y a des façons de faire encore plus efficace. Lorsque j'ouvre mon bouquin de Walkenbach, je trouve toujours des techniques a appronfondir. Joyeuses Fêtes ! Amicalement Lupin |
Joyeuses fêtes à toi aussi;
Expert ou pas,un grand merci pour ton aide. Novasim |
| 11/06 13h31 | Tri automatique (Excel) | Bureautique | 12/06 12h05 | 3 |
| 15/01 19h10 | Tri automatique des mails par groupe hotmail | Messagerie/Chat | 15/01 19h54 | 6 |
| 12/12 11h01 | Excel Tri automatique d'une colonne | Bureautique | 25/02 22h26 | 8 |
| 24/01 21h56 | Tri automatique sur Excel | Logiciels/Pilotes | 11/10 09h05 | 4 |
| 10/06 10h34 | macro selection, critere de tri automatique | Programmation | 10/06 11h19 | 1 |
![]() | Picasa - Picasa est un logiciel de gestion de photos permettant de rechercher et d'organiser les photos stockées sur votre disque... | Catégorie: Album photo Licence: Freeware/gratuit |
![]() | Trillian - Trillian est un des clients de messagerie instantanée les plus aboutis. Il est compatible avec AIM®, MSN®, ICQ®, Yahoo!®, et... | Catégorie: Messagerie instantanée Licence: Open Source |
![]() | Caledos Automatic Wallpaper Changer - Caledos Automatic Wallpaper Changer est comme son nom l'indique, un gestionnaire de fond d'écran. Les principales... | Catégorie: Organiseur Licence: Freeware/gratuit |
![]() | GigaTribe - GigaTribe (ex-TribalWeb) est un logiciel de partage de fichiers Peer-to-peer (P2P) en réseau privé. GigaTribe, permet de... | Catégorie: Téléchargement Licence: Freeware/gratuit |