Recherche entre 2 feuilles

Le
dyj Orange
Bonjour le groupe,
Je vous sollicite pour résoudre un problème qui me semble simple, mais je
n'y arrive pas. A l'expérience !!!
J'ai deux feuilles au format identiques: A et B (même colonnes, mais de
longueurs différentes). Elles sont toutes les deux classées sur la même
colonne dans un ordre croissant.
Je voudrai obtenir dans une autre feuille C, les enregistrements de la
feuille A qui ne se trouve pas dans la feuille B et vice et versa.
Merci pour votre aide.
Vos réponses Page 2 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jacky
Le #22682951
Re..
Il faut lire
***ET contrôle si la cellule de la boucle (.Cells(i, 11),retourne une erreur, donc n'a pas trouve dans la
plage2 (colonne K de la feuile2)

et non pas

***ET contrôle si la cellule de la boucle (.Cells(i, 11),retourne une erreur, donc n'a pas trouve dans la
plage1 (colonne K de la feuile2)



--
Salutations
JJ


"Jacky"
Re..
Ok
Es-ce plus clair ??
'---------------------------
Sub NonPresenEnF2()
Dim derlgF1 As Integer, derlgF2 As Integer

Sheets("feuil3").Columns("a:l").Clear ' Clear F3
'**L'objectif des 3 lignes ci-dessous est uniquement pour accelerer l'execution du code
Application.ScreenUpdating = False ' ??**Empeche le reffraichissement de l'ecran ( eventuel clignotement)
calc = Application.Calculation ' ??**Place dans la variable "Calc" l'état actuel de calculation(auto,
manuel..) pour la restituer en fin de procédure
Application.Calculation = xlCalculationManual ' ??**Met le calcul automatique sur manuel

'**
Sheets("feuil1").Rows(1).Copy Sheets("feuil3").[a1] '
Copie Row 1 de feuil1 dans feuil3
derlgF1 = Sheets("feuil1").Cells(Rows.Count, "d").End(3).Row '
determine la dernirère ligne de feuil1
derlgF2 = Sheets("feuil2").Cells(Rows.Count, "d").End(3).Row '
determine la dernirère ligne de feuil2
Set plage1 = Sheets("feuil2").Range("d2:d" & derlgF2) '
' ***determine une plage de 2 à la dernière ligne***** de la colonne D de la Feuil2
Set plage2 = Sheets("feuil2").Range("k2:k" & derlgF2) '
' ***determine une plage de 2 à la dernière ligne ***** de la colonne K de la Feuil2

With Sheets("feuil1")
' Travail avec la feuil1
For i = 2 To .Cells(.Rows.Count, "d").End(3).Row
' 2 à dernière ligne de F1 (derlgF1)

' ?? je ne comprends pas ces fonctions:
' Application.Match(.Cells(i, 4), plage1, 0)
' **Equivalent de la fonction " Equiv() " d'une feuille de calcul, ici contrôle si cell(i,4) est oui ou non
présent dans la plage définie par set plage1.
'**en plus simple. Regarde dans la colonne D de la feuil2 si la cellule définie par la boucle (for i=..) est
présent ou non
' Application.Match(.Cells(i, 11), plage2, 0)
' **idem que ci-dessus mais pour la colonne K

If IsError(Application.Match(.Cells(i, 4), plage1, 0)) Or _
IsError(Application.Match(.Cells(i, 11), plage2, 0)) Then
' ***ici," isError " contrôle si la cellule de la boucle (.Cells(i, 4),retourne une erreur, donc n'a pas
trouve dans la plage1 (colonne D de la feuile2)
' ***ET contrôle si la cellule de la boucle (.Cells(i, 11),retourne une erreur, donc n'a pas trouve dans la
plage1 (colonne K de la feuile2)
' ***L'objectif étant que si Cells(i, 4) de la feuil1 n"est pas présent dans la colonne D de la feuil2 OU
Cells(i, 11) de la feuil1 n'est pas présent dans la colonne K de la feuil2 ,de l'inscrire dans la feuil3

' La Range de F1 n'est pas trouvé dans F2, alors copy dans F3

.Rows(i).Copy Range("a" & Sheets("feuil3").Cells(Rows.Count,
"A").End(3).Row + 1)
End If
Next
End With
'**
Application.ScreenUpdating = True
Application.Calculation = calc
' ***remet le mode de calcul en l'état d'avant exécution du code
End Sub
---------------------------------------------------------------------------------------------------------------------------------------------------------


dyj Orange
Le #22684321
C'est parfait, je travaille dessus et je commence à comprendre !!! Merci
Jacky.

"Jacky" a écrit dans le message de groupe de discussion :
i9eko6$llf$

Re..
Ok
Es-ce plus clair ??
'---------------------------
Sub NonPresenEnF2()
Dim derlgF1 As Integer, derlgF2 As Integer

Sheets("feuil3").Columns("a:l").Clear ' Clear F3
'**L'objectif des 3 lignes ci-dessous est uniquement pour accelerer
l'execution du code
Application.ScreenUpdating = False ' ??**Empeche le reffraichissement de
l'ecran ( eventuel clignotement)
calc = Application.Calculation ' ??**Place dans la variable "Calc" l'état
actuel de calculation(auto,
manuel..) pour la restituer en fin de procédure
Application.Calculation = xlCalculationManual ' ??**Met le calcul
automatique sur manuel

'**
Sheets("feuil1").Rows(1).Copy Sheets("feuil3").[a1] '
Copie Row 1 de feuil1 dans feuil3
derlgF1 = Sheets("feuil1").Cells(Rows.Count, "d").End(3).Row '
determine la dernirère ligne de feuil1
derlgF2 = Sheets("feuil2").Cells(Rows.Count, "d").End(3).Row '
determine la dernirère ligne de feuil2
Set plage1 = Sheets("feuil2").Range("d2:d" & derlgF2) '
' ***determine une plage de 2 à la dernière ligne***** de la colonne D de la
Feuil2
Set plage2 = Sheets("feuil2").Range("k2:k" & derlgF2) '
' ***determine une plage de 2 à la dernière ligne ***** de la colonne K de
la Feuil2

With Sheets("feuil1")
' Travail avec la feuil1
For i = 2 To .Cells(.Rows.Count, "d").End(3).Row
' 2 à dernière ligne de F1 (derlgF1)

' ?? je ne comprends pas ces fonctions:
' Application.Match(.Cells(i, 4), plage1, 0)
' **Equivalent de la fonction " Equiv() " d'une feuille de calcul, ici
contrôle si cell(i,4) est oui ou non
présent dans la plage définie par set plage1.
'**en plus simple. Regarde dans la colonne D de la feuil2 si la cellule
définie par la boucle (for i=..) est
présent ou non
' Application.Match(.Cells(i, 11), plage2, 0)
' **idem que ci-dessus mais pour la colonne K

If IsError(Application.Match(.Cells(i, 4), plage1, 0)) Or _
IsError(Application.Match(.Cells(i, 11), plage2, 0)) Then
' ***ici," isError " contrôle si la cellule de la boucle (.Cells(i,
4),retourne une erreur, donc n'a pas
trouve dans la plage1 (colonne D de la feuile2)
' ***ET contrôle si la cellule de la boucle (.Cells(i, 11),retourne une
erreur, donc n'a pas trouve dans la
plage1 (colonne K de la feuile2)
' ***L'objectif étant que si Cells(i, 4) de la feuil1 n"est pas présent dans
la colonne D de la feuil2 OU
Cells(i, 11) de la feuil1 n'est pas présent dans la colonne K de la feuil2
,de l'inscrire dans la feuil3

' La Range de F1 n'est pas trouvé dans F2, alors copy dans F3

.Rows(i).Copy Range("a" & Sheets("feuil3").Cells(Rows.Count,
"A").End(3).Row + 1)
End If
Next
End With
'**
Application.ScreenUpdating = True
Application.Calculation = calc
' ***remet le mode de calcul en l'état d'avant exécution du code
End Sub
---------------------------------------------------------------------------------------------------------------------------------------------------------
Jacky
Le #22685331
Re...
C'est parfait...
Je crois bien que non.
S'il excite dans l'exemple un n° serie "info1" et un "contrat1" dans une autre ligne l'information retournée
est erronée.
Corrigé avec un code plus simple ici:
http://www.cijoint.fr/cjlink.php?file=cj201010/cijp7MBzOE.xls

Désolé
--
Salutations
JJ


"dyj Orange" 4cbaf9f7$0$32427$
C'est parfait, je travaille dessus et je commence à comprendre !!! Merci Jacky.

dyj Orange
Le #22687581
Ca tombe bien j'allais te contacter car je constatai des anomalies. Merci.
"dyj Orange" a écrit dans le message de groupe de discussion :
4cbaf9f7$0$32427$

C'est parfait, je travaille dessus et je commence à comprendre !!! Merci
Jacky.

"Jacky" a écrit dans le message de groupe de discussion :
i9eko6$llf$

Re..
Ok
Es-ce plus clair ??
'---------------------------
Sub NonPresenEnF2()
Dim derlgF1 As Integer, derlgF2 As Integer

Sheets("feuil3").Columns("a:l").Clear ' Clear F3
'**L'objectif des 3 lignes ci-dessous est uniquement pour accelerer
l'execution du code
Application.ScreenUpdating = False ' ??**Empeche le reffraichissement de
l'ecran ( eventuel clignotement)
calc = Application.Calculation ' ??**Place dans la variable "Calc" l'état
actuel de calculation(auto,
manuel..) pour la restituer en fin de procédure
Application.Calculation = xlCalculationManual ' ??**Met le calcul
automatique sur manuel

'**
Sheets("feuil1").Rows(1).Copy Sheets("feuil3").[a1] '
Copie Row 1 de feuil1 dans feuil3
derlgF1 = Sheets("feuil1").Cells(Rows.Count, "d").End(3).Row '
determine la dernirère ligne de feuil1
derlgF2 = Sheets("feuil2").Cells(Rows.Count, "d").End(3).Row '
determine la dernirère ligne de feuil2
Set plage1 = Sheets("feuil2").Range("d2:d" & derlgF2) '
' ***determine une plage de 2 à la dernière ligne***** de la colonne D de la
Feuil2
Set plage2 = Sheets("feuil2").Range("k2:k" & derlgF2) '
' ***determine une plage de 2 à la dernière ligne ***** de la colonne K de
la Feuil2

With Sheets("feuil1")
' Travail avec la feuil1
For i = 2 To .Cells(.Rows.Count, "d").End(3).Row
' 2 à dernière ligne de F1 (derlgF1)

' ?? je ne comprends pas ces fonctions:
' Application.Match(.Cells(i, 4), plage1, 0)
' **Equivalent de la fonction " Equiv() " d'une feuille de calcul, ici
contrôle si cell(i,4) est oui ou non
présent dans la plage définie par set plage1.
'**en plus simple. Regarde dans la colonne D de la feuil2 si la cellule
définie par la boucle (for i=..) est
présent ou non
' Application.Match(.Cells(i, 11), plage2, 0)
' **idem que ci-dessus mais pour la colonne K

If IsError(Application.Match(.Cells(i, 4), plage1, 0)) Or _
IsError(Application.Match(.Cells(i, 11), plage2, 0)) Then
' ***ici," isError " contrôle si la cellule de la boucle (.Cells(i,
4),retourne une erreur, donc n'a pas
trouve dans la plage1 (colonne D de la feuile2)
' ***ET contrôle si la cellule de la boucle (.Cells(i, 11),retourne une
erreur, donc n'a pas trouve dans la
plage1 (colonne K de la feuile2)
' ***L'objectif étant que si Cells(i, 4) de la feuil1 n"est pas présent dans
la colonne D de la feuil2 OU
Cells(i, 11) de la feuil1 n'est pas présent dans la colonne K de la feuil2
,de l'inscrire dans la feuil3

' La Range de F1 n'est pas trouvé dans F2, alors copy dans F3

.Rows(i).Copy Range("a" & Sheets("feuil3").Cells(Rows.Count,
"A").End(3).Row + 1)
End If
Next
End With
'**
Application.ScreenUpdating = True
Application.Calculation = calc
' ***remet le mode de calcul en l'état d'avant exécution du code
End Sub
---------------------------------------------------------------------------------------------------------------------------------------------------------
Publicité
Poster une réponse
Anonyme