Comparaison 2 fichiers avec création d'un 3ème.

papewa

XLDnaute Nouveau
Bonjour à tous,

je vous explique ce que je souhaiterais faire précisément.

J'ai 2 fichiers EXCEL.

Sur chacun d'entre eux j'ai un identifiant commun qui devrait me permettre un appariement pour créer un 3ème tableau.

Je ne sais pas si je suis très clair mais rien ne vaut une description de mes données et ce que je veux obtenir.

1er fichier :

colonne A : exercice
colonne B : numéro de pièce
colonne C : montant

2nd fichier :

colonne A : exercice
colonne B : numéro de pièce
colonne C : nom

Comme vous vous en doutez les colonnes A et B constituent mon identifiant commun, et je souhaiterais à partir de celle-ci créer un nouveau fichier contenant sur chaque ligne 4 colonnes.

colonne A : exercice
colonne B : numéro de pièce
colonne C : montant
colonne D : nom

Une fois ce tableau obtenu ce ne serait pas encore terminé car le but final est la constitution d'un fichier de publipostage à adresser à chacun des destinataires.

Mais procédons étape par étape...

Merci de votre aide.
 

papewa

XLDnaute Nouveau
Re : Comparaison 2 fichiers avec création d'un 3ème.

Merci pour la réponse.

je n'ai pas pour l'instant les fichiers sous la main (je peux les récupérer lundi) mais voila un exemple de données que l'on peut rencontrer

Les 2 fichiers sont triés sur l'exercice en premier et sur le numéro de pièce en second.

Fichier n°1 : colonne A=exercice, colonne B = numéro de pièce, colonne C = montant

Cellule A1 = 1999 Cellule B1 = 512 Cellule C1 = 120
Cellule A2 = 2007 Cellule B2 = 236 Cellule C2 = 15
Cellule A3 = 2009 Cellule B3 = 512 (distingué de la ligne 1 par l'exercice) Cellule C3 = 5000
Cellule A4 = 2011 Cellule B4 = 914 Cellule C4 = 770

et ainsi de suite...

Fichier n° 2 : Colonne A = exercice, Colonne B = numéro de pièce, colonne C = nom

Cellule A1 = 2000 Cellule B1 = 33 Cellule C1 = DUPONT
Cellule A2 = 2001 Cellule B2 = 2526 Cellule C2 = MARTIN
Cellule A3 = 2007 Cellule B3 = 236 Cellule C3 = DURAND
Cellule A4 = 2008 Cellule B4 = 236 (distingué de la ligne 3 par l'exercice) Cellule C4 = DURAND (idem C3)
Cellule A5 = 2008 Cellule B5 = 825 Cellule C5 = PASCAL
Cellule A6 = 2011 Cellule B6 = 914 Cellule C6 = THIERRY
Cellule A7 = 2011 Cellule B7 = 3519 Cellule C7 = MARTIN

Au final 2 lignes sont apparéiées et sont donc reprises dans le 3ème tableau

2007 236 15 DURAND
2011 914 770 THIERRY

Il n'y a bien-sûr pas le même de lignes dans l'un et l'autre des fichiers d'origine.

A défaut de mise à disposition des fichiers j'espère avoir été clair.

Merci d'avance.
 

job75

XLDnaute Barbatruc
Re : Comparaison 2 fichiers avec création d'un 3ème.

Bonjour papewa, le forum,

Voici la macro :

Code:
Sub Comparer()
Dim F1 As Worksheet, F2 As Worksheet, tablo1, tablo2, ub&, i&, t$, j&, tablo3(), n&
On Error Resume Next
Set F1 = Workbooks("Classeur1.xls").Sheets("Feuil1") 'fichier et feuille à adapter
Set F2 = Workbooks("Classeur2.xls").Sheets("Feuil1") 'fichier et feuille à adapter
If Err Then MsgBox "Vérifier les noms des fichiers et des feuilles." & Chr(10) & _
  "Les 2 fichiers doivent être ouverts...": Exit Sub
On Error GoTo 0
tablo1 = F1.Range("A1:C" & F1.[A65536].End(xlUp).Row)
tablo2 = F2.Range("A1:C" & F2.[A65536].End(xlUp).Row)
ub = UBound(tablo2)
For i = 1 To UBound(tablo1)
  t = tablo1(i, 1) & tablo1(i, 2)
  For j = 1 To ub
    If tablo2(j, 1) & tablo2(j, 2) = t Then
      ReDim Preserve tablo3(3, n)
      tablo3(0, n) = tablo1(i, 1)
      tablo3(1, n) = tablo1(i, 2)
      tablo3(2, n) = tablo1(i, 3)
      tablo3(3, n) = tablo2(j, 3)
      n = n + 1
      Exit For
    End If
  Next
Next
If n = 0 Then MsgBox "Aucune ligne commune trouvée...": Exit Sub
Workbooks.Add 'nouveau document
ActiveSheet.[A1].Resize(n, 4) = Application.Transpose(tablo3)
'ensuite, si l'on veut, mise en forme et enregistrement
End Sub
Elle peut être placée dans n'importe quelle feuille de code.

Voyez les 2 fichiers joints zippés.

J'ai mis un bouton dans Classeur1.xls pour lancer la macro.

A+
 

Pièces jointes

  • Comparer(1).zip
    18 KB · Affichages: 59

job75

XLDnaute Barbatruc
Re : Comparaison 2 fichiers avec création d'un 3ème.

Re,

Voyez maintenant avec cette version (2) comment on peut mettre en forme et enregistrer le nouveau fichier.

Bien noter qu'à cause du format monétaire en colonne C, il faut écrire :

Code:
If IsNumeric(CStr(tablo1(i, 3))) Then tablo3(2, n) = CDbl(tablo1(i, 3)) _
  Else tablo3(2, n) = tablo1(i, 3) 'à cause du format monétaire
A+
 

Pièces jointes

  • Comparer(2).zip
    21.1 KB · Affichages: 58

job75

XLDnaute Barbatruc
Re : Comparaison 2 fichiers avec création d'un 3ème.

Bonjour papewa, le forum,

Il y a plus simple pour traiter les nombres monétaires/décimaux.

Remplacer la virgule par le point :

Code:
tablo3(2, n) = Replace(tablo1(i, 3), ",", ".") 'à cause des nombres décimaux
Et on peut déclarer tablo3() As String - tablo3$() - c'est plus rapide d'exécution.

Version (3).

A+
 

Pièces jointes

  • Comparer(3).zip
    20.1 KB · Affichages: 51

Discussions similaires

Statistiques des forums

Discussions
312 782
Messages
2 092 063
Membres
105 176
dernier inscrit
Arnaud.sam