Macro VBA Excel : Comparaison des deux 1ères colonnes de 2 fichiers Excel


Bonsoir,

J'ai une question concernant VBA, merci pour les réponses concernant les formules, j'ai acheté un livre pour m'y remettre et ça va mieux. Le plus dur a été de s'y remettre.
Sinon, je me suis remis à faire du VB et ça bogue un peu.
Donc voici ce que je cherche :


Bonjour, j'ai 1 objectif que j'atteins étape par étape, donc, je teste au fur à mesure ce que je fais et sais faire.
Donc, mon objectif final, ce n'est pas grave si je l'obtient pas car je le cherche.
Mais, j'ai 1 objectif intermédiare que je n'ai pas atteint et je bloque, je souhaite passer cette étape.
L'objectif final : Comparer l'égalité des colonnes B du fichier 1 avec la colonne B du fichier 2
Sachant que la colonne du fichier 2 est classé de 1 à x (ex : de 1 à 1000, colonne A)
Le 1er fichier est un ancien fichier classé qui est le même fichier trier selon une autre colonne, la colonne A, les 1 à x (c'est à dire 1 à 1000 dans le désordre, le fichier est sauvegardé et comparé au fichier mis à jour quand j'ai le temps)
Sauf que sur la colonne B, des modifications sont faites.
Donc, par rapport au 1er fichier, la 1ère colonne A ne change pas, de 1 à 1000, mais est dans le désordre, la colonne B, elle, change, elle n'est plus la même.
Donc, je dois vérifier si le contenu de la colonne B correspond dans les fichies au même numéro de la colonne A qui reste invariant, mais, classé dans le désordre.
Le 1er fichier de référence, la colonne A reste la même, s'il y a eu 5 fichiers diffarents, la colonne A est inchagée, triée dans le désordre, mais, des modifications ont pu avoir lieu dans la Colonne B durant toute l'année, le but est de faire en sorte que le 1er fichier, la colonne A reste inchangée, mais, la colonne B est mise à jour.
Voilà ce que je cherche à faire.
La seule chose, c'est que dans ce fichier, des lignes peuvent être rajoutées, la colonne A se rajoute, elle ne varie pas, mais change dans l'ordre, la ligne B attribuée, elle, est liée à la ligne A, mais continue a évoluée, donc, je ne peux pas dire que la ligne A reste fixe, elle change.

Exemple :
J'ai 100 lignes, colonne A : De la ligne 1 à 100, la colonne B correspond à une colonne A fixe
Une fois les lignes C, D ou autres triées, j'ai A qui n'est plus trié, B correspond, mais au fil du temps, elle change de valeur.
A la fin de l'année, je veux que A soit toujours trié pareil, mais B a changé, je veux juste mettre à jour B avec A correspondant, tjrs de 1 à 100.
J'ai testé une routine pas à pas, mais quand tout marche et que je teste le tout, ça ne marche plus.
Mon boulot me prenant assez de temps et étant donné que je dois faire un bilan en fin d'année sur mes comptes postaux, j'ai du mal à tout trier, donc, si quelqu'un a une meilleure routine ou une idée, je suis intéressé.

Pour faire plus vite, j'ai décidé de coller une colonne dans une autre et de tout faire dans un seul fichier, mais si je peux faire ça à partir de 2 fchiers différents, ça peut m'aider.

Donc, si je peux trouver une astuce pour aller plus vite ou si je me suis tromper dans mon idée, merci de me l'indiquer :

J'ai pris le fichier 1, j'ai copié la 1ère colonne dans la colonne A et la colonne B dans la colonne D du nouveau fichier.
J'ai pris le 2ème fichier, j'ai copié la colonne A dans la colonne B du nouveau fichier et la colonne B dans la colonne C du nouveau fichier.
Ensuite, j'ai comparé la colonne A avec la Colonne B, quand j'ai égalité entre la colonne A et B, j'écrase la colonne C par la colonne D car la colonne D est plus récente que la colonne C.
Voilà. Si j'arrive à faire celà, j'ai gagné du temps, mais, si je peux ne pas avoir à faire ces copier coler et comparer ces deux fichiers, ce sera mieux, si quelqu'un a une solution, merci.

Sujet : Comparer les colonnes dans l'ordre du fichier 1 avec la colonne du fichier 2, dans le désordre; Si la colonne B du fichier 2 est différente que la colonne B du fichier 1 en fonction du numéro de la colonne A, alors, écraser la colonne B du fichier 1.

Voici ce que j'ai fait,

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
Sub Comparaison() 
' 
' transfert Macro 
' Macro enregistrée le 09/01/2007 par laurenterc 
' 
  Dim ObjetClasseur As Workbook 
  Dim Lig     As Long 
  Dim Lign    As Long 
  Dim Col     As String 
  Dim Colonn  As String 
  Dim NbrLig  As Long 
  Dim NumLig  As Long 
  Dim NombLig  As Long 
  Dim NbsupLig  As Long 
  Dim Val     As Long 
 
  ' Set ObjetClasseur = GetObject("D:\Donnees\DossierEric\Bilan_Annuel.xls") 
  ' Set ObjetClasseur = GetObject("D:\An2007\Eric\Total.xls") 
 '  A ne pas considérer, seulement si je vais chercher les fichiers dans 2 dossiers différents
 
  Sheets("Feuil1").Activate ' feuille de destination 
  Col = "A" ' Colonne à tester 
  Colonn = "B" ' Colonne de référence 
  NumLig = 0 
  NbsupLig = 0 
  With Sheets("Feuil2") ' feuille source 
    NbrLig = .Cells(65536, Col).End(xlUp).Row 
    NombLig = .Cells(65536, Col).End(xlUp).Row 
  For Lig = 1 To NbrLig 
  If .Cells(Lig, Col).Value <> "" Then 
    Val = .Cells(Lig, Col).Range("A1") 
      For Lign = 1 To NombLig 
        If .Cells(Lign, Colonn).Value <> "" Then 
          .Cells(Lign, Colonn).Range("B1").Select 
            If Val = .Cells(Lign, Colonn).Value Then 
            .Cells(Lign, Colonn).Range("C1").Copy 
            .Cells(Lig, Col).Range("D1").Paste 
            End If 
            NombLig = NombLig + 1 
            Cells(NombLig, 1).Select 
          End If 
      Next 
  End If 
  NumLig = NumLig + 1 
  Cells(NumLig, 1).Select 
  Next 
  End With 
 
' 
    ActiveWorkbook.Save 
    Application.WindowState = xlMinimized 
    Application.WindowState = xlNormal 
    Application.WindowState = xlMinimized 
    Range("A1").Select 
    Cells.Find(What:="lan", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _ 
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False) _ 
        .Activate 
    Range("F64").Select 
    ActiveWorkbook.Save 
    ActiveWorkbook.Save 
    ActiveWorkbook.Save 
    ActiveWorkbook.Save 
    ActiveWorkbook.Save 
End Sub