Tri par ordre alphabétique en VBA

Salut le forum,

est-il possible (je suppose que oui) de faire un tri automatique dans un code?

Par exemple, quand j'enregistre une nouvelle inscription dans une base de données, j'aimerais que cette base se place en ordre alphabétique en incluant la nouvelle donnée.

Je ne souhaite pas faire ce tri manuellement puisque la base de données est une feuille cachée.

Merci pour votre aide.

Salut le forum

Eric, un exemple fait avec l'enregistreur de macro.

Ligne de Titre en A1:C4, tri sur la colonne A.

Range("A1:C4").Sort Key1:=Range("A2"), Order1:=xlDescending, Header:=xlYes _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

Adapte la plage à la dernière ligne de ta base

Range("A1:C & Range("C65535").End(xlUp).Row")

Mytå

Salut Myta,

si en appuyant sur mon bouton, le classement se fait dans une autre feuille, comment je l'indique? Parce que selon ce que je comprends dans ton exemple, le classement se fait sur la même feuille que la macro activée. Ce n'est pas le cas dans mon fichier.

Amicalement.

Re le forum

En sélectionnant la feuille avant le tri.

Sheets("Nom de la feuille").select

Mytå

Autre question Myta,

pourquoi ligne de titre A1:C4? Ma ligne de titre est ma première ligne, c'est tout.

Ma ligne de titre dans mon fichier,

https://www.excel-pratique.com/~files/doc/vflL1Repertoire_v2.zip

va de A1 à N1 dans la feuille Répertoire.

Le classement doit se faire quand j'appuis sur Enregistrer.

Donc, je pense que je pourrai appliquer le code quand je saurai ce que tu veux dire exactement par Ligne de titre parce que là, je ne sais pas vraiment comment m'y prendre et pour moi, ligne de titre correspond plus à ma première ligne.

Amicalement

Salut le forum

Eric, forces-toi un petit peu, plus de 259 messages et encore des problèmes avec VBA

Je sais que cela n'est pas évident, mais utilise l'enregistreur de marco cela solutionne le 3/4 des problèmes.

Dans un module (65536 à adapter sous Excel2007)

Sub Trier()
    Sheets("Répertoire").Select
    Range("A1:N" & [A65536].End(3).Row).Sort Key1:=Range("A2"), Order1:=xlAscending, _
    Key2:=Range("B2"), Order2:=xlAscending, Key3:=Range("C2"), Order3:=xlAscending, _
    Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:=xlSortNormal
    Sheets("Inscription").Select
End Sub

Et dans le code te ton bouton à la fin ajoute Call Trier

Sub Ajouter_click()
Dim ligne As Integer 
...
End With
Call Trier
End Sub

Mytå

P.S.1 Ici je trie les colonnes A, B et C en ordre croissant.

P.S.2 Ta ligne de titre la première ligne ici (Ligne 1)

P.S.3 En espérant que ma réponse n'amènera pas, les mêmes propos de ta part, recopier ici à la 2ième personne du pluriel.

Eric a écrit :

D'ailleurs , si vous avez suivi l'évolution de mes travaux, vous auriez remarqué mon apprentissage.

Et si vous préfèrez prendre aux mots mes interventions plutôt que de tenter de m'aider de façon constructive, vous pouvez vous abstenir.

Continue d'apprendre, et pour les questions, je reste à ta disponibilté comme beaucoup d'autres sur le Forum.

On a tous commencé au début comme toi (Echec - Erreur - Et frustration)

Mytå

Ah Myta!

Je te remercie, ça fonctionne très bien mais... D'abord, j'ai éliminé le triage des deux premières colonnes car je n'ai besoin que du triage par le pseudo (colonne C).

Ensuite, j'obtiens une erreur avec cette ligne, Sheets("Répertoire").Select, car cette feuille est cachée dans mon fichier. Si je ne la cache pas, ça fonctionne parfaitement mais je ne souhaite pas qu'elle soit visible.

Y'a-t-il une manipulation que je puisse faire pour éviter ce problème?

P.S. Je cherche des bonnes références pour apprendre le VBA mais elles sont plutôt rares. Si tu en as à me suggérer, ne te gênes pas.

Merci

Bonjour,

Essaye de remplacer :

Sheets ("Répertoire").Select

Par :

With Sheets ("Répertoire")

End With

Salut Nad-Dan,

avec le code que tu m'as donné, je n'ai plus le bug mais le tri ne s'effectue pas.

Voici le code (dans cette configuration, la feuille doit être visible)

Sub Trier()

Sheets("Répertoire").Select

Range("A1:N" & [A65536].End(3).Row).Sort Key1:=Range("C2"), Order1:=xlAscending, _

Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _

DataOption1:=xlSortNormal

Sheets("Inscription").Select

End Sub

Avec ta modification (le tri ne fonctionne pas)

Sub Trier()

With Sheets("Répertoire")

Range("A1:N" & [A65536].End(3).Row).Sort Key1:=Range("C2"), Order1:=xlAscending, _

Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _

DataOption1:=xlSortNormal

Sheets("Inscription").Select

End With

End Sub

Amicalement.

Re,

Je ne voudrais pas dire de bêtise (c'est Dan le spécialiste des macros et pas moi), mais il me semble que si on à un With..., il faut un .Range (point avant range)

Dan, si tu nous lis ...

Amicalement

Nad

Bonjour,

Nad t'a donné la voie

Essaye ceci :

Sub Trier()
With Sheets("Répertoire")
.Activate
.Range("A1:N" & [A65536].End(3).Row).Sort Key1:=Range("C2"), Order1:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End With
'Sheets("Inscription").Select
End Sub

condition : tes feuilles "répertoire" et "banque de données" masquées

L'instruction Sheets("Inscription").Select n'est pas nécessaire puisque tu appelles la macro Trier depuis cette feuille.

Dan & Nad

Salut Dan,

effectivement Nad m'avait donné la voie mais lors de mes essais, je n'avais pas le .activate

Comment faites-vous pour savoir exactement quoi mettre dans le code?

Amicalement

P.S. Ça fonctionne parfaitement maintenant. Merci infiniment.

Ceci dit, la phase 1 de ma base de données est terminée et elle est pleinement fonctionnelle. Je vous remercie tous pour l'aide apportée et malgré les croyances , j'ai beaucoup appris pendant l'élaboration de ce projet.

Il me reste maintenant à entamer la phase 2, soit l'amélioration de l'interface et des fonctionnalités de cette base.

Je vous remercie encore et à la prochaine question... qui ne saurait tarder.

Rechercher des sujets similaires à "tri ordre alphabetique vba"