Microsoft 365 Liste alphabétique

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

ff145bv

XLDnaute Junior
Bonjour,
J'ai deux listes alphabétiques sur deux colonnes distinctes, toutes deux pouvant accueillir au maximum 20 noms (mais parfois moins).
Je voudrais ne constituer qu'une seule liste alphabétique à partir de ces deux listes, sachant donc qu'il est tout à fait possible que chaque liste contienne moins de 20 noms.
Or je m'emmêle depuis deux jours avec les formules PETITE.VALEUR, NB.SI, INDEX, EQUIV.
Pourriez-vous m'aider ?
Merci infiniment par avance pour votre aide et votre talent.
 
Bonjour,
Supposant les deux zones (A1:A20) et (B1:B20) (remplies ou non)
En C1 :
VB:
=LET(a;ASSEMB.V(A1:A20;B1:B20);TRIER(UNIQUE(FILTRE(a;a<>""))))

Ou
Code:
=TRIER(UNIQUE(FILTRE(ASSEMB.V(A1:A20;B1:B20);ASSEMB.V(A1:A20;B1:B20)<>"")))

Nota, Unique peut être supprimé s'il n'y a pas de doublons
 
Merci infiniment. Je découvre plein de fonctions que je n'utilise jamais.
Je vais finalement utiliser votre deuxième proposition car la première se conclue par "Propagation".
Encore un grand merci !
Re-,
si la première se conclue par "Propagation", c'est parce qu'elle n'a pas assez de cellules dessous pour se "propager"
Libère les cellules dessous, ou mets cette formule dans une autre cellule disposant d'au moins 40 (max) cellules vides dessous
Bonne journée
 
Bonjour à tous,

Ne pas oublier que VBA est toujours là pour apporter une solution :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim P As Range, n&
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
With ActiveSheet
    If .FilterMode Then .ShowAllData 'si la feuille est filtrée
    Set P = .UsedRange
    P.Columns(4).Offset(1).ClearContents 'RAZ
    n = P.Rows.Count
    P(2, 4).Resize(n) = P.Columns(1).Offset(1).Value 'copie les valeurs
    P(2 + n, 4).Resize(n) = P.Columns(2).Offset(1).Value 'copie les valeurs
    With P(2, 4).Resize(2 * n)
        .Sort .Cells, xlAscending, Header:=xlNo 'tri de la 4ème colonne
        .RemoveDuplicates 1, xlNo 'supprime les doublons
        .SpecialCells(xlCellTypeBlanks).Delete xlUp 'supprime les cellules vides
    End With
    .UsedRange 'actualise la barre de défilement verticale
End With
Application.EnableEvents = True 'réactive les évènements
End Sub
La macro est dans le code de la feuille et s'exécute quand on modifie ou valide une cellule quelconque.

A+
 

Pièces jointes

Bonjour le forum,

On gagnera du temps en utilisant des tableaux VBA et le Dictionary :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim d As Object, P As Range, tablo, i, x$, n&, a, b
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive les évènements
With ActiveSheet
    If .FilterMode Then .ShowAllData 'si la feuille est filtrée
    Set P = .UsedRange
    tablo = P.Resize(, 2) 'matrice, plus rapide
    For i = 2 To UBound(tablo)
        x = tablo(i, 1): If x <> "" Then d(x) = ""
        x = tablo(i, 2): If x <> "" Then d(x) = ""
    Next i
    n = d.Count
    If n Then
        a = d.keys
        tri a, 0, n - 1
        ReDim b(n - 1, 0) 'base 0
        For i = 0 To n - 1: b(i, 0) = a(i): Next i 'transposition
        P(2, 4).Resize(n) = b
    End If
    P(2, 4).Offset(n).Resize(Rows.Count - n - P.Row).ClearContents 'RAZ en dessous
    .UsedRange 'actualise la barre de défilement verticale
End With
Application.EnableEvents = True 'réactive les évènements
End Sub

Sub tri(a, gauc, droi) ' Quick sort
Dim ref, g, d, temp
ref = a((gauc + droi) \ 2)
g = gauc: d = droi
Do
    Do While a(g) < ref: g = g + 1: Loop
    Do While ref < a(d): d = d - 1: Loop
    If g <= d Then
      temp = a(g): a(g) = a(d): a(d) = temp
      g = g + 1: d = d - 1
    End If
Loop While g <= d
If g < droi Then Call tri(a, g, droi)
If gauc < d Then Call tri(a, gauc, d)
End Sub
A+
 

Pièces jointes

Bonjour,
Une autre piece de code a essayer.
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim a As Variant, i As Long
    If Target.Count > 1 Then Exit Sub
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    a = ActiveSheet.UsedRange.Resize(, 2)
    With CreateObject("System.Collections.ArrayList")
        For i = 2 To UBound(a)
            If (a(i, 1) <> vbNullString) * (Not .contains(a(i, 1))) Then .Add a(i, 1)
            If (a(i, 2) <> vbNullString) * (Not .contains(a(i, 2))) Then .Add a(i, 2)
        Next
        .Sort
        Range("D1").CurrentRegion.Offset(1).ClearContents
        Range("D2").Resize(.Count) = Application.Transpose(.ToArray)
    End With
    Application.EnableEvents = True
End Sub
 
Dernière édition:
Chez moi sur Win 11 Excel 2019 il y a bug sur :
VB:
With CreateObject("System.Collections.ArrayList")
Chez moi sur Win11 Excel 2021 64 bits cela fonctionne. J'ai fait un essai : cela semble lié à l'activation de la fonctionnalité dotnet 3.5 :
Dotnet3.5.png

si je désactive cette fonctionnalité j'ai une erreur automation sur CreateObject("System.Collections.ArrayList")
  • Certaines classes COM visibles (dont ArrayList) reposent sur des composants hérités de .NET 2.0/3.5
  • Si .NET Framework 3.5 n’est pas activé → échec de création (ActiveX component can't create object)
 
Dernière édition:
Bonjour le forum,
Le problème posé est celui-ci :
J'ai deux listes alphabétiques sur deux colonnes distinctes, toutes deux pouvant accueillir au maximum 20 noms (mais parfois moins).
Je voudrais ne constituer qu'une seule liste alphabétique à partir de ces deux listes, sachant donc qu'il est tout à fait possible que chaque liste contienne moins de 20 noms.
Il s'agit donc, à partir de 2 listes contenant moins de 20 noms d'en constituer une seule.
Quelle que soit la solution adoptée, il parait peu probable que le facteur temps soit déterminant.
Néanmoins, il est toujours intéressant d'avoir à disposition plusieurs solutions à un même problème.
A titre personnel, quand j'ai le choix, j'opte pour la plus élégante.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

N
Réponses
24
Affichages
4 K
Nico17620
N
M
Réponses
5
Affichages
2 K
M. Chollet
M
B
Réponses
5
Affichages
1 K
Bullrot
B
K
Réponses
38
Affichages
10 K
kinders59
K
C
Réponses
3
Affichages
2 K
claivier_58
C
C
Réponses
1
Affichages
2 K
claivier_58
C
A
Réponses
15
Affichages
2 K
Arthur93
A
G
Réponses
3
Affichages
751
gaetan2812
G
F
Réponses
2
Affichages
1 K
fredvh
F
J
Réponses
4
Affichages
2 K
D
Réponses
8
Affichages
3 K
Dargan
D
P
Réponses
2
Affichages
3 K
pifoufou75
P
Retour