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

Microsoft 365 Tri automatique alphabétique VBA

AxelExcel

XLDnaute Nouveau
Bonjour à vous,

Je me présente brièvement, c'est la première fois que je viens sur ce forum. Je suis en activité dans une entreprise et habituellement nous utilisons très peu Excel or en ce moment nous sommes en confinement et je dois avouer que ce soit pour mes collègues ou moi-même nous avons perdu nos repère mais pour cela j'ai pensé à faire un tableau Excel afin de centraliser 90% de nos tâches qui peuvent être réalisé finalement dessus. Le confinement a du bon, je redécouvre Excel et l'immensité de possibilité qui s'offre à nous dès lors qu'on est patient et impliqué dans notre tâche.

C'était la brève présentation, maintenant le vif du sujet : je souhaite créer un tri alphabétique automatique (je pense que ça se fera via Visual Basic).

Je souhaiterais que, dès lors que la cellule de la colonne C soit "non vide" que cela effectue un tri par ordre alphabétique de la ligne entière par rapport à la cellule A

Je ne souhaite pas passer par le tri via les filtres, étant donné l'importance de la masse de notre saisie (nous serons plusieurs sur le fichier normalement, info à vérifier). Je ne souhaite pas non plus passer par un bouton ou raccourci pour déclencher le tri.

L'objectif étant que ce soit dynamique et actualisé en temps réel. J'espère que c'est possible.

A titre d'exemple, je vous joints un tableau test (les informations sont évidemment modifiées). J'ai gardé la même mis en forme avec le même nombre de colonne.

Je remercie déjà les personnes qui vont me lire et me répondre et je vous souhaite une bonne journée à tous.
AxelExcel
 

Pièces jointes

  • Test VBA tri alpa auto.xlsm
    9.6 KB · Affichages: 12

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Axel, et Bienvenu sur XLD.

Euh ....
Je souhaiterais que, dès lors que la cellule de la colonne C soit "non vide" que cela effectue un tri par ordre alphabétique de la ligne entière par rapport à la cellule A
Comment trier la ligne A par ordre alphabétique ?

Est ce que vous voulez trier votre tableau par rapport à la date de naissance dès l'instant où une date de naissance à changée ? Comme le montre l'exemple ?
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
En PJ un essai.
Le tri s'effectue dès qu'on modifie une date de naissance. Le tri s'effectue sur la colonne A.
La macro Worksheet_Change est dans la feuille.
 

Pièces jointes

  • Test VBA tri alpa auto.xlsm
    23.9 KB · Affichages: 20
Dernière édition:

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Dans le fichier joint, sur la feuille 'Feuil1', j'ai copié vos données puis ai transformé la plage de cellules en tableau structuré.

Pour le tri il s'effectue comme celui de sylvanu, par la colonne des noms sur changement d'une date de naissance.

Cordialement
 

Pièces jointes

  • Test VBA tri alpa auto.xlsm
    19.1 KB · Affichages: 15

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re Bonjour le fil,

Roblochon, si j'ajoute un nom et une date de naissance à la fin de la liste dans votre fichier, j'obtiens une erreur sur la ligne :
VB:
.Add2 Key:=rng, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
 

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour Sylvanu,

Je n'obtiens aucune erreur en faisant la même chose. Quel message d'erreur avez-vous, avec quelle version excel ?

[Edit]
Remplacer la méthode .Add2 (qui n'a pas de raison d'être effectivement) par la méthode .Add :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range
    ' Si target représente plus d'une cellule -> sortir
    If Target.CountLarge > 1 Then Exit Sub
    With ListObjects("Datas")
        ' Si aucune ligne de données n'est présente dans le tableau
        If .DataBodyRange Is Nothing Then Exit Sub
        ' Si target n'est pas en colonne 3 des données du tableau -> sortir
        If Intersect(Target, ListObjects("Datas").DataBodyRange.Columns(3)) Is Nothing Then Exit Sub
        ' si target n'est pas vide -> lancer le tri
        If Not IsEmpty(Target) Then
            ' Première cellule des données
            Set rng = .DataBodyRange.Cells(1, 1)
            With .Sort
                With .SortFields
                    .Clear
                    .Add Key:=rng, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
                End With
                .Header = xlYes
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
        End If
    End With
End Sub

[Re - Edit] ai rajouté un contrôle sur la présence de données dans le tableau sinon boum !!!




Cordialement
 
Dernière édition:

AxelExcel

XLDnaute Nouveau
Merci beaucoup à vous deux pour vos réponses !

Après test, cela fonctionne bien sur mon tableau d'origine. C'est parfait.

Cependant lorsque je saisie et que je fait "tab" ou "Entrée" je suis directement ramené tout en haut de mon tableau en cellule A1, est-ce normal ?
 

job75

XLDnaute Barbatruc
Bonjour AxelExcel, sylvanu, Roblochon,

Avec 2 tris successifs :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
With [A1].CurrentRegion
    .Sort .Columns(3), Header:=xlYes 'tri sur les dates pour placer les cellules vides en bas
    .Resize(Application.Count(.Columns(3)) + 1).Sort .Columns(1), xlAscending, Header:=xlYes 'tri sur les noms avec dates
End With
End Sub
A+
 

Pièces jointes

  • Test VBA tri alpa auto(1).xlsm
    16.3 KB · Affichages: 7

Discussions similaires

Réponses
13
Affichages
390
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…