comparer deux feuilles excel

Le
claude
bonjour (soir ) à tous
j'aimagine que ma question est récurrente
j'ai deux feuilles contenant pas mal de lignes (plusieurs milliers)
j'aimerai écrire une macro qui parte d'une feuille, aille dans l'autre
feuille marquer (en couleur par exemple) ceux qui ne sont pas dans la
feuille

j'ai pensé à boucler sur chaque ligne avec un find sur l'autre feuille, mais
j'ai peur que çà soit très long pour plusieurs milliers de lignes
correct ou çà va durer des heures ???

merci d'avance
claude
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Papyjac
Le #18039091
Bonjour Claude

Pour ce type de problème j'utilise la méthode suivante :
1. Je me positionne dans l'onglet source
2. Je stocke en mémoire les colonnes dont j'ai besoin dans un tableau T1 en
mémoire
3. Je me positionne dans l'onglet cible
4. Je stocke en mémoire les colonnes dont j'ai besoin dans un tableau T2 en
mémoire
5. Je comprare en mémoire les colonnes que je souhaite et détecte les
différences ou les ressemblances
6. Je restitue le résultat dans l'onglet cible (ou source) mais il faut
éviter d'utiliser une couleur, mieux vaut ajouter une colonne résultat VRAI
ou faux
7. Tu exploites manuellement ce résultat à ta convenance avec des tri des
filtres ....

Je n'ai rien trouvé de plus performant car je ne lit qu'une seule fois
chaque onglet
Et la comparaison en mémoire est quasi immédiate
Bien penser à supprimer le mode de calcul automatique et le raffrachissement
d'écran


--
Papyjac


"claude" a écrit :

bonjour (soir ) à tous
j'aimagine que ma question est récurrente ...
j'ai deux feuilles contenant pas mal de lignes (plusieurs milliers)
j'aimerai écrire une macro qui parte d'une feuille, aille dans l'autre
feuille marquer (en couleur par exemple) ceux qui ne sont pas dans la
feuille

j'ai pensé à boucler sur chaque ligne avec un find sur l'autre feuille, mais
j'ai peur que çà soit très long pour plusieurs milliers de lignes
correct ou çà va durer des heures ???

merci d'avance
claude





claude
Le #18039291
bonne idée
merci
;-))
claude


"Papyjac" news:
Bonjour Claude

Pour ce type de problème j'utilise la méthode suivante :
1. Je me positionne dans l'onglet source
2. Je stocke en mémoire les colonnes dont j'ai besoin dans un tableau T1
en
mémoire
3. Je me positionne dans l'onglet cible
4. Je stocke en mémoire les colonnes dont j'ai besoin dans un tableau T2
en
mémoire
5. Je comprare en mémoire les colonnes que je souhaite et détecte les
différences ou les ressemblances
6. Je restitue le résultat dans l'onglet cible (ou source) mais il faut
éviter d'utiliser une couleur, mieux vaut ajouter une colonne résultat
VRAI
ou faux
7. Tu exploites manuellement ce résultat à ta convenance avec des tri des
filtres ....

Je n'ai rien trouvé de plus performant car je ne lit qu'une seule fois
chaque onglet
Et la comparaison en mémoire est quasi immédiate
Bien penser à supprimer le mode de calcul automatique et le
raffrachissement
d'écran


--
Papyjac


"claude" a écrit :

bonjour (soir ) à tous
j'aimagine que ma question est récurrente ...
j'ai deux feuilles contenant pas mal de lignes (plusieurs milliers)
j'aimerai écrire une macro qui parte d'une feuille, aille dans l'autre
feuille marquer (en couleur par exemple) ceux qui ne sont pas dans la
feuille

j'ai pensé à boucler sur chaque ligne avec un find sur l'autre feuille,
mais
j'ai peur que çà soit très long pour plusieurs milliers de lignes
correct ou çà va durer des heures ???

merci d'avance
claude







claude
Le #18039871
merci de l'idée
en fait j'ai essayé par le méthode find en jonglant d'une feuille à l'autre
excel est tellement puissant que çà ne prend pas beaucoup de temps

mais c'est toujours bon de comparer les idées
et puis le simple fait d'exposer son problème permet d'avancer
:--))
claude





"Papyjac" news:
Bonjour Claude

Pour ce type de problème j'utilise la méthode suivante :
1. Je me positionne dans l'onglet source
2. Je stocke en mémoire les colonnes dont j'ai besoin dans un tableau T1
en
mémoire
3. Je me positionne dans l'onglet cible
4. Je stocke en mémoire les colonnes dont j'ai besoin dans un tableau T2
en
mémoire
5. Je comprare en mémoire les colonnes que je souhaite et détecte les
différences ou les ressemblances
6. Je restitue le résultat dans l'onglet cible (ou source) mais il faut
éviter d'utiliser une couleur, mieux vaut ajouter une colonne résultat
VRAI
ou faux
7. Tu exploites manuellement ce résultat à ta convenance avec des tri des
filtres ....

Je n'ai rien trouvé de plus performant car je ne lit qu'une seule fois
chaque onglet
Et la comparaison en mémoire est quasi immédiate
Bien penser à supprimer le mode de calcul automatique et le
raffrachissement
d'écran


--
Papyjac


"claude" a écrit :

bonjour (soir ) à tous
j'aimagine que ma question est récurrente ...
j'ai deux feuilles contenant pas mal de lignes (plusieurs milliers)
j'aimerai écrire une macro qui parte d'une feuille, aille dans l'autre
feuille marquer (en couleur par exemple) ceux qui ne sont pas dans la
feuille

j'ai pensé à boucler sur chaque ligne avec un find sur l'autre feuille,
mais
j'ai peur que çà soit très long pour plusieurs milliers de lignes
correct ou çà va durer des heures ???

merci d'avance
claude







Fredo P
Le #18040261
JB n'étant pas la pour te répondre, trois routine de sa composition
Sub ComparaisonChamp()
t = Timer()
Application.ScreenUpdating = False
Set MonDico1 = CreateObject("Scripting.Dictionary")
Set MonDico2 = CreateObject("Scripting.Dictionary")
Workbooks("classeur1.xls").Activate
For Each C In
Sheets(1).Range("A1:B5000").SpecialCells(xlCellTypeConstants, 23)
If Not MonDico1.Exists(C.Value) Then MonDico1.Add C.Value, C.Address
Next
Workbooks("classeur2.xls").Activate
For Each C In
Sheets(1).Range("A1:B5000").SpecialCells(xlCellTypeConstants, 23)
If Not MonDico2.Exists(C.Value) Then MonDico2.Add C.Value, C.Address
Next
Workbooks("classeur1.xls").Activate
For Each e In MonDico1
Range(MonDico1.Item(e)).Font.Color = IIf(MonDico2.Exists(e), vblack,
vbRed)
Next
[C1] = Timer - t
Application.ScreenUpdating = True
MsgBox Timer() - t
End Sub

Sub ComparaisonColonne()
t = Timer()
F = 1 'no feuille
Application.ScreenUpdating = False
Set MonDico1 = CreateObject("Scripting.Dictionary")
Set MonDico2 = CreateObject("Scripting.Dictionary")
Workbooks("classeur1.xls").Activate
For Each C In
Sheets(F).Range("A1:A450").SpecialCells(xlCellTypeConstants, 23)
If Not MonDico1.Exists(C.Value) Then MonDico1.Add C.Value, C.Address
Next
Workbooks("classeur2.xls").Activate
Sheets(F).Activate
For Each C In
Sheets(F).Range("A1:A450").SpecialCells(xlCellTypeConstants, 23)
If Not MonDico2.Exists(C.Value) Then MonDico2.Add C.Value, C.Address
Next

Workbooks("classeur1.xls").Activate
Sheets(F).Activate
For Each e In MonDico1
If Not MonDico2.Exists(e) Then
Range(MonDico1.Item(e)).Font.Color = vbRed
Else
Range(MonDico1.Item(e)).Font.Color = vbBlack
End If
Next
Application.ScreenUpdating = True
[C1] = Timer - t
MsgBox Timer() - t
End Sub
Sub ComparaisonChamptriple()
t = Timer()
Application.ScreenUpdating = False
Set MonDico1 = CreateObject("Scripting.Dictionary")
Set MonDico2 = CreateObject("Scripting.Dictionary")
Workbooks("classeur1.xls").Activate
For Each C In
Sheets(1).Range("A1:B5000").SpecialCells(xlCellTypeConstants, 23)
If Not MonDico1.Exists(C.Value) Then MonDico1.Add C.Value, C.Address
Next
Workbooks("classeur2.xls").Activate
For Each C In
Sheets(1).Range("A1:B5000").SpecialCells(xlCellTypeConstants, 23)
If Not MonDico2.Exists(C.Value) Then MonDico2.Add C.Value, C.Address
Next
"claude" 4937096f$0$8428$
merci de l'idée
en fait j'ai essayé par le méthode find en jonglant d'une feuille à
l'autre
excel est tellement puissant que çà ne prend pas beaucoup de temps

mais c'est toujours bon de comparer les idées
et puis le simple fait d'exposer son problème permet d'avancer
:--))
claude





"Papyjac" news:
Bonjour Claude

Pour ce type de problème j'utilise la méthode suivante :
1. Je me positionne dans l'onglet source
2. Je stocke en mémoire les colonnes dont j'ai besoin dans un tableau T1
en
mémoire
3. Je me positionne dans l'onglet cible
4. Je stocke en mémoire les colonnes dont j'ai besoin dans un tableau T2
en
mémoire
5. Je comprare en mémoire les colonnes que je souhaite et détecte les
différences ou les ressemblances
6. Je restitue le résultat dans l'onglet cible (ou source) mais il faut
éviter d'utiliser une couleur, mieux vaut ajouter une colonne résultat
VRAI
ou faux
7. Tu exploites manuellement ce résultat à ta convenance avec des tri
des
filtres ....

Je n'ai rien trouvé de plus performant car je ne lit qu'une seule fois
chaque onglet
Et la comparaison en mémoire est quasi immédiate
Bien penser à supprimer le mode de calcul automatique et le
raffrachissement
d'écran


--
Papyjac


"claude" a écrit :

bonjour (soir ) à tous
j'aimagine que ma question est récurrente ...
j'ai deux feuilles contenant pas mal de lignes (plusieurs milliers)
j'aimerai écrire une macro qui parte d'une feuille, aille dans l'autre
feuille marquer (en couleur par exemple) ceux qui ne sont pas dans la
feuille

j'ai pensé à boucler sur chaque ligne avec un find sur l'autre feuille,
mais
j'ai peur que çà soit très long pour plusieurs milliers de lignes
correct ou çà va durer des heures ???

merci d'avance
claude











Papyjac
Le #18042701
Bonjour claude

Il y a toujours plusieurs solutions pour résoudre une question. La meilleure
solution est celle qu'on maitrise soi-même

En ce qui concerne la performance, elle est surtout due à ton micro plutôt
qu'à Excel. Mais j'ai constaté que certaines fonctions simples d'excel était
très gourmante en VBA (par exemple les motifs) quand on les exécute des
milliers de fois.
Mais même si ça prend quelques minutes, c'est toujours mieux que de faire
soi-même des milliers de clic

Au plaisir de te rendre service ultérieurement

--
Papyjac


"claude" a écrit :

merci de l'idée
en fait j'ai essayé par le méthode find en jonglant d'une feuille à l'autre
excel est tellement puissant que çà ne prend pas beaucoup de temps

mais c'est toujours bon de comparer les idées
et puis le simple fait d'exposer son problème permet d'avancer
:--))
claude





"Papyjac" news:
> Bonjour Claude
>
> Pour ce type de problème j'utilise la méthode suivante :
> 1. Je me positionne dans l'onglet source
> 2. Je stocke en mémoire les colonnes dont j'ai besoin dans un tableau T1
> en
> mémoire
> 3. Je me positionne dans l'onglet cible
> 4. Je stocke en mémoire les colonnes dont j'ai besoin dans un tableau T2
> en
> mémoire
> 5. Je comprare en mémoire les colonnes que je souhaite et détecte les
> différences ou les ressemblances
> 6. Je restitue le résultat dans l'onglet cible (ou source) mais il faut
> éviter d'utiliser une couleur, mieux vaut ajouter une colonne résultat
> VRAI
> ou faux
> 7. Tu exploites manuellement ce résultat à ta convenance avec des tri des
> filtres ....
>
> Je n'ai rien trouvé de plus performant car je ne lit qu'une seule fois
> chaque onglet
> Et la comparaison en mémoire est quasi immédiate
> Bien penser à supprimer le mode de calcul automatique et le
> raffrachissement
> d'écran
>
>
> --
> Papyjac
>
>
> "claude" a écrit :
>
>> bonjour (soir ) à tous
>> j'aimagine que ma question est récurrente ...
>> j'ai deux feuilles contenant pas mal de lignes (plusieurs milliers)
>> j'aimerai écrire une macro qui parte d'une feuille, aille dans l'autre
>> feuille marquer (en couleur par exemple) ceux qui ne sont pas dans la
>> feuille
>>
>> j'ai pensé à boucler sur chaque ligne avec un find sur l'autre feuille,
>> mais
>> j'ai peur que çà soit très long pour plusieurs milliers de lignes
>> correct ou çà va durer des heures ???
>>
>> merci d'avance
>> claude
>>
>>
>>





claude
Le #18048001
bonjour
impressionnantes les macros
merci beaucoup
:-)))
claude



"Fredo P" message de news:
JB n'étant pas la pour te répondre, trois routine de sa composition
Sub ComparaisonChamp()
t = Timer()
Application.ScreenUpdating = False
Set MonDico1 = CreateObject("Scripting.Dictionary")
Set MonDico2 = CreateObject("Scripting.Dictionary")
Workbooks("classeur1.xls").Activate
For Each C In
Sheets(1).Range("A1:B5000").SpecialCells(xlCellTypeConstants, 23)
If Not MonDico1.Exists(C.Value) Then MonDico1.Add C.Value,
C.Address
Next
Workbooks("classeur2.xls").Activate
For Each C In
Sheets(1).Range("A1:B5000").SpecialCells(xlCellTypeConstants, 23)
If Not MonDico2.Exists(C.Value) Then MonDico2.Add C.Value,
C.Address
Next
Workbooks("classeur1.xls").Activate
For Each e In MonDico1
Range(MonDico1.Item(e)).Font.Color = IIf(MonDico2.Exists(e),
vblack, vbRed)
Next
[C1] = Timer - t
Application.ScreenUpdating = True
MsgBox Timer() - t
End Sub

Sub ComparaisonColonne()
t = Timer()
F = 1 'no feuille
Application.ScreenUpdating = False
Set MonDico1 = CreateObject("Scripting.Dictionary")
Set MonDico2 = CreateObject("Scripting.Dictionary")
Workbooks("classeur1.xls").Activate
For Each C In
Sheets(F).Range("A1:A450").SpecialCells(xlCellTypeConstants, 23)
If Not MonDico1.Exists(C.Value) Then MonDico1.Add C.Value,
C.Address
Next
Workbooks("classeur2.xls").Activate
Sheets(F).Activate
For Each C In
Sheets(F).Range("A1:A450").SpecialCells(xlCellTypeConstants, 23)
If Not MonDico2.Exists(C.Value) Then MonDico2.Add C.Value,
C.Address
Next

Workbooks("classeur1.xls").Activate
Sheets(F).Activate
For Each e In MonDico1
If Not MonDico2.Exists(e) Then
Range(MonDico1.Item(e)).Font.Color = vbRed
Else
Range(MonDico1.Item(e)).Font.Color = vbBlack
End If
Next
Application.ScreenUpdating = True
[C1] = Timer - t
MsgBox Timer() - t
End Sub
Sub ComparaisonChamptriple()
t = Timer()
Application.ScreenUpdating = False
Set MonDico1 = CreateObject("Scripting.Dictionary")
Set MonDico2 = CreateObject("Scripting.Dictionary")
Workbooks("classeur1.xls").Activate
For Each C In
Sheets(1).Range("A1:B5000").SpecialCells(xlCellTypeConstants, 23)
If Not MonDico1.Exists(C.Value) Then MonDico1.Add C.Value,
C.Address
Next
Workbooks("classeur2.xls").Activate
For Each C In
Sheets(1).Range("A1:B5000").SpecialCells(xlCellTypeConstants, 23)
If Not MonDico2.Exists(C.Value) Then MonDico2.Add C.Value,
C.Address
Next
"claude" 4937096f$0$8428$
merci de l'idée
en fait j'ai essayé par le méthode find en jonglant d'une feuille à
l'autre
excel est tellement puissant que çà ne prend pas beaucoup de temps

mais c'est toujours bon de comparer les idées
et puis le simple fait d'exposer son problème permet d'avancer
:--))
claude





"Papyjac" news:
Bonjour Claude

Pour ce type de problème j'utilise la méthode suivante :
1. Je me positionne dans l'onglet source
2. Je stocke en mémoire les colonnes dont j'ai besoin dans un tableau T1
en
mémoire
3. Je me positionne dans l'onglet cible
4. Je stocke en mémoire les colonnes dont j'ai besoin dans un tableau T2
en
mémoire
5. Je comprare en mémoire les colonnes que je souhaite et détecte les
différences ou les ressemblances
6. Je restitue le résultat dans l'onglet cible (ou source) mais il faut
éviter d'utiliser une couleur, mieux vaut ajouter une colonne résultat
VRAI
ou faux
7. Tu exploites manuellement ce résultat à ta convenance avec des tri
des
filtres ....

Je n'ai rien trouvé de plus performant car je ne lit qu'une seule fois
chaque onglet
Et la comparaison en mémoire est quasi immédiate
Bien penser à supprimer le mode de calcul automatique et le
raffrachissement
d'écran


--
Papyjac


"claude" a écrit :

bonjour (soir ) à tous
j'aimagine que ma question est récurrente ...
j'ai deux feuilles contenant pas mal de lignes (plusieurs milliers)
j'aimerai écrire une macro qui parte d'une feuille, aille dans l'autre
feuille marquer (en couleur par exemple) ceux qui ne sont pas dans la
feuille

j'ai pensé à boucler sur chaque ligne avec un find sur l'autre feuille,
mais
j'ai peur que çà soit très long pour plusieurs milliers de lignes
correct ou çà va durer des heures ???

merci d'avance
claude
















Publicité
Poster une réponse
Anonyme