Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comparer trois fichiers excel

4 réponses
Avatar
Bruno
Bonjour,

J'utilise Windows 2000 et excel 2000. j'ai trois fichiers , 1 de 2006,
l'autre de 2007 et le 3e de 2008 que je veux comparer pour isoler ce qui
dans le fichier le plus ancien ne se trouve plus dans le fichier suivant, et
ainsi de suite
Les fichiers sont similaires , bien pas identiques strictement (Quelques
champs différent ou sont en plus ou en moins et pas dans le même ordre), mais
ils comportent un index commun, le n° de contrat
chacun compte environ 2500 lignes
Lorsque j'ai identifié ce qui ne se trouve plus dans le fichier 2007 par
rapport au fichier 2006, je souhaite faire une copie des enregistrements en
question et les insérer dans un onglet supplémentaire, crée pour la
circonstance.
J'ai le même besoin pour identifier ce qui se trouve dans le fichier 2007 et
qui ne se trouvait pas dans le fichier 2006 et aisni de suite.
Y a t-il une bonne âme qui accepte de m'aider à batir la macro qui me
permettrait cette analyse ?
Mille mercis d'avance,
Bruno

4 réponses

Avatar
Bruno
Bonjour et merci de t'intéresser à mon problème
Mes fichiers sont des fichiers donnant un état de mon portefeuille de
contrats au 31/12 de chaque année.
Je souhaite seulement, dans un premier temps, copier dans un autre fichier
la ligne complète correspondant au contrat présent en n et ce qui n'est plus
dans le fichier n+1
Mes données sont regroupées dans un classeur qui regroupe l'onglet 2006,
l'onglet 2007 et l'onglet 2008. Je souhaite faire cette analyse uniquement en
copiant la ligne complète dès lors que la clé commune à tous les fichiers (le
n° de contrat) n'est plus présente dans le fichier n+1 par rapport à n.

Je ne suis pas très doué en macro et l'utilisation de recherchev est
fastidieuse et ne répond pas complètement à mon besoin.

Merci de ta patience.
PS je ne peux pas te montrer mes fichiers : Il s'agit de données
confidentielles.

"MichDenis" a écrit :

Bonjour Bruno,

La présentation de ton problème oublie l'essentiel :

Que doit-on comparer d'un classeur à l'autre ?

Le champ index de chacun des tableaux ?
La valeur de chaque champ des tableaux ?

En fait, comment définis-tu la "différence" entre tes tableaux ?
Comment veux-tu traiter les champs qui sont propres à chaque tableau?

Est-ce que chaque classeur à plus d'un feuille contenant un tableau ?
Si oui, désires-tu traiter chaque feuille du classeur ?





"Bruno" a écrit dans le message de groupe de discussion :
Bonjour,

J'utilise Windows 2000 et excel 2000. j'ai trois fichiers , 1 de 2006,
l'autre de 2007 et le 3e de 2008 que je veux comparer pour isoler ce qui
dans le fichier le plus ancien ne se trouve plus dans le fichier suivant, et
ainsi de suite
Les fichiers sont similaires , bien pas identiques strictement (Quelques
champs différent ou sont en plus ou en moins et pas dans le même ordre), mais
ils comportent un index commun, le n° de contrat
chacun compte environ 2500 lignes
Lorsque j'ai identifié ce qui ne se trouve plus dans le fichier 2007 par
rapport au fichier 2006, je souhaite faire une copie des enregistrements en
question et les insérer dans un onglet supplémentaire, crée pour la
circonstance.
J'ai le même besoin pour identifier ce qui se trouve dans le fichier 2007 et
qui ne se trouvait pas dans le fichier 2006 et aisni de suite.
Y a t-il une bonne âme qui accepte de m'aider à batir la macro qui me
permettrait cette analyse ?
Mille mercis d'avance,
Bruno


Avatar
Bruno
Bonsoir,
Je vais essayer demain, mais j'ai besoin d'une précision de ta part : dans
le code que tu me proposes, je ne sais pas identifier comment la macro va
prendre en compte le champs n° de contrat pour comparer les différents
fichiers ? faut-il que le champ en question soit situé en colonne A pour les
différents onglets ou bien cela n'a-t-il aucune importance ? Si cela n'a
aucune importance, peux-tu me commenter la syntaxe de ta macro, je ne
comprends pas comment elle peut identifier les différences ?
Mille mercis d'avance pour ta patience, mais c'est très important pour moi.
Buena noce !

"MichDenis" a écrit :

Tu peux essayer ceci :

Tu places ceci dans un module standard dans le
classeur où tu as tes 3 onglets regroupés.

Nom des onglets des feuilles retenues :
2006 , 2007 , 2008

Le résultat sera dans une nouvelle feuille appelée "Résultats"

'------------------------------------------------------------
Sub test()

Dim Sh As Worksheet
Dim Sh1 As Worksheet, R As Worksheet
Dim Rg As Range, Rg1 As Range, C As Range
Dim Arr(), Arr1(), X As Integer
'Nom des feuilles dans tableau
Arr = Array("2006", "2007")
Arr1 = Array("2007", "2008")

Application.ScreenUpdating = False
On Error Resume Next
Application.DisplayAlerts = False
Worksheets("Résultats").Delete
Application.DisplayAlerts = True
'Ajout une feuille pour le résultat
Set R = Worksheets.Add
R.Name = "Résultats"

For Each elt In Arr
Set Sh = Worksheets(elt)
Set Sh1 = Worksheets(Arr1(X))
X = X + 1

With Sh
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With
With Sh1
Set Rg1 = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With

For Each C In Rg
If IsError(Application.Match(C, Rg1, 0)) Then
C.EntireRow.Copy R.Range("A" & R.Range("A65536").End(xlUp)(2).Row)
Err.Clear
End If
Next
If X = 1 Then R.Range("A" & R.Range("A65536").End(xlUp)(2).Row).Value = _
"Année suivante"
Next
Sh1.Range("A1").EntireRow.Copy R.Range("A1")
End Sub
'------------------------------------------------------------




"Bruno" a écrit dans le message de groupe de discussion :
Bonjour et merci de t'intéresser à mon problème
Mes fichiers sont des fichiers donnant un état de mon portefeuille de
contrats au 31/12 de chaque année.
Je souhaite seulement, dans un premier temps, copier dans un autre fichier
la ligne complète correspondant au contrat présent en n et ce qui n'est plus
dans le fichier n+1
Mes données sont regroupées dans un classeur qui regroupe l'onglet 2006,
l'onglet 2007 et l'onglet 2008. Je souhaite faire cette analyse uniquement en
copiant la ligne complète dès lors que la clé commune à tous les fichiers (le
n° de contrat) n'est plus présente dans le fichier n+1 par rapport à n.

Je ne suis pas très doué en macro et l'utilisation de recherchev est
fastidieuse et ne répond pas complètement à mon besoin.

Merci de ta patience.
PS je ne peux pas te montrer mes fichiers : Il s'agit de données
confidentielles.

"MichDenis" a écrit :

> Bonjour Bruno,
>
> La présentation de ton problème oublie l'essentiel :
>
> Que doit-on comparer d'un classeur à l'autre ?
>
> Le champ index de chacun des tableaux ?
> La valeur de chaque champ des tableaux ?
>
> En fait, comment définis-tu la "différence" entre tes tableaux ?
> Comment veux-tu traiter les champs qui sont propres à chaque tableau?
>
> Est-ce que chaque classeur à plus d'un feuille contenant un tableau ?
> Si oui, désires-tu traiter chaque feuille du classeur ?
>
>
>
>
>
> "Bruno" a écrit dans le message de groupe de discussion :
> Bonjour,
>
> J'utilise Windows 2000 et excel 2000. j'ai trois fichiers , 1 de 2006,
> l'autre de 2007 et le 3e de 2008 que je veux comparer pour isoler ce qui
> dans le fichier le plus ancien ne se trouve plus dans le fichier suivant, et
> ainsi de suite
> Les fichiers sont similaires , bien pas identiques strictement (Quelques
> champs différent ou sont en plus ou en moins et pas dans le même ordre), mais
> ils comportent un index commun, le n° de contrat
> chacun compte environ 2500 lignes
> Lorsque j'ai identifié ce qui ne se trouve plus dans le fichier 2007 par
> rapport au fichier 2006, je souhaite faire une copie des enregistrements en
> question et les insérer dans un onglet supplémentaire, crée pour la
> circonstance.
> J'ai le même besoin pour identifier ce qui se trouve dans le fichier 2007 et
> qui ne se trouvait pas dans le fichier 2006 et aisni de suite.
> Y a t-il une bonne âme qui accepte de m'aider à batir la macro qui me
> permettrait cette analyse ?
> Mille mercis d'avance,
> Bruno


Avatar
Bruno
Bonjour,
La macro fonctionne, mais elle transfere dans l'onglet "résultats"
l'ensemble du fichier "2006" avec la ligne d'entête.

En l'utilisant, je m'aperçois que les champs ne sont pas exactement dénommés
de manière identique, bien qu'ils contiennent le même type de données et
d'autre part le fichier "2006" est moins riche que les fichiers suivants
(moins de champs), d'ou mon besoin de copier la ligne entière, sachant que
les années suivantes les champs sont placés dans un ordre d'ifférent.

Est-il possible avec une telle macro de procéder ligne par ligne et de
valider au coup par coup ?
Peut-on aussi colorier dans le fichier d'origine 2006 les lignes que l'on ne
retrouve pas dans le fichier "2007" en limitant la zonne coloriée aux seules
cellules corespondant à l'ensemble des colonnes utilisées par la BdD, en
considérant que le seul critère de cette selection est le n° de contrat situé
en colonne A ?

Le fait qu'il y ait des lignes vides au dessus de la zone d'entête de champs
du fichier "2006"peut-il être perturbateur ?
Merci de ton aide,
Cordialement
Bruno

"MichDenis" a écrit :

Ajout de commentaires à la procédure :

'------------------------------------------------------------
Sub test()

Dim Sh As Worksheet
Dim Sh1 As Worksheet, R As Worksheet
Dim Rg As Range, Rg1 As Range, C As Range
Dim Arr(), Arr1(), X As Integer


'2 variables de type tableau (array) utilisées dans 2 grandes
boucles pour identifier la feuille source que tu as appelée N
avec la feuille comparée N+1
Arr = les 2 feuilles sources
arr1 = les 2 feuille N+1
'Nom des feuilles dans tableau
Arr = Array("2006", "2007")
Arr1 = Array("2007", "2008")

'Ajout d'une feuille Résultats au classeur.
'Si une feuille portant existe déjà, la procédure
'commence par la supprimer.
Application.ScreenUpdating = False
On Error Resume Next
Application.DisplayAlerts = False
Worksheets("Résultats").Delete
Application.DisplayAlerts = True
'Ajout une feuille pour le résultat
Set R = Worksheets.Add
R.Name = "Résultats"

'Pour chacune des feuilles contenues dans le tableau arr
For Each elt In Arr
'2 variables objets de type Worksheets
Set Sh = Worksheets(elt) 'Feuille source N
Set Sh1 = Worksheets(Arr1(X)) 'feuille comparée N+1
X = X + 1

With Sh
'Identifier la plage de cellules de la feuille source contenant
Le numéro de contrat. J'ai supposé que c'était en colonne A:A
Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With
With Sh1
'identifier la plage de cellules de la feuille comparée où sont
'les numéros de contrats.
Set Rg1 = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
End With

'pour chacune des cellules de la feuille source contenant les numros
'de contrats, Test pour savoir si ces numéros existent dans la
feuille n+1
For Each C In Rg
If IsError(Application.Match(C, Rg1, 0)) Then
'Si le numéro de contrat de la feuille source n'existe pas
dans la feuille
'comparée, copie de la ligne dans la nouvelle feuille.
C.EntireRow.Copy R.Range("A" &
R.Range("A65536").End(xlUp)(2).Row)
Err.Clear
End If
Next
'La ligne suivante n'existe que pour signifier une scission entre les
2 grandes
'Boucles
'A ) comparaison feuille entre 2006, 2007
'B ) comparaison feuille entre 2007, 2008
'il y aura une ligne où il sera inscrit :Année suivante... tu
remplaces par ce que tu veux !
If X = 1 Then R.Range("A" & R.Range("A65536").End(xlUp)(2).Row).Value
= _
"Année suivante"
Next
'J'ai supposé que tes 3 feuilles de données avaient une ligne d'en-tête
'Cette ligne de code reproduit cette ligne dans la nouvelle feuille.
Sh1.Range("A1").EntireRow.Copy R.Range("A1")
End Sub
'------------------------------------------------------------



"Bruno" a écrit dans le message de
groupe de discussion :

Bonsoir,
Je vais essayer demain, mais j'ai besoin d'une précision de ta part :
dans
le code que tu me proposes, je ne sais pas identifier comment la macro va
prendre en compte le champs n° de contrat pour comparer les différents
fichiers ? faut-il que le champ en question soit situé en colonne A pour
les
différents onglets ou bien cela n'a-t-il aucune importance ? Si cela n'a
aucune importance, peux-tu me commenter la syntaxe de ta macro, je ne
comprends pas comment elle peut identifier les différences ?
Mille mercis d'avance pour ta patience, mais c'est très important pour
moi.
Buena noce !

"MichDenis" a écrit :

> Tu peux essayer ceci :
>
> Tu places ceci dans un module standard dans le
> classeur où tu as tes 3 onglets regroupés.
>
> Nom des onglets des feuilles retenues :
> 2006 , 2007 , 2008
>
> Le résultat sera dans une nouvelle feuille appelée "Résultats"
>
> '------------------------------------------------------------
> Sub test()
>
> Dim Sh As Worksheet
> Dim Sh1 As Worksheet, R As Worksheet
> Dim Rg As Range, Rg1 As Range, C As Range
> Dim Arr(), Arr1(), X As Integer
> 'Nom des feuilles dans tableau
> Arr = Array("2006", "2007")
> Arr1 = Array("2007", "2008")
>
> Application.ScreenUpdating = False
> On Error Resume Next
> Application.DisplayAlerts = False
> Worksheets("Résultats").Delete
> Application.DisplayAlerts = True
> 'Ajout une feuille pour le résultat
> Set R = Worksheets.Add
> R.Name = "Résultats"
>
> For Each elt In Arr
> Set Sh = Worksheets(elt)
> Set Sh1 = Worksheets(Arr1(X))
> X = X + 1
>
> With Sh
> Set Rg = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
> End With
> With Sh1
> Set Rg1 = .Range("A1:A" & .Range("A65536").End(xlUp).Row)
> End With
>
> For Each C In Rg
> If IsError(Application.Match(C, Rg1, 0)) Then
> C.EntireRow.Copy R.Range("A" &
R.Range("A65536").End(xlUp)(2).Row)
> Err.Clear
> End If
> Next
> If X = 1 Then R.Range("A" &
R.Range("A65536").End(xlUp)(2).Row).Value = _
> "Année suivante"
> Next
> Sh1.Range("A1").EntireRow.Copy R.Range("A1")
> End Sub
> '------------------------------------------------------------
>
>
>
>
> "Bruno" a écrit dans le message de
groupe de discussion :

> Bonjour et merci de t'intéresser à mon problème
> Mes fichiers sont des fichiers donnant un état de mon portefeuille de
> contrats au 31/12 de chaque année.
> Je souhaite seulement, dans un premier temps, copier dans un autre
fichier
> la ligne complète correspondant au contrat présent en n et ce qui
n'est plus
> dans le fichier n+1
> Mes données sont regroupées dans un classeur qui regroupe l'onglet
2006,
> l'onglet 2007 et l'onglet 2008. Je souhaite faire cette analyse
uniquement en
> copiant la ligne complète dès lors que la clé commune à tous les
fichiers (le
> n° de contrat) n'est plus présente dans le fichier n+1 par rapport à
n.
>
> Je ne suis pas très doué en macro et l'utilisation de recherchev est
> fastidieuse et ne répond pas complètement à mon besoin.
>
> Merci de ta patience.
> PS je ne peux pas te montrer mes fichiers : Il s'agit de données
> confidentielles.
>
> "MichDenis" a écrit :
>
> > Bonjour Bruno,
> >
> > La présentation de ton problème oublie l'essentiel :
> >
> > Que doit-on comparer d'un classeur à l'autre ?
> >
> > Le champ index de chacun des tableaux ?
> > La valeur de chaque champ des tableaux ?
> >
> > En fait, comment définis-tu la "différence" entre tes tableaux ?
> > Comment veux-tu traiter les champs qui sont propres à chaque tableau?
> >
> > Est-ce que chaque classeur à plus d'un feuille contenant un tableau ?
> > Si oui, désires-tu traiter chaque feuille du classeur ?
> >
> >
> >
> >
> >
> > "Bruno" a écrit dans le message de
groupe de discussion :

> > Bonjour,
> >
> > J'utilise Windows 2000 et excel 2000. j'ai trois fichiers , 1 de 2006,
> > l'autre de 2007 et le 3e de 2008 que je veux comparer pour isoler ce
qui
> > dans le fichier le plus ancien ne se trouve plus dans le fichier
suivant, et
> > ainsi de suite
> > Les fichiers sont similaires , bien pas identiques strictement
(Quelques
> > champs différent ou sont en plus ou en moins et pas dans le même
ordre), mais
> > ils comportent un index commun, le n° de contrat
> > chacun compte environ 2500 lignes
> > Lorsque j'ai identifié ce qui ne se trouve plus dans le fichier 2007
par
> > rapport au fichier 2006, je souhaite faire une copie des
enregistrements en
> > question et les insérer dans un onglet supplémentaire, crée pour la
> > circonstance.
> > J'ai le même besoin pour identifier ce qui se trouve dans le fichier
2007 et
> > qui ne se trouvait pas dans le fichier 2006 et aisni de suite.
> > Y a t-il une bonne âme qui accepte de m'aider à batir la macro qui
me
> > permettrait cette analyse ?
> > Mille mercis d'avance,
> > Bruno



Avatar
xlcomparator
Bruno a écrit le 18/04/2009 à 11h51 :
Bonjour,

J'utilise Windows 2000 et excel 2000. j'ai trois fichiers , 1 de 2006,
l'autre de 2007 et le 3e de 2008 que je veux comparer pour isoler ce qui
dans le fichier le plus ancien ne se trouve plus dans le fichier suivant, et
ainsi de suite
Les fichiers sont similaires , bien pas identiques strictement (Quelques
champs différent ou sont en plus ou en moins et pas dans le même
ordre), mais
ils comportent un index commun, le n° de contrat
chacun compte environ 2500 lignes
Lorsque j'ai identifié ce qui ne se trouve plus dans le fichier 2007 par

rapport au fichier 2006, je souhaite faire une copie des enregistrements en
question et les insérer dans un onglet supplémentaire,
crée pour la
circonstance.
J'ai le même besoin pour identifier ce qui se trouve dans le fichier 2007
et
qui ne se trouvait pas dans le fichier 2006 et aisni de suite.
Y a t-il une bonne âme qui accepte de m'aider à batir la macro qui
me
permettrait cette analyse ?
Mille mercis d'avance,
Bruno


Bonjour,
une solution ne nécessitant pas de passer par la programmation d'une macro, XlComparator ici :
http://www.xlcomparator.net/
Il faut faire la manip en 2 fois: comparer d'abord les fichier 2006 et 2007, puis les fichiers 2007 et 2008.
A chaque fois, il faut utiliser la colonne n° de contrat comme colonne de référence.
A+
Marc