XL 2013 Comparer 4 colonnes Excel et en extraire les données non présentes dans les quatre colonnes

  • Initiateur de la discussion Initiateur de la discussion ykuhn
  • 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 !

ykuhn

XLDnaute Nouveau
Bonjour à tous,

J'ai un tableau EXCEL avec des données sur quatre colonnes et je souhaiterai extraire dans une cinquième colonne les données qui ne sont pas présente dans les quatre colonnes soit avec une formule soit en VBA

Exemple

ABCDE
12121
23236
34347
45459
565911
67611


D'avance merci pour votre aide
 
Re 🙂,

Une autre version avec possibilité de doublons dans les colonnes. .
VB:
Option Explicit
Option Base 1

Sub test()
Dim d(1 To 4) As New Dictionary, t, i&, j&, n&, tot&, r(), s(), clef
 
   t = Range("A1:D" & Range("A" & Rows.Count).End(xlUp).Row)
 
   For j = 1 To 4
      d(j).CompareMode = TextCompare
      For i = 1 To UBound(t)
         If t(i, j) <> "" Then d(j)(CStr(t(i, j))) = ""
      Next i
   Next j
 
   For j = 1 To 4
      For Each clef In d(j)
         n = 0
         For i = 1 To 4
             If d(i).Exists(clef) Then
                n = n + 1
                d(i).Remove clef
             End If
          Next i
         If n <> 4 Then
            tot = tot + 1
            ReDim Preserve r(1 To tot)
            r(tot) = clef
         End If
      Next clef
   Next j
 
   Columns("e:e").Clear
   If tot = 0 Then MsgBox "Toutes les données sont dans les 4 colonnes.": Exit Sub
   ReDim s(1 To tot, 1 To 1)
   For i = 1 To tot: s(i, 1) = r(i): Next
   Columns("e:e").Resize(tot) = s
   Columns("e:e").Resize(tot).Sort key1:=Range("e1"), order1:=xlAscending, Header:=xlNo, MatchCase:=False
   Columns("e:e").Resize(tot).HorizontalAlignment = xlCenter
   Columns("e:e").Resize(tot).Borders.LineStyle = xlContinuous
End Sub
 

Pièces jointes

Dernière édition:
Re,
Une version avec deux 'dictionary' seulement.
Code:
Option Compare Text

Sub test()
Dim Gen As New Dictionary, Col As New Dictionary
'Dim t, n&, tot&, r(), s()
Dim i&, j&, k&, t, clef, toutes
  
   Application.ScreenUpdating = False
   If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
   Columns("e:e").Clear
   Gen.CompareMode = TextCompare
   Col.CompareMode = TextCompare
   For j = 1 To 4
      toutes = toutes & Chr(1) & j
      Col.RemoveAll
      k = Cells(Rows.Count, j).End(xlUp).Row
      t = Cells(1, j).Resize(k)
      For i = 1 To k
         clef = CStr(t(i, 1))
         If clef <> "" Then
            If Not Col.Exists(clef) Then
               Col.Add clef, ""
               Gen(clef) = Gen(clef) & Chr(1) & j
            End If
         End If
      Next i
   Next j
   For Each clef In Gen.Keys
      If Gen(clef) = toutes Then Gen.Remove clef
   Next clef
        
   If Gen.Count = 0 Then MsgBox "Tous les élément sont dans toutes les colonnes.": Exit Sub
   ReDim t(1 To Gen.Count, 1 To 1): i = 0
   For Each clef In Gen.Keys: i = i + 1: t(i, 1) = clef: Next
   Columns("e:e").Resize(Gen.Count) = t
   If Gen.Count > 1 Then Columns("e:e").Resize(Gen.Count).Sort key1:=Range("e1"), order1:=xlAscending, Header:=xlNo, MatchCase:=False
   Columns("e:e").Resize(Gen.Count).HorizontalAlignment = xlCenter
   Columns("e:e").Resize(Gen.Count).Borders.LineStyle = xlContinuous
End Sub
 

Pièces jointes

Dernière édition:
- 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
158
Réponses
30
Affichages
449
Retour