Trier une colone en fonction d'une autre

Bonjour,

J'aimerai pouvoir trier une colonne B dans "l'ordre de la colonne A" et décaler en fin des colonne A et B les cellule différente exemple :

Colonne A Colone B

Martin Albert

Gille Martin

Albert Alexendre

Ce qui donnerai après le tri :

Colonne A Colone B

Martin Martin

Albert Albert

Gille

Alexendre

Et faire la mème chose en intercalant les nom de famille, exemple :

Colonne A Colone B II Colonne C Colone D

Dupond Martin II Duti Albert

Dutot Gille II Dupon Martin

Duti Albert II Marcus Alexendre

Un grand merci pour les conseils sur ce site.

Je rajoute un fichier Excel car mes colonnes ce décale à la mise en page.

13lapeyrej.xlsx (9.28 Ko)

Salut,

Je ne sais pas si j'ai tout bien compris, mais le code placé dans le fichier ci-joint devrait répondre à ton attente.

Amicalement.

38lapeyrej-v2.xlsm (28.11 Ko)

Bonjour,

Un grand merci, c'est vraiment ce que je recherchais. Cela va me permettre de comparer rapidement deux liste de Nom, Penon etc...

Alors comme c'est exactement ce que je voulais, j'aimerais encore une modification pour rendre exploitable le plus simplement possible mes comparaisons :

* J'aimerais que ce soit fait sur 2 feuilles différente du mème fichier.

* Que toutes les colonnes soit comprise pour la comparaison.

* Et que les lignes différente des deux feuilles soit surligné en rouge.

Cela me permettrait de trier rapidement deux fichiers de liste de nom avec d'autre donnée Prénom adresse et autre rapidement en faisant des copie dans votre fichier.

Un grand merci. Déjà votre travail me permet d'y arriver.

C'est vraiment superbe votre dévouent.

Merci.

Amicalement Jean Marc.

Salut,

C'est toujours un peu embêtant de travailler sur un fichier puis qu'on nous dise - c'est très bien, mais ce n'est pas ce que je voulais

Peux-tu me fournir un fichier modèle correspondant au tien, avec une dizaine de lignes exemple sur chacune des feuilles concernées ?

Dis-moi aussi avec précision où tu souhaites le résultat attendu.

Cordialement.

Bonjour,

Veuillez m’excuser pour votre ressenti. Mais c'est en voyant le résultat inespéré de votre fichier que j'ai pensé à une version finalisé. J'aimerais pouvoir coller sur le feuillet "Liste A" une liste de Nom prénom etc... puis sur le feuillet B une liste de Nom et Prénom etc... venant de deux fichier différent. C'est la que votre fichier ferait la fusion de la liste A et B dans un troisième feuillet en gardent les lignes complète, et en intercalant "surligné en vers" les Nom de A qui ne sont pas en B, et en intercalant "Surligné en Jaune" les Nom de B qui ne sont pas en A, Et en rajoutant des colonnes qui serait dans une liste et pas dans l'autre. Toujours en gardent l’ordre de la liste de Nom de A,

Veuillez agréer mes sincères salutations.

Amicalement Jean Marc.

Nota : Je vous envoi un fichier d'exemple plus simple pour comprendre.

7lapeyre11.xlsx (17.02 Ko)

Salut Lapeyre,

Salut Yvouille,

toujours plus facile à comprendre avec un fichier... Encore un peu de travail de peaufinage au niveau des variables...

Un double-clic en feuille 'Resultat' démarre la macro.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Dim sWk1 As Worksheet, sWk2 As Worksheet
Dim iRow1%, iRow2%, iCol1%, iCol2%, sCol1$, sCol2$
'
Set sWk1 = Worksheets("Liste A")
Set sWk2 = Worksheets("Liste B")
'
Cancel = True
On Error Resume Next
Application.EnableEvents = False
Application.ScreenUpdating = False
Cells.Delete
'
For x = 1 To 2
    With Worksheets(Choose(x, "Liste A", "Liste B"))
        iCol1 = IIf(x = 1, 1, Cells(1, Columns.Count).End(xlToLeft).Column + 1)
        sCol = Split(Columns(iCol1).Address(ColumnAbsolute:=False), ":")(1)
        Range("A" & IIf(x = 1, 1, Range("A" & Rows.Count).End(xlUp).Row + 1)).Resize(.Cells(1, Columns.Count).End(xlToLeft).Column, 1).Value = _
            WorksheetFunction.Transpose(.Range("A1").Resize(1, .Cells(1, Columns.Count).End(xlToLeft).Column))
    End With
Next
Range("A1:A" & Range("A" & Rows.Count).End(xlUp).Row).RemoveDuplicates Columns:=1
Range("B1").Resize(1, Range("A" & Rows.Count).End(xlUp).Row).Value = WorksheetFunction.Transpose(Range("A1").Resize(Range("A" & Rows.Count).End(xlUp).Row, 1))
Range("A:A").Value = ""
For x = 1 To 2
    With Worksheets(Choose(x, "Liste A", "Liste B"))
        iRow1 = IIf(x = 1, 2, Range("B" & Rows.Count).End(xlUp).Row + 1)
        For y = 1 To .Cells(1, Columns.Count).End(xlToLeft).Column
            iCol1 = Rows(1).Find(what:=.Cells(1, y), lookat:=xlWhole, LookIn:=xlValues, searchdirection:=xlNext).Column
            sCol1 = Split(Columns(iCol1).Address(ColumnAbsolute:=False), ":")(1)
            sCol2 = Split(Columns(y).Address(ColumnAbsolute:=False), ":")(1)
            Range(sCol1 & iRow1).Resize(.Range("A" & Rows.Count).End(xlUp).Row, 1).Value = .Range(sCol2 & 2).Resize(.Range("A" & Rows.Count).End(xlUp).Row, 1).Value
        Next
    End With
Next
For x = 2 To Range("B" & Rows.Count).End(xlUp).Row
    Range("A" & x).Value = Range("B" & x).Value & Range("C" & x).Value
Next
For x = 2 To Range("A" & Rows.Count).End(xlUp).Row
    iCol1 = Cells(x, Columns.Count).End(xlToLeft).Column
    iRow1 = Range("A:A").Find(what:=Range("A" & x).Value, lookat:=xlWhole, LookIn:=xlValues, searchdirection:=xlPrevious).Row
    If iRow1 > x Then
        iCol2 = Cells(iRow1, Columns.Count).End(xlToLeft).Column
        iRow2 = IIf(iCol1 > iCol2, iRow1, x)
        Range("A" & iRow2).Value = ""
    End If
Next
Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row).SpecialCells(xlCellTypeBlanks).EntireRow.Delete shift:=xlUp
Range("A:A").Delete shift:=xlToLeft
sCol1 = Split(Columns(Cells(1, Columns.Count).End(xlToLeft).Column).Address(ColumnAbsolute:=False), ":")(1)
Range("A1").Resize(Range("A" & Rows.Count).End(xlUp).Row, Cells(1, Columns.Count).End(xlToLeft).Column).Sort _
    key1:=Range("A2"), order1:=xlAscending, key2:=Range("B2"), order2:=xlAscending, Orientation:=xlTopToBottom, Header:=xlYes
'
Application.ScreenUpdating = True
Application.EnableEvents = True
On Error GoTo 0
'
End Sub

A+

7lapeyre.xlsm (25.70 Ko)

Bonsoir, après test du fichier, il y a encore un très petit zeste de peaufinage. Je me suis aperçu que si l'utilisateur est dans la liste A et en mème temps dans la liste B, alors les donnée de la liste A ne sont pas recopié. Le reste est normal (Utilisateur dans liste B mais pas dans A ou Utilisateur dans liste A mais pas dans b).

Exemple Erreur à corriger : j'ai rajouté des utilisateur fictif dans le fichier pour que ce soit plus parlant.

  • Druo est en liste A et pas en liste B : Feuillet Résultat juste,
  • Alain est en liste B et pas en liste A : Feuillet Résultat Juste,

- Erreur Pour : ALLAR, DUFOUR, DUPON et Habi : Ils sont en liste A et en liste B et leur données de la liste A n'est pas recopié dans le Feuillet Résultat, => Le fichier joint le montre.....

Super merci pour l'avancement de ce fichier. Cela va me servir a concaténer des liste venant de base différente.

Un très grand merci pour votre dévouent.

8lapeyrev21.xlsm (30.37 Ko)

Salut Lapeyre,

Réparé !

        iCol3 = WorksheetFunction.Min(iCol1, iCol2)
        For y = 2 To iCol3
            Cells(IIf(iCol3 = iCol1, iRow2, x), y) = Cells(IIf(iCol3 = iCol1, x, iRow2), y)
        Next

Même fonctionnement...

A+

8lapeyrev21.xlsm (33.67 Ko)

Un grand merci pour votre travail. Ce fichier va me faire gagner beaucoup de temps et éviter des erreurs.

C'est super génial et bravo pour ce site Excel-Pratique.

Amicalement Jean Marc

Rechercher des sujets similaires à "trier colone fonction"