Votre question

Macro VBA Excel : Comparer colonne A de deux fichiers

Tags :
  • Microsoft Excel
  • Programmation
Dernière réponse : dans Programmation
10 Janvier 2007 18:27:39

Bonjour,

Voici ce que je cherche à faire :

Je veux comparer la ligne A de la feuille 1 avec la ligne A de la feuille 2, la ligne est la mçeme, de 1 à x sauf que dans la feuille 1, la ligne est dans l'ordre croissant, dans la feuille 2, les numéros sont dans le désordre, quand je retrouve le numéro de ligne de la feuille 1 dans la feuille 2, j'écrase la ligne B de la feuille 1 par la ligne B de la feuille 2.
(En fait, ce sont mêmes deux fichiers différents, et la première feuille de chaque classeur que je classe).
Afin de faire un test sans me préoccuper des autres colonnes, j'ai tout collé dans la feuille 3 d'un nouveau classeur, la ligne A du 1er fichier est dans la colonne A, la colonne A du second fichier est dans la colonne B, la colonne B du second fichier est dans la colonne C et la colonne B du 1er fichier est dans la colonne D, c'est là où je fais le test, la syntaxe est bonne, mais, quand je lance la macro, pour l'instant, VB reste en cours d'exécution et ne répond pas, j'imagine que la boucle tourne à l'infini ou que VB n'arrive pas à exécuter une instruction.
C'est là où je coince.

Mais, si quelqu'un a déjà écrit une macro de ce style, peut-être plus simple ou connait mon erreur, je suis intéressé.



En fait, mon problème était la boucle, j'ai trouvé, je n'étais pas dans la bonne feuille de test : Feuil3, c'est erreur est surmontée, maintenant, c'est .Cells(Lig, Col).Range("E1").Paste que Vb n'accèpte pas.

Le problème est que je ne peux pas trier la colonne B, des tris dans les autres cellules F, G, H doivent rester les mêmes.
Par ailleurs, les fichiers se succèdent, mais, bien souvent de nombreuses lignes ont été rajoutées, je dois faire une boucle sur m lignes dans la colonne A et n lignes sur la colonne B, mais, pour mon test, on ne se préoccupe pas de ces lignes, seules les 4 colonnes de A à D comptent ici.

Exemple :
Colonne A
1
2
3
4
5
6
etc...

liée à A
Colonne D
accepter
voir
faire
surveiller
compter
aller
etc...

Colonne B
5
2
3
1
4
6
etc...

liée à B
Colonne C
compter
voir
faire
accepter
surveiller
aller
etc...

sauf que cette colonne B est mise à jour, on peut donc avoir ceci :
liée à B
Colonne C
clôturer
voir
faire
trouver
surveiller
aller
etc...

Une fois que j'ai fait correspondre le numéro 6 de la colonne A au numéro 6 de la colonne B, je ne me pose pas de question, les informations de la colonne C mis à jour, je les copie et les colonnes dans la colonne D, j'écrase la colonne D entièrement en respectant le numéro de la colonne A, de 1 à 6, ici.


Ma macro :

Sub Offset()
'
' Offset Macro
' Macro enregistrée le 10/01/2007 par laurenterc
' 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

' ("D:\Donnees\DossierEric\Bilan_Annuel.xls")
' Set ObjetClasseur = GetObject("D:\An2007\Eric\Total.xls")
Sheets("Feuil3").Activate ' feuille de destination
Col = "A" ' Colonne à tester
Colonn = "B" ' Colonne de référence
NumLig = 0
NbsupLig = 0
With Sheets("Feuil3") ' feuille source
NbrLig = .Cells(65536, Col).End(xlUp).Row
NombLig = .Cells(65536, Col).End(xlUp).Row
For Lig = 1 To NbrLig
ActiveCell.Offset(1, 0).Range("A1").Select
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(Lign, 6).Select
ActiveSheet.Paste
' Destination:=Worksheets("Feuil3").Range("E1")
End If
NombLig = NombLig + 1
Cells(NombLig, 1).Select
End If
Next
End If
NumLig = NumLig + 1
Cells(NumLig, 1).Select
Next
End With

'
End Sub

Autres pages sur : macro vba excel comparer colonne fichiers

7 Février 2007 09:10:55

ton message m'a paru un peu compliqué mai j'ai un problème du même genre : dans mon classeur j'ai une première feuille avec des codes en colonnes B et je veux vérifier que ces codes existent dans la colonne A de la feuille 2. Si le code existe, je recopie la ligne a la suite en fonction d'un code un ou deux de ma colonne C de la feuille 1. Est ce que quelqu'un pourrait m'aider??? Merci. P.S : c'est plutôt urgent!
4 Juillet 2009 15:27:35

Messieurs,
je crois que la solution à votre problème se trouve là : XlComparator
A+
Marc
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS