Macro Tri AàZ après ajout d'une ligne

erwans12

XLDnaute Nouveau
Bonjour,
Je précise tout d'abord que je suis complètement novice en Macro !!!
Je suis en train de faire un petit projet pour ma formation future et je patoge !!
J'ai créer donc un tableau avec différentes formule et totaux à droite et en bas.
En suivant différent conseil en lisant ici ai donc réussi temps bien que mal à créer deux macro avec la fonction
enregistrer un macro !!
Premier bouton ajoute une ligne copier coller de la dernière vide et copie ça mise en forme et formule. Le souci c'est que si malencontreusement on a pas cliquer sur la dernière ligne cela m'ajoute une ligne n'importe ou !!! pas top si l'utilisateur ne fais pas attention à ça !!!
Le deuxième bouton toujours fais avec enregistreur de macro me trie le tableau de A à Z avec les noms et prénom de la colonne A !! sauf que et oui !!! il reproduit ce que j'ai fais lors de l'enregistrement et donc si ensuite j'atoute une ligne celle ci n'est pas ajouter a ce fameux trie de A à Z !!!
Je serais ravie si on pouvais donc m'aider à comprendre le cheminement de ces macros et donc modifier ceux-ci qu'il régisse à mes attentes et donc au modification apportées.
je vous remercie par avance et joint mon joli tableau !!
 

Pièces jointes

  • ClasseurBPJEPSLPT2.xlsm
    55.9 KB · Affichages: 28
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : Macro Tri AàZ après ajout d'une ligne

Bonjour.

Pourquoi ne mettriez vous pas un nom aux lignes du tableau, par exemples "Tablo", réf. "=Inscriptions!$4:$125"
Vous pourriez alors faire comme ça :
VB:
Sub AjouterUnEnfant()
Dim LMax As Long
With Range("Tablo")
   LMax = .Rows.Count
   .Rows(LMax).Copy
   .Rows(LMax).Insert
   Application.CutCopyMode = False
   LMax = LMax + 1
   On Error Resume Next
   .Rows(LMax).SpecialCells(xlCellTypeConstants).Value = Empty
   .Cells(LMax, "A").Select
   End With
End Sub

Remarque: je trouve bien compliquée votre formule pour calculer l'age. Si vous tenez à calculer sur cette base vous pourriez faire:
En C4 :
Code:
=ENT(ANNEE(AUJOURDHUI())-ANNEE(B4)+(MOIS(AUJOURDHUI())-MOIS(B4))/12)
Mais personnellement, considérant qu'une personne doit toujours avoir un age en correspondance avec le temps qu'elle a vécu, quel que soit la date du jour et sa date de naissance, sans donc tenir compte ni du nombre de jours traditionnel des mois impliqués ni de la compensation arbitraire périodique de la réalité grâce aux années bissextiles, je préfère tout simplement:
En C4 :
Code:
=ENT((AUJOURDHUI()-B4)/365,2425)

Pour le classement :
VB:
Sub TrierDeAàZ()
Range("Tablo").Sort Key1:=Columns("A"), Order1:=xlAscending, Header:=xlNo, _
   OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
End Sub
 
Dernière édition:

Iznogood1

XLDnaute Impliqué
Re : Macro Tri AàZ après ajout d'une ligne

Tu as eu la bonne idée d'utiliser un tableau.

Tout devient très simple :

Pour ajouter un enfant
Code:
Feuil1.ListObjects(1).DataBodyRange.ListObject.ListRows.Add AlwaysInsert:=True

et pour Trier
Code:
With Feuil1.ListObjects(1).Sort
    .SortFields.Clear
    .SortFields.Add Key:=Range("Tableau6[[#All],[Nom et Prénom]]"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
  End With
 

Dranreb

XLDnaute Barbatruc
Re : Macro Tri AàZ après ajout d'une ligne

De toute façon, les tableaux, je ne les ai pas sur ma version d'Excel, et ils ne me manquent pas. Je m'en suis toujours très bien sorti, et facilement, avec un simple nom dans le classeur portant sur les lignes du tableau.
 

Discussions similaires

Réponses
5
Affichages
278

Statistiques des forums

Discussions
312 167
Messages
2 085 894
Membres
103 021
dernier inscrit
Sergyl75