Comment faire une rechercheV de plusieurs criteres?

Ethan Hunt

XLDnaute Nouveau
Bonjour a tous,

Cette question a deja posee a moulte reprises, mais je n'ai pas reussi a appliquer les reponses trouvees... PEBKAC

J'ai deux fichiers excel (que l'on nommera A et B) contenant chacun plus de 20 000 lignes et quatre colonnes. Les intitules des colonnes sont les memes dans les deux fichiers. Je souhaite verifier quelles sont les lignes en commun dans ces fichiers, et quelles lignes apparaissent uniquement dans le fichier A. Pour connaitre les lignes en commun, il est essentiel que les 4 criteres apparaissant dans le fichier A soient exactement les memes dans le fichier B.

Comment faire?

Merci d'avance pour l'aide !!!
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Comment faire une rechercheV de plusieurs criteres?

Bonjour,

Voir PJ

0,56 seconde pour 2 BD de 10.000 éléments

Code:
Sub Communs()
  Application.ScreenUpdating = False
  Set f1 = Sheets("BD1")
  Set f2 = Sheets("BD2")
  a = f1.Range("A1").CurrentRegion.Value
  b = f2.Range("A1").CurrentRegion.Value
  Set MonDico1 = CreateObject("Scripting.Dictionary")
  For i = 1 To UBound(a)
    temp = ""
    For k = 1 To UBound(a, 2): temp = temp & a(i, k): Next k
    MonDico1(temp) = 1
  Next i
  ligne = 1
  Dim c
  ReDim c(1 To Application.Max(UBound(a), UBound(b)), 1 To UBound(a, 2))
  For i = 1 To UBound(b)
    temp = ""
    For k = 1 To UBound(b, 2): temp = temp & b(i, k): Next k
    If MonDico1.exists(temp) Then
      For k = 1 To UBound(b, 2): c(ligne, k) = b(i, k): Next k
      ligne = ligne + 1
    End If
  Next
  Sheets("communs").[A1].Resize(UBound(a, 1), UBound(a, 2)) = c
End Sub

JB
Formation Excel VBA JB
 

Pièces jointes

  • DictionaryCommuns2BD.xls
    41 KB · Affichages: 137
Dernière édition:

mercant76

XLDnaute Impliqué
Re : Comment faire une rechercheV de plusieurs criteres?

bonjour,

un truc simple : tu concatènes les 4 colonnes du fichier A et la même chose avec le fichier B.

ensuite tu fais rechercheV, et tu auras les lignes en commun strictement égales.

Boisgontier se lève trop tôt pour moi.

@+
 

Ethan Hunt

XLDnaute Nouveau
Re : Comment faire une rechercheV de plusieurs criteres?

Thank you guys, c'etait justement ce dont j'avais besoin... jusqu'au moment ou j'ai realise que ce serait encore plus complexe que cela.

Il me faut savoir au sein du fichier A quelles sont les valeurs apparaissant dans le fichier B. Il ne faut pas que ce soit dans un fichier C. Par exemple, les cellules dans le fichier A pourraient s'afficher en vert si elles apparaissent dans le fichier B. Ici encore, il faut que les cellules soient identiques pour passer au vert.

Le nombre de colonnes a comparer va etre de 5 finalement.

Une idee de comment faire ca??
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Comment faire une rechercheV de plusieurs criteres?

Bonjour,

Voi PJ

JB
 

Pièces jointes

  • DictionaryCommuns2BD.zip
    13.9 KB · Affichages: 97
  • DictionaryCommuns2BDCouleur.xls
    42 KB · Affichages: 127
  • BDCommunsADOInterro.xls
    36.5 KB · Affichages: 131
Dernière édition:

tcorrege

XLDnaute Nouveau
Re : Comment faire une rechercheV de plusieurs criteres?

Euh, sans vouloir me faire des ennemis, quand même avec une base de données sous acces par exemple, l'écriture à la main de la contrainte prend 1 mn :

select * from mesDonnées where critere1='truc' and critere2 = 'chose and critere 3 no in (select critere2 from MEsDonnées2)


C'est en forgeant que l'on devient ... sourd.
 

Ethan Hunt

XLDnaute Nouveau
Re : Comment faire une rechercheV de plusieurs criteres?

@ Boisgontier : merci beaucoup pour ton efficacite. C'est impressionant I must say. ;)

@ tcorrege : FYI, ma boite interdit Access. Merci donc pour ton apport indispensable a ce thread ainsi que pour ton proverbe aussi pathetique que gratuit.
 

fabprovost

XLDnaute Nouveau
Re : Comment faire une rechercheV de plusieurs criteres?

Bonjour,
Je travaille en ce moment sur une liste dans le cadre de mon taf.
Cette liste a 2000 lignes différentes

Chaque mois je reçois une liste nouvelle liste, mais je voudrai pouvoir choper uniquement les différences entre ces deux listes.

En bref, dans la nouvelle liste, je peux avoir:

soit une nouvelle entrée non présente dans l'ancienne liste
soit une rectification d'une entrée
( adresse changée, n° tel changé.. ou autre
Et cerise sur le gâteau, j'aimerais voir précisemment ce qui a changé!
c'est à dire, est-ce une création de ligne entière ou est-ce juste une cellule qui a été enrichi ou modifié

ne connaissant pas VBA (ou très peu) je me retrouve devant l'evrest à gravir avec les pieds et poings liés!

pouvez-vous m'aider s'il vous plait?
Ci joint un extrait du type de fichier que j'ai a traiter....
Merci
Fab
 

Pièces jointes

  • listing pour comparaison.xls
    23 KB · Affichages: 77
  • listing pour comparaison.xls
    23 KB · Affichages: 90
  • listing pour comparaison.xls
    23 KB · Affichages: 83

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Comment faire une rechercheV de plusieurs criteres?

Bonsoir,

Voir MFC en PJ

=ET(A2<>"";ESTNA(EQUIV($A2;INDEX(nouveau;;1);0)))
=INDEX(nouveau;EQUIV($A2;INDEX(nouveau;;1);0);COLONNE())<>A2

nouveau =Nouveau!$A$2:$O$2000



Comparaison BD MFC

JB
 

Pièces jointes

  • Copie de listing pour comparaison.xls
    40 KB · Affichages: 99
Dernière édition:

fabprovost

XLDnaute Nouveau
Re : Comment faire une rechercheV de plusieurs criteres?

Merci...
mais à vrai dire, je ne comprends pas tout
En même temps , c'est pas mon métier...
Quelqu'un pourrait il me faire la macro et me créer une feuille avec tout ce qui est uniquement changeant ou ce qui est complétement nouveau?
Feuille 1 listing 1
Feuille 2 listing 2 (reception d'un nouveau listing)
Feuille 3 ( à créer qui recense les lignes qui ont une cellule changée, avec la fameuse cellule changée colorée + les nouvelles lignes)

Merci à vous....
J'aimerais bien pouvoir moi aussi aider sur ce type de forum, mais ça va pas le faire....
Fab
 

fabprovost

XLDnaute Nouveau
Re : Comment faire une rechercheV de plusieurs criteres?

Super...
merci, c'est génial....
seul soucis... je suis chiant peut être mais j'aimerais que toutes les lignes où il y a du Jaune apparaissent sur une feuille en plus.. pour un traitement spécifique... et que tous les rouge (ajoutés) apparaissent sur la feuille "ajoutés" avec tous les champs et pas uniquement le n° de ligne et la clé...

Enfin... le jour où je saurai faire le quart de ce que vous faites, je serai président!
Moi je serais vous, j'y penserais... en plus il n'est pas trop tard!
A plus
Fab
 
Dernière édition:

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Comment faire une rechercheV de plusieurs criteres?

Voir pj

Donne la liste des enregistrements modifiés et colorie en jaune les champs modifiés.

Code:
Sub Changés()
  Application.ScreenUpdating = False
  Set f1 = Sheets("ancien")
  Set f2 = Sheets("nouveau")
  Set f3 = Sheets("changés")
  f3.[A2:O1000].ClearContents
  f3.[A2:O1000].Interior.ColorIndex = xlNone
  a = f1.Range("A1").CurrentRegion.Value
  b = f2.Range("A1").CurrentRegion.Value
  Set MonDico1 = CreateObject("Scripting.Dictionary")
  Set MonDico2 = CreateObject("Scripting.Dictionary")
  For i = 1 To UBound(a)
    temp = ""
    For k = 1 To UBound(a, 2): temp = temp & a(i, k): Next k
    MonDico1(temp) = ""
    MonDico2(a(i, 1)) = ""
  Next i
  ligne = 2
  For i = 2 To UBound(b)
    temp = ""
    For k = 1 To UBound(b, 2): temp = temp & b(i, k): Next k
    If MonDico2.exists(b(i, 1)) And Not MonDico1.exists(temp) Then
      Set temp = f1.Columns(1).Find(b(i, 1))
      For k = 1 To UBound(b, 2)
        f3.Cells(ligne, k) = b(i, k)
        If b(i, k) <> temp.Offset(, k - 1) Then f3.Cells(ligne, k).Interior.ColorIndex = 6
      Next k
      f3.Cells(ligne, k) = i
      ligne = ligne + 1
    End If
  Next
End Sub

JB
 

Pièces jointes

  • ComparaisonBD2.xls
    144 KB · Affichages: 104
  • ComparaisonBD2.xls
    144 KB · Affichages: 109
  • ComparaisonBD2.xls
    144 KB · Affichages: 111
Dernière édition:

Profane

XLDnaute Occasionnel
Re : Comment faire une rechercheV de plusieurs criteres?

Bonjour
interessant cette macro
seul GROS soucis c'est l erreur incompatibilité 13 sur la ligne "For k = 1 To UBound(a, 2): temp = temp & a(I, k): Next k"
quand je la transpose, une idee sur le pourquoi de la chose ???
j'ai beau cherché je ne vois pas l'erreur
Cordialement
 

Discussions similaires

Statistiques des forums

Discussions
312 352
Messages
2 087 539
Membres
103 583
dernier inscrit
CYP_CHZ