Tri dans excel

Résolu
Olivelena Messages postés 7 Date d'inscription mercredi 18 octobre 2023 Statut Membre Dernière intervention 19 octobre 2023 - Modifié le 18 oct. 2023 à 20:05
Olivelena Messages postés 7 Date d'inscription mercredi 18 octobre 2023 Statut Membre Dernière intervention 19 octobre 2023 - 19 oct. 2023 à 16:28

Bonjour,
Dans l'onglet "CCM" de ma feuille de calcul Excel "CCMacros".xlsm, j'ai enregistré une macro "Classe" pour trier des dates en ordre croissant
en colonne D, à partir d'une plage de cellules nommée "Tri" dans le "gestionnaire de noms".
Après insertion(s) d'une ou plusieurs lignes via la macro "Insertion_ligne" le tri ne prends pas en considération le classement de ces nouvelles lignes insérées.
Je ne suis pas très à l'aise avec les macros et je galère depuis un bon moment (3 mois environ) car je n'arrive pas à formuler le bon code VBA.
SVP, quelqu'un serait-il aimable de m'en préciser la ou les raisons, pour aboutir à la mise en place du bon code VBA ?
Ci-joint le lien d'accès à mon fichier afin d'être plus explicite.
https://www.cjoint.com/c/MJsmxMPFpg3
Dans l'attente de vos aimables suggestions je vous remercie d'avance de votre diligence.
Très cordialement.


A voir également:

11 réponses

ccm81 Messages postés 10854 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 26 avril 2024 2 404
18 oct. 2023 à 15:20

Bonjour

Le fichier est protégé par un mot de passe ?

Cdlmnt

1
ccm81 Messages postés 10854 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 26 avril 2024 2 404
Modifié le 18 oct. 2023 à 16:32

Bonjour

plages nommées dynamiquement
Tri=DECALER(CCM!$B$3;0;0;NB(CCM!$B:$B);10)
CleDate=DECALER(CCM!$D$3;0;0;NB(CCM!$B:$B);1)
CleOperation=DECALER(CCM!$E$3;0;0;NB(CCM!$B:$B);1)

Et dans le code de la procedure Classe, tu remplaces les plages en dur par celles-ci (comme tu as fait pour la plage Tri)

Je ne peux pas tester ton code, mon vieil excel 2003 ne reconnait pas certaines instructions

Une remarque au passage; dans ta colonne H par exemple en H4, la formule
=H3+F4-G4 fait appel à H3, il va y avoir un pb lorsque le tri sera fait.

Cdlmnt

1
ccm81 Messages postés 10854 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 26 avril 2024 2 404
Modifié le 18 oct. 2023 à 18:28

Bonjour

plage en dur : Range("B4:K11086") où tu donnes l'adresse dans la feuille

après avoir renommé les plages bien sûr (c'est ce qu tu as fait pour la plage Tri un peu plus loin)

ActiveWorkbook.Worksheets("CCM").Sort.SortFields.Add2 Key:=Range("CleDate") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("CCM").Sort.SortFields.Add2 Key:=Range("CleOperation") _

Pour ton info, la plage de B3 à K3 n'intègre pas la plage nommée "Tri", donc aucune incidence pour le classement

Chez toi, la plage Tri=CCM!$B$3:$K$11089 intègre la colonne H (où il y a les formules), donc si tu veux arrêter le tri à la colonne G, il faut modifier sa définition et ne prendre que 6 colonnes au lieu de 10.

Tri =DECALER(CCM!$B$3;0;0;NB(CCM!$B:$B);6)

RQ. Pour trier, peut être simplement

Sub Trier()
With Sheets("CCM")
  .Range("Tri").Select
  Selection.Sort key1:=.Range("D3"), order1:=xlAscending, _
                 key2:=.Range("E3"), order2:=xlAscending
  .Range("A1").Select
End With
End Sub

Cdlmnt
 

1
ccm81 Messages postés 10854 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 26 avril 2024 2 404
18 oct. 2023 à 20:31

OK

Attention à tes lignes de début de plage

Tri=DECALER(CCM!$B$3;0;0;NB(CCM!$B:$B);1010 ou 6
CleDate=DECALER(CCM!$D$3;0;0;NB(CCM!$B:$B);1)
CleOperation=DECALER(CCM!$E$3;0;0;NB(CCM!$B:$B);1)

Bonne sooirée

1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Olivelena Messages postés 7 Date d'inscription mercredi 18 octobre 2023 Statut Membre Dernière intervention 19 octobre 2023 1
19 oct. 2023 à 16:28

Bonjour,

Bravoooo et Merciiii !!! à ccm81 qui a bien analysé la situation en proposant des solutions explicites et fiables car tout fonctionne à merveille avec le code simple Sub Trier() que j'ai modifié et adapté pour que mon curseur se positionne à la fin de la colonne B une fois le code exécuté.

Encore merci ceci me facilite l'existence, depuis le temps que j'attendais cela.....

Bonne réception et bonne soirée.

Cdt


1
Olivelena Messages postés 7 Date d'inscription mercredi 18 octobre 2023 Statut Membre Dernière intervention 19 octobre 2023 1
18 oct. 2023 à 15:29

Bonjour,

Merci pour votre réponse rapide, voici le MP kiki'' avec toutes mes excuses...

Bonne réception

Cordialement


0
Raymond PENTIER Messages postés 58397 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 26 avril 2024 17 094
Modifié le 18 oct. 2023 à 15:51

Bonjour.

Le mot de passe kiki" ne fonctionne pas ; le mot de passe kiki non plus !

Tu devrais enlever la protection toi-même, avant de nous envoyer le fichier ...


0
Olivelena Messages postés 7 Date d'inscription mercredi 18 octobre 2023 Statut Membre Dernière intervention 19 octobre 2023 1
18 oct. 2023 à 15:54

Bonjour,

Merci pour votre réponse, je fais ça dès que possible.

Bonne réception

Cdt.


0
Olivelena Messages postés 7 Date d'inscription mercredi 18 octobre 2023 Statut Membre Dernière intervention 19 octobre 2023 1
18 oct. 2023 à 16:01

Bonjour,

Pour info les deux apostrophes sont à taper séparément à partir de la touche 4 située en haut sous et entre les touches F4 & F5.

Bonne réception

Cdt


0
Olivelena Messages postés 7 Date d'inscription mercredi 18 octobre 2023 Statut Membre Dernière intervention 19 octobre 2023 1
18 oct. 2023 à 18:04

Bonjour,

Me revoilà.

Voici l'intégralité du code actuel de la procédure "Classe":

Sub Classer()
'
' Classer Macro
' Classement croissant par dates
'

'
    Application.Goto Reference:="Tri"
    ActiveWorkbook.Worksheets("CCM").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("CCM").Sort.SortFields.Add2 Key:=Range("D4:D11086") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("CCM").Sort.SortFields.Add2 Key:=Range("E4:E11086") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("CCM").Sort
        .SetRange Range("B4:K11086")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Range("B4").Select
    Selection.End(xlDown).Select
    ActiveWindow.SmallScroll Down:=6
End Sub

Qu'appelles-tu les plages en dur ? Peux-tu les surligner STP, merci.

A quel endroit(s) du code faut-il remplacer par les plages nommées numériquement ?

Est-il possible, afin d'éviter de perdre notre temps et toutes confusions, que tu modifies le code dans son intégralité pour moi et je le copierais et le collerais en lieu et place du code actuel, merci beaucoup.

Pour ton info, la plage de B3 à K3 n'intègre pas la plage nommée "Tri", donc aucune incidence pour le classement.

Merci encore pour ta réponse.

Bonne réception.

Cdt


0
Olivelena Messages postés 7 Date d'inscription mercredi 18 octobre 2023 Statut Membre Dernière intervention 19 octobre 2023 1
18 oct. 2023 à 19:52

Bonsoir,

Merci beaucoup.

Je vois ça demain pour l'adapter.

Bonne réception.

Cdt.


0