XL 2016 Doublons inversés

NCY74

XLDnaute Nouveau
Bonjour à tous,

J'ai une colonne A qui contient de valeur A, B, C, D, E, F, G, H..... et une deuxième colonne qui contient une lettre associé à la valeur sur la même ligne de la colonne A. Ainsi en A1 j'ai par exemple la lettre E et dans B1 la lettre J. Cela veut dire que la lettre E va avec la lettre J.
Plus bas, j'ai en A45 (par exemple) la lettre J et en B45 la lettre E. Cela veut dire que la lettre J va avec la lettre E. Mais finalement c'est la même chose. Je voudrais donc trouver une commande qui me permette de supprimer ces doublons et de ne garder que un sens, c'est à dire E J et pas J E.

Pouvez-vous m'aider ?

Merci d'avance !
 

jmfmarques

XLDnaute Accro
Bonjour
Essaye de t'exprimer avec autre chose que des "Va avec", qui ne veut rien dire.
Qu'essayes-tu de dire ?
Serait-ce par exemple : recenser/éliminer les doublons de combinaisons sans arrangement ?
Fais s'il te plait cet effort essentiel de clarté et précision, qui sont des conditions sine qua non d'un développement sain.
 

NCY74

XLDnaute Nouveau
Bonjour,

merci pour votre réponse.
Je veux dire « associer ».
en effet c’est votre belle phrase qui est juste : « éliminer les doublons de combinaisons sans arrangement ». Excusez moi de ne pas avoir utilisé les bons termes (que je ne connaissais pas).
Merci pour votre aide.
 

dysorthographie

XLDnaute Accro
Bonjour,
Tu veux dire que tu utilise un code ,qui doit être univoque, sur deux caractère invariablement écrit par exemple AJ ou JA, sachant que dans le premier exemple A ce trouve dans la colonne [A] et J en [ B] et inversement J en [A] et A en [ B] pour le deuxième exemple ?
 
Dernière édition:

jmfmarques

XLDnaute Accro
re
La solution que j'ai à proposer est d'une plus ou moins grande simplicité selon le type des données dans les deux colonnes concernées.
Quel est ce type ? -->>
- que des données numériques ? -->> OUI/NON
ou
- des données alphanumériques ? -->> OUI/NON
 

NCY74

XLDnaute Nouveau
Il s’agit seulement de lettres. Pour être exact ce sont des codes d'aéroports. Exemple : ligne CDG-TLS. La colonne A contient alors CDG et la B TLS. Mais il est possible de trouver plus bas une ligne TLS-CDG (que je souhaite alors supprimer).
Merci pour votre aide !
 

Dranreb

XLDnaute Barbatruc
Bonjour.
VB:
Option Explicit
Sub VersusSansDoublon()
  Dim ASUR As Range, TDon(), L As Long, C As Long, N As Long, TK(), _
      D As New Dictionary, TVsExiste() As Boolean, J As Long, A As Long, TRés()
   Set ASUR = ActiveSheet.UsedRange ' À adapter
   TDon = ASUR.Value
   ReDim TK(1 To UBound(TDon, 1) * 2)
   For L = 1 To UBound(TDon, 1)
      For C = 1 To 2
         If Not D.Exists(TDon(L, C)) Then
            N = N + 1
            TK(N) = TDon(L, C)
            D(TK(N)) = N: End If
         Next C, L
   ReDim TRés(1 To UBound(TDon, 1), 1 To UBound(TDon, 2)), _
      TVsExiste(0 To VersusJA(N - 1, N))
   For L = 1 To UBound(TDon, 1)
      J = D(TDon(L, 1)): A = D(TDon(L, 2))
      If J <> A Then TVsExiste(VersusJA(J, A)) = True
      Next L
   L = 0
   For N = 0 To UBound(TVsExiste)
      If TVsExiste(N) Then
         L = L + 1
         CalcJAVersus J, A, N
         TRés(L, 1) = TK(J)
         TRés(L, 2) = TK(A)
         End If
      Next N
   ASUR.Value = TRés
   End Sub
Public Function VersusJA(ByVal J As Long, ByVal A As Long) As Long
   If A < J Then A = A Xor J: J = J Xor A: A = A Xor J
   If A > J Then VersusJA = A * (A - 3) \ 2 + J Else VersusJA = -1
   If VersusJA < 0 Then Err.Raise 9999, , "VersusJA(" & J & ", " & A & ") impossible."
   End Function
Private Sub CalcJAVersus(ByRef J As Long, ByRef A As Long, ByVal VS As Long)
   A = Int(Sqr(2 * VS + 0.25) + 1.5)
   J = VS - A * (A - 3) \ 2
   End Sub
Activez la référence Microsoft Scripting Runtime
 

jmfmarques

XLDnaute Accro
Donc des données non numériques.
Voici une méthode simple, sans boucle, qui ne nécessite aucun code VBA si One Shot, mais dont l'utilisation de l'enregistreur de macro pourra "servir" le code VBA si opération non "one shot"
- insertion d'une colonne C après la colonne B
- formule en C1, à tirer ensuite vers le bas autant que nécessaire :
VB:
=SI(A1<B1;A1&"$"&B1;B1&"$"&A1)
- menu --->> supprimer les doublons sur la base de la colonne C
- suppression de la colonne C

Yapluka
 

Discussions similaires