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

XL 2010 Regrouper plusieurs colonnes en une seule sans vides sans doublons

  • Initiateur de la discussion Initiateur de la discussion djamal74
  • Date de début Date de début

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 !

djamal74

XLDnaute Nouveau
Bonjour,

Je suis nouveau sur le forum.

Je rencontre un problème que j'ai synthétisé dans un exemple plus simple.

J'ai un tableau qui contient 3 colonnes "A, B, C" Je souhaiterais tout fusionner dans une seule colonne "D" sans doublons sans vides avec un tri de A à Z.

Dans la colonne "E" je souhaite avoir le nombre.

NB: J'aimerais que si je rajoute une nouvelle valeur dans les colonnes A B C le calcul se fait automatiquement. Soit avec code VBA ou matrice.

Merci par avance pour votre aide
 

Pièces jointes

Solution
Bonjour djamal74, Bruno,

Voyez le fichier joint et cette macro dans le code de la feuille :
VB:
Private Sub Worksheet_Change(ByVal target As Range)
Dim d As Object, tablo, i&, j%, x$
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
With [Tableau1] 'tableau structuré
    tablo = .Resize(, 3) 'matrice, plus rapide
    For i = 1 To UBound(tablo)
        For j = 1 To 3
            x = tablo(i, j)
            If x <> "" Then d(x) = d(x) + 1
    Next j, i
    '---restitution---
    Application.ScreenUpdating = False
    Application.EnableEvents = False 'désactive les évènements
    .AutoFilter: .AutoFilter 'si le tableau est filtré
    .Columns(4) = "": .Columns(5) = "" 'RAZ
    If d.Count Then...
Bonjour djamal74, Bruno,

Voyez le fichier joint et cette macro dans le code de la feuille :
VB:
Private Sub Worksheet_Change(ByVal target As Range)
Dim d As Object, tablo, i&, j%, x$
Set d = CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare 'la casse est ignorée
With [Tableau1] 'tableau structuré
    tablo = .Resize(, 3) 'matrice, plus rapide
    For i = 1 To UBound(tablo)
        For j = 1 To 3
            x = tablo(i, j)
            If x <> "" Then d(x) = d(x) + 1
    Next j, i
    '---restitution---
    Application.ScreenUpdating = False
    Application.EnableEvents = False 'désactive les évènements
    .AutoFilter: .AutoFilter 'si le tableau est filtré
    .Columns(4) = "": .Columns(5) = "" 'RAZ
    If d.Count Then
        .Columns(4).Resize(d.Count) = Application.Transpose(d.keys)
        .Columns(5).Resize(d.Count) = Application.Transpose(d.items)
        .Columns(4).Resize(, 2).Sort .Columns(4), xlAscending, Header:=xlYes 'tri alphabétique
    End If
    Application.EnableEvents = True 'réactive les évènements
End With
End Sub
Elle se déclenche quand on modifie ou valide une cellule quelconque.

A+
 

Pièces jointes


Merci beaucoup

C'est génial
 
- 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

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