comparaison de deux tableaux

osishame

XLDnaute Junior
Bonjour le forum !

L'objectif de ma macro est de comparer deux tableaux (celui de l'onglet F1 et de l'onglet F2) et de sortir les lignes manquantes du tableaux F1 dans l'onglet Sorties.

La comparaison s'effectue sur le "code" (colonne 1) et en cas de "code" manquant, sur le "nom" sans tenir compte des majuscules et des accents (colonne 2).

Pour l'instant, j'arrive à comparer les tableaux sur le code quand il y en a un mais pas en cas de "code" vide... De plus je ne sais pas comment gérer la non prise en compte de la casse et les accents é, è, ë, î, ect...

Merci beaucoup pour votre aide !

bonne soirée.

osi.
 

Pièces jointes

  • Macro.xls
    94.5 KB · Affichages: 56
  • Macro.xls
    94.5 KB · Affichages: 68
  • Macro.xls
    94.5 KB · Affichages: 67

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : comparaison de deux tableaux

Bonsoir,

Pour comparer x et y

If Ucase(SansAccent(x))=Ucase(SansAccent(y)) Then

Code:
Function sansAccent(chaine)
   codeA = "ÉÈÊËÔéèêëàçùôûïî"
   codeB = "EEEEOeeeeacuouii"
   temp = chaine
   For i = 1 To Len(temp)
    p = InStr(codeA, Mid(temp, i, 1))
    If p > 0 Then Mid(temp, i, 1) = Mid(codeB, p, 1)
   Next
   sansAccent = temp
End Function

JB
 

osishame

XLDnaute Junior
Re : comparaison de deux tableaux

Merci JB,
Comment puis-je l'intégrer mon code ?



Bonsoir,

Pour comparer x et y

If Ucase(SansAccent(x))=Ucase(SansAccent(y)) Then

Code:
Function sansAccent(chaine)
   codeA = "ÉÈÊËÔéèêëàçùôûïî"
   codeB = "EEEEOeeeeacuouii"
   temp = chaine
   For i = 1 To Len(temp)
    p = InStr(codeA, Mid(temp, i, 1))
    If p > 0 Then Mid(temp, i, 1) = Mid(codeB, p, 1)
   Next
   sansAccent = temp
End Function

JB
 

osishame

XLDnaute Junior
Re : comparaison de deux tableaux

Merci beaucoup :), c'est bien cela, il ne reste plus que la prise en compte de la casse et des accents... Challenging...

Je souhaite donc bien comparer les 2 premières colonnes ("code") de mes tableaux TB1 et TB2 et en cas de données vide dans la colonne 2, la comparaison s'effectue sur les 2 deuxième colonnes ("noms") de mes tableaux TB1 et TB2 et là sans tenir compte de la casse et des accents.

J'ai remis à jour la table résultat souhaité qui était fausse (my mistake, désolé).
 

Pièces jointes

  • Copie de Macro 2.xls
    93.5 KB · Affichages: 54

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : comparaison de deux tableaux

Bonjour,

Cf PJ

Dans la seconde version, les doublons sont éliminés.

Code:
Option Compare Text
Sub F1_nonF2()
  Application.ScreenUpdating = False
  Set f1 = Sheets("F1")
  Set f2 = Sheets("F2")
  'on définit a et b comme étant les 2 tableaux BD1 et BD2'
  a = f2.Range("A1").CurrentRegion.Value
  b = f1.Range("A1").CurrentRegion.Value
  Set mondico1 = CreateObject("Scripting.Dictionary")
  Set mondico2 = CreateObject("Scripting.Dictionary")
  'On crée un dictionnaire de données sur la ligne i et la colonne 1'
  For i = 2 To UBound(a): mondico1(sansAccent(a(i, 2))) = "": Next i
   ligne = 1
    Dim c
    ReDim c(1 To Application.Max(UBound(a), UBound(b)), 1 To UBound(a, 2))
    For i = 2 To UBound(b)
      If Not mondico1.Exists(sansAccent(b(i, 2))) And Not mondico2.Exists(sansAccent(b(i, 2))) Then
        mondico2(sansAccent(b(i, 2))) = ""
        For K = 1 To UBound(b, 2): c(ligne, K) = b(i, K): Next K
        ligne = ligne + 1
      End If
    Next
    Sheets("Sorties").[A2].Resize(UBound(a, 1), UBound(a, 2)) = c
End Sub

Function sansAccent(chaine)
   codeA = "ÉÈÊËÔéèêëàçùôûïî"
   codeB = "EEEEOeeeeacuouii"
   temp = chaine
   For i = 1 To Len(temp)
    p = InStr(codeA, Mid(temp, i, 1))
    If p > 0 Then Mid(temp, i, 1) = Mid(codeB, p, 1)
   Next
   sansAccent = temp
End Function

JB
 

Pièces jointes

  • Copie de Copie de Macro 2.xls
    102 KB · Affichages: 56
  • Copie de Copie de Macro 2b.xls
    102.5 KB · Affichages: 35
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 492
Messages
2 088 902
Membres
103 982
dernier inscrit
krakencolas