Trie alphabétique sur plusieurs colonnes

Bonjour,

Je voudrais trié par ordre alphabétique plusieurs colonnes, c'est à dire que mes colonnes ont un nombre limité de ligne par exemple 15

Les colonne A a des noms et la colonne B des X(où des croix)

La colonne C a aussi des noms et la colonne D des X(où des croix)

Comme je suis limité à 15 lignes mon ordre alphabétique doit s'étendre comme ceci:

Col A Col B Col C Col D

Albert X Nadine X

Annie Serge

Christianne X Valentine X

Françoise X

Jériémie

etc

Je voudrais donc que la colonne C suivit de sa colonne D soit la suite alphabétique de la colonne A suivit elle même de sa colonne B.

Voir fichier joint

Comment puis je faire ce tri?

Diiity

16classeur1.xls (16.00 Ko)

Bonsoir

voici un fichier à tester :

26tri-sur-2-col.xlsm (18.95 Ko)

A voir

bye

merci mais ça ne marche pas.

diiity

Bonsoir

ça ne marche pas ...

peux-tu être plus précis car chez moi cela marche...

il ne se passe rien, il y a un code erreur ????

Peux-tu envoyer le fichier tel que tu l'as testé

On verra

A+

Bonsoir, Salut Patty !

Un essai :

Sub Tri2Col()
    Dim k1%, k2%, kk
    With ActiveSheet
        k1 = .Range("A1").End(xlDown).Row
        k2 = .Range("C1").End(xlDown).Row
        Application.ScreenUpdating = False
        kk = .Range("A1").Resize(k1, 2).Value
        .Range("AA1").Resize(k1, 2).Value = kk
        kk = .Range("C1").Resize(k2, 2).Value
        .Range("AA" & k1 + 1).Resize(k2, 2).Value = kk
        .Range("AA1").Resize(k1 + k2, 2).Sort key1:=.Range("AA1"), _
         order1:=xlAscending, Header:=xlNo
        kk = .Range("AA1").Resize(k1, 2).Value
        .Range("A1").Resize(k1, 2).Value = kk
        kk = .Range("AA" & k1 + 1).Resize(k2, 2).Value
        .Range("C1").Resize(k2, 2).Value = kk
        .Range("AA1").CurrentRegion.Clear
    End With
End Sub

Cordialement.

Bonjour à tous ! MFerrand, au premier abord je n'ai pas compris, après lecture lente et attentive j'ai fini par comprendre !

on copie la première colonne en AA1, on copie la deuxième colonne en AA + nombre de ligne de la première colonne +1

On tri la colonne AA1, puis on découpe cette colonne et colle sur les colonnes A et C ! Magique !

Il faut absolument que j'apprenne cette façon de faire !

vbMBHB

Bonjour vmbhb, mferrand

C'est exactement ce que j'ai fait dans les colonnes Z et AA, puis report et effacement de ces dernières!!!!

Bonne soirée à tous

En fait Patty5046, le problème n'est pas que votre code ne fonctionne pas, c'est qu'il écrit le résultat sur les même cellules que le résultat souhaité par diiity... du coup on pense que cela ne marche pas. Celui de MFerrand remplace la position de départ et on peut comparer la "bonne résolution"...

En fait pas tout à fait car vous aviez effacer les données "voulues"... Mais si diiity fait un copier coller de votre code sur son fichier....

Bref je ne sait pas pourquoi dit-il qu'il ne marche pas, votre code fonctionne mis à par le Application.ScreenUpDating pour éviter le scintillement de l'écran

vbMBHB

bonjour

comme d'hab , un essai pour les privés de VBA

16diiiiti.xlsm (21.91 Ko)

j'ai laissé la macro de tri ,

cordialement

Bonjour à tous ! MFerrand, au premier abord je n'ai pas compris, après lecture lente et attentive j'ai fini par comprendre !

C'est assez basique, et la réalisation de Patty repose sur le même principe, et elle fonctionnait !

J'avais commencé, et ce qui m'a icité à coder ça, c'est pour faire au plus court autant que possible, et notamment en ce qui concerne le tri proprement dit... L'utilisation de la méthode Worksheet.Sort (la seule que connait maintenant l'enregistreur), m'irrite toujours quelque peu quand je la vois, elle étend certes les possibilités de tri (tri par couleurs, etc.) mais dans les cas courants n'est pas plus efficace que l'antique méthode Range.Sort qui tient le plus souvent en une ligne alors qu'il n'en faut pas moins d'une bonne dizaine pour écrire l'autre, surtout qu'on s'ingénie à l'écrire sur le mode enregistreur qui a tendance à allonger le code plus que nécessaire...

L'exemple le plus flagrant est qu'on ne manque généralement pas d'y trouver le paramétrage de la méthode xlPinYin dont la documentation à ce sujet a toujours précisé que cela ne concernait que les langue chinoises ! Et même les exemples de Microsoft ne manquent pas de la mentionner !!! Pour ordre, ce paramètre existe aussi dans la méthode Range.Sort, sauf que personne ne l'a jamais utilisé, ni même pensé à le faire...

Bonne fin de soirée.

Bonjour diiity,

En feuille2 du fichier joint,

coller à partir de la troisième ligne de la colonne A, la liste à trier,

coller à partir de la troisième ligne de la colonne B, les annotations à trier.

En A2 se calcule le nombre d'éléments à trier.

En B2 choisir un nombre de groupes de colonnes, inférieur à 6.

En C2 le nombre d'éléments dans le dernier groupe de colonnes.

En D2 le nombre de lignes dans les groupe de colonnes complètes.

En vert en colonne A, les éléments que j'ai rajoutés pour vérifier le bon fonctionnement.

Correction en A1 de la Feuil1 =SI(Feuille2.$B$2>1;"Noms";"") devenu =SI(Feuille2.$B$2>=1;"Noms";"")

11diiity.zip (5.47 Ko)

Bonjour mferrand, bonjour à tous

L'utilisation de la méthode Worksheet.Sort m'irrite toujours quelque peu

Désolée de t'avoir irrité, mais je suis très loin d'être aussi forte que toi, et ta méthode, je vais bien la regarder pour bien la comprendre. En effet le code est bien plus court. Mais je ne connais pas toutes les possibilités de VBA....

Bravo à toi encore une fois

Bonne journée

Bonjour Patty !

Désolée de t'avoir irrité

Il n'y a pas outrage ! Et j'espère que tu ne le prends pas mal !

Façon de parler. Disons que ça me chatouille, pas très agréablement, de voir les mêmes choses se pérenniser alors qu'on peut faire plus simple.

Et si je n' m'irritais plus c'est que je serais devenu complètement atone...

Le tri est typique à cet égard. La méthode vulgarisée par l'enregistreur est une méthode plus élaborée que la précédente, qui comporte les mêmes éléments de paramétrages et d'autres supplémentaires qui étendent les possibilités. Ce n'est certes pas inintéressant, mais elle est nettement plus complexe à maîtriser, et sachant que l'enregistreur produit en moyenne au moins 50% de code inutile, il conviendrait d'épurer le résultat enregistré, mais la complexité de la méthode fait que personne ne se risque trop généralement à y toucher...

L'"ancienne" méthode est classique, méthode Sort appliquée à un objet Range, on définit les paramètres utiles de la méthode et le tri se fait, et ça fonctionne toujours dans la plupart des cas habituels aussi efficacement que la "nouvelle" méthode, avec beaucoup moins de code !

Cette méthode procède un peu différemment, elle renvoie un objet Sort rattaché à la feuille dont les paramètres sont définies par des propriétés de cet objets ou dans des sous-objets SortFields dont les propriétés définissent les paramètres de tri. Et l'application du tri relève d'une méthode de Sort... Cet éclatement fait qu'on n'y retrouve pas aisément ses petits et qu'un débutant n'a quasiment aucune chance de s'y retrouver, car il n'est pas vraiment naturel de penser le tri en tant qu'objet, quelque peu composite qui plus est, d'en fignoler les critères par touches, à la manière dont on composerait un tableau, avant de dire Ça y est ! Applique maintenant !

Dans le début des années 90 lors de la mise en place de VBA, dans un premier temps avec Excel 5, Microsoft avait fourni une documentation d'accompagnement de qualité qui apportait véritablement une aide pour maîtriser l'utilisation de VBA. L'enregistreur existait déjà (moins perfectionné sans doute) mais l'accent n'était pas mis dessus, et de fait à mes débuts je n'ai jamais utilisé l'enregistreur... Des explications étaient par contre fournies sur la façon d'épurer le code si on l'avait enregistré, et diverses techniques pour optimiser le code...

Politique qui a radicalement changé : l'aide n'est plus fournie en local avec les dernières versions, alors qu'on a très fréquemment besoin lorsqu'on code de vérifier tel ou tel point de syntaxe, ce qui rend le recours à l'aide quasi-permanent pour coder correctement. Et j'ai même lu quelque part une phrase anodine visant à encourager l'utilisation de l'enregistreur, dont j'ai oublié la teneur depuis, mais qui pour moi signifiait clairement : on vous fournit le plat, consommez sans vous soucier des ingrédients ni de leur apprêt, on s'en occupe pour vous...

Un type de démarche que je combats depuis mon plus jeune âge, et ce n'est pas maintenant que cela va s'arrêter !

Cordialement et bonne journée.

Bonjour,

Sub TriMC2()

Set rng1 = Range("A2:A10,C2:C10") ' à adapter

Dim temp(), temp2()

ReDim temp(rng1.Count)

ReDim temp2(rng1.Count)

lig = 0

For i = 1 To rng1.Areas.Count

For j = 1 To rng1.Areas(i).Count

If rng1.Areas(i)(j) <> "" Then

lig = lig + 1

temp(lig) = rng1.Areas(i)(j)

temp2(lig) = rng1.Areas(i)(j).Offset(, 1)

End If

Next j

Next i

Call Tri2(temp, temp2, 1, lig)

lig = 0

For i = 1 To rng1.Areas.Count

For j = 1 To rng1.Areas(i).Count

lig = lig + 1

rng1.Areas(i)(j) = temp(lig)

rng1.Areas(i)(j).Offset(, 1) = temp2(lig)

Next j

Next i

End Sub

Ceuzin

Rechercher des sujets similaires à "trie alphabetique colonnes"