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

Pb de d'extractions de doublons de 2 listes

8 réponses
Avatar
Bruno RCSC
Bonsoir,

Win XP, Excel 2002

Malgré mes recherches sur Excelabo et le travail du fichier de JB
(unionlistes), je n'arrive pas à trouver la solution.
J'ai essayé la fusion, l'extraction sans doublons, la mise en couleur des
doublons mais mes maigres connaissances ne me permettent pas d'obtenir le
résultat souhaité.

Je me permets de soumettre un extrait de mon fichier
http://www.cijoint.fr/cij111826431312214.xls

Le problème :
Un onglet avec un fichier provenant d'un ERP
Un onglet avec un fichier provenant d'un autre système
Objectif : automatiser la vérification de factures.
- obtenir dans un onglet les lignes de l'ERP non présentent dans l'autre
système
- obtenir dans un onglet les lignes de l'autre système non présentent
dans l'ERP.
Un champ commun : le champ référence.
Est réalisable ? Les champs des 2 fichiers peuvent ils être différents ?


Merci pour votre aide

BH.

8 réponses

Avatar
isabelle
bonjour Bruno,

les données ne sont pas écrite de la même manière,
par exemple la ref1 de l'onglet "ligne ERP" : "5704017lL"
est écrite dans l'onglet "ligne invoice" : "5704017ll "
avec 11 espace à la droite, dons difficile a comparer,

voila tout de même une piste :

Set plg1 = Sheets("ligne ERP").Range("A1:A" & Sheets("ligne ERP").Range("A65536").End(xlUp).Row)
Set plg2 = Sheets("ligne invoice").Range("A1:A" & Sheets("ligne invoice").Range("A65536").End(xlUp).Row)
For Each c In plg1
If plg2.Find(What:=c, LookAt:=xlWhole) Is Nothing Then
MsgBox c
End If
Next

isabelle


Bonsoir,

Win XP, Excel 2002

Malgré mes recherches sur Excelabo et le travail du fichier de JB
(unionlistes), je n'arrive pas à trouver la solution.
J'ai essayé la fusion, l'extraction sans doublons, la mise en couleur des
doublons mais mes maigres connaissances ne me permettent pas d'obtenir le
résultat souhaité.

Je me permets de soumettre un extrait de mon fichier
http://www.cijoint.fr/cij111826431312214.xls

Le problème :
Un onglet avec un fichier provenant d'un ERP
Un onglet avec un fichier provenant d'un autre système
Objectif : automatiser la vérification de factures.
- obtenir dans un onglet les lignes de l'ERP non présentent dans l'autre
système
- obtenir dans un onglet les lignes de l'autre système non présentent
dans l'ERP.
Un champ commun : le champ référence.
Est réalisable ? Les champs des 2 fichiers peuvent ils être différents ?


Merci pour votre aide

BH.




Avatar
Fred
Fred te propose cela :
dans ta feuille ligne ERP en colonne G2 tu tape la formule suivante :
=EQUIV(A2;'erp non fact'!$A$2:$A$40;0) et tu tire pour remplir les cellules
suivantes la ou il y a un nombre cela correspond à la même référence de la
feuille erp non fact
et inversement
dans la feuille erp non fact en G2 formule suivante
=EQUIV(A2;'ligne ERP'!$A$2:$A$32;0)
voila

bonsoir
Fred

"Bruno RCSC" a écrit dans le message de news:
463a4833$0$27378$
Bonsoir,

Win XP, Excel 2002

Malgré mes recherches sur Excelabo et le travail du fichier de JB
(unionlistes), je n'arrive pas à trouver la solution.
J'ai essayé la fusion, l'extraction sans doublons, la mise en couleur des
doublons mais mes maigres connaissances ne me permettent pas d'obtenir le
résultat souhaité.

Je me permets de soumettre un extrait de mon fichier
http://www.cijoint.fr/cij111826431312214.xls

Le problème :
Un onglet avec un fichier provenant d'un ERP
Un onglet avec un fichier provenant d'un autre système
Objectif : automatiser la vérification de factures.
- obtenir dans un onglet les lignes de l'ERP non présentent dans
l'autre système
- obtenir dans un onglet les lignes de l'autre système non présentent
dans l'ERP.
Un champ commun : le champ référence.
Est réalisable ? Les champs des 2 fichiers peuvent ils être différents ?


Merci pour votre aide

BH.



Avatar
JB
Bonjour,

Sub ErpNonFact()
Set sBD1 = Sheets("ligne ERP")
Set sBD2 = Sheets("ligne invoice")
ligneEcrit = 2
nblignes = sBD1.[A65000].End(xlUp).Row + 1
For i = 2 To nblignes
x = Trim(sBD1.Cells(i, 1))
Set c = sBD2.[A:A].Find(what:=x, LookAt:=xlPart,
MatchCase:úlse)
If c Is Nothing Then
Sheets("erp non fact").Cells(ligneEcrit, 1).Resize(1,
6).Value = _
sBD1.Cells(i, 1).Resize(1, 6).Value
ligneEcrit = ligneEcrit + 1
End If
Next i
End Sub

Sub FactNonErp()
Set sBD1 = Sheets("ligne invoice")
Set sBD2 = Sheets("ligne ERP")
ligneEcrit = 2
nblignes = sBD1.[A65000].End(xlUp).Row + 1
For i = 2 To nblignes
x = Trim(sBD1.Cells(i, 1))
Set c = sBD2.[A:A].Find(what:=x, LookAt:=xlPart,
MatchCase:úlse)
If c Is Nothing Then
Sheets("fact non erp").Cells(ligneEcrit, 1).Resize(1,
12).Value = _
sBD1.Cells(i, 1).Resize(1, 12).Value
ligneEcrit = ligneEcrit + 1
End If
Next i
End Sub

Cordialement JB


On 3 mai, 22:38, "Bruno RCSC" wrote:
Bonsoir,

Win XP, Excel 2002

Malgré mes recherches sur Excelabo et le travail du fichier de JB
(unionlistes), je n'arrive pas à trouver la solution.
J'ai essayé la fusion, l'extraction sans doublons, la mise en couleur d es
doublons mais mes maigres connaissances ne me permettent pas d'obtenir le
résultat souhaité.

Je me permets de soumettre un extrait de mon fichierhttp://www.cijoint.fr /cij111826431312214.xls

Le problème :
Un onglet avec un fichier provenant d'un ERP
Un onglet avec un fichier provenant d'un autre système
Objectif : automatiser la vérification de factures.
- obtenir dans un onglet les lignes de l'ERP non présentent dans l' autre
système
- obtenir dans un onglet les lignes de l'autre système non présen tent
dans l'ERP.
Un champ commun : le champ référence.
Est réalisable ? Les champs des 2 fichiers peuvent ils être différe nts ?

Merci pour votre aide

BH.


Avatar
Bruno RCSC
Bonsoir,

Un grand merci à vous trois.

En prenant garde au format du contenu du champ REF1 et en supprimant les
espaces superflus, j'obtiens le résultat attendu, enfin je l'espère, car
j'ai plus de 4000 lignes par mois !!

Question à JB pour essayer de progresser (j'ai essayé de comprendre la
fonction Difftriée du fichier uniondiffliste en vain !) :
Pouvez décrire les étapes de la macro ?
- vous nommez chacune des zones
-
-
-

Encore merci

BH



"JB" a écrit dans le message de news:

Bonjour,

Sub ErpNonFact()
Set sBD1 = Sheets("ligne ERP")
Set sBD2 = Sheets("ligne invoice")
ligneEcrit = 2
nblignes = sBD1.[A65000].End(xlUp).Row + 1
For i = 2 To nblignes
x = Trim(sBD1.Cells(i, 1))
Set c = sBD2.[A:A].Find(what:=x, LookAt:=xlPart,
MatchCase:úlse)
If c Is Nothing Then
Sheets("erp non fact").Cells(ligneEcrit, 1).Resize(1,
6).Value = _
sBD1.Cells(i, 1).Resize(1, 6).Value
ligneEcrit = ligneEcrit + 1
End If
Next i
End Sub

Sub FactNonErp()
Set sBD1 = Sheets("ligne invoice")
Set sBD2 = Sheets("ligne ERP")
ligneEcrit = 2
nblignes = sBD1.[A65000].End(xlUp).Row + 1
For i = 2 To nblignes
x = Trim(sBD1.Cells(i, 1))
Set c = sBD2.[A:A].Find(what:=x, LookAt:=xlPart,
MatchCase:úlse)
If c Is Nothing Then
Sheets("fact non erp").Cells(ligneEcrit, 1).Resize(1,
12).Value = _
sBD1.Cells(i, 1).Resize(1, 12).Value
ligneEcrit = ligneEcrit + 1
End If
Next i
End Sub

Cordialement JB
Avatar
JB
Bonjour,


Function DiffTriée(a As Range, b As Range) ' a:première liste b :
2e liste
Dim temp() ' tableau en mémoire
k = 0
' on cherche pour chaque item de la liste 'a' s'il existe dans liste
'b'
For i = 1 To a.Count
If IsError(Application.Match(a(i), b, 0)) And a(i) <> "" Then
' match() <->equiv()
ReDim Preserve temp(k)
temp(k) = a(i) ' on ajoute dans le tableau
k = k + 1
End If
Next i
Call tri(temp, 0, k - 1) ' appelle procédure tri
DiffTriée = Application.Transpose(temp) ' renvoie le tableau
End Function

Qq Modifs de la comparaison de 2BD:

http://boisgontierjacques.free.fr/fichiers/Cellules/Compare2BD.xls

JB

On 4 mai, 21:42, "Bruno RCSC" wrote:
Bonsoir,

Un grand merci à vous trois.

En prenant garde au format du contenu du champ REF1 et en supprimant les
espaces superflus, j'obtiens le résultat attendu, enfin je l'espère, car
j'ai plus de 4000 lignes par mois !!

Question à JB pour essayer de progresser (j'ai essayé de comprendre la
fonction Difftriée du fichier uniondiffliste en vain !) :
Pouvez décrire les étapes de la macro ?
- vous nommez chacune des zones
-
-
-

Encore merci

BH

"JB" a écrit dans le message de news:

Bonjour,

Sub ErpNonFact()
Set sBD1 = Sheets("ligne ERP")
Set sBD2 = Sheets("ligne invoice")
ligneEcrit = 2
nblignes = sBD1.[A65000].End(xlUp).Row + 1
For i = 2 To nblignes
x = Trim(sBD1.Cells(i, 1))
Set c = sBD2.[A:A].Find(what:=x, LookAt:=xlPart,
MatchCase:úlse)
If c Is Nothing Then
Sheets("erp non fact").Cells(ligneEcrit, 1).Resize(1,
6).Value = _
sBD1.Cells(i, 1).Resize(1, 6).Value
ligneEcrit = ligneEcrit + 1
End If
Next i
End Sub

Sub FactNonErp()
Set sBD1 = Sheets("ligne invoice")
Set sBD2 = Sheets("ligne ERP")
ligneEcrit = 2
nblignes = sBD1.[A65000].End(xlUp).Row + 1
For i = 2 To nblignes
x = Trim(sBD1.Cells(i, 1))
Set c = sBD2.[A:A].Find(what:=x, LookAt:=xlPart,
MatchCase:úlse)
If c Is Nothing Then
Sheets("fact non erp").Cells(ligneEcrit, 1).Resize(1,
12).Value = _
sBD1.Cells(i, 1).Resize(1, 12).Value
ligneEcrit = ligneEcrit + 1
End If
Next i
End Sub

Cordialement JB


Avatar
Bruno RCSC
Bonsoir,

Mes sincères remerciements pour les modifs et pour les explications.

La fonction TrimZéro est très pertinente.
Mais ma curiosité est aiguisée :
Comment Excel fait pour considérer que 000201702 et 201702 sont "des
doublons" ce qui, dans mon cas, est vrai alors qu'il considère toujours à
raison que 04135-FEU est en doublons, les deux références commençant par des
zéros ?
Je ne sais si je suis clair mais je suis bluffé.
Comment traduire : Do While Mid(x, i, 1) = "0" And i < Len(x)

Cordialement.

BH


"JB" a écrit dans le message de news:

Bonjour,


Function DiffTriée(a As Range, b As Range) ' a:première liste b :
2e liste
Dim temp() ' tableau en mémoire
k = 0
' on cherche pour chaque item de la liste 'a' s'il existe dans liste
'b'
For i = 1 To a.Count
If IsError(Application.Match(a(i), b, 0)) And a(i) <> "" Then
' match() <->equiv()
ReDim Preserve temp(k)
temp(k) = a(i) ' on ajoute dans le tableau
k = k + 1
End If
Next i
Call tri(temp, 0, k - 1) ' appelle procédure tri
DiffTriée = Application.Transpose(temp) ' renvoie le tableau
End Function

Qq Modifs de la comparaison de 2BD:

http://boisgontierjacques.free.fr/fichiers/Cellules/Compare2BD.xls

JB

On 4 mai, 21:42, "Bruno RCSC" wrote:
Bonsoir,

Un grand merci à vous trois.

En prenant garde au format du contenu du champ REF1 et en supprimant les
espaces superflus, j'obtiens le résultat attendu, enfin je l'espère, car
j'ai plus de 4000 lignes par mois !!

Question à JB pour essayer de progresser (j'ai essayé de comprendre la
fonction Difftriée du fichier uniondiffliste en vain !) :
Pouvez décrire les étapes de la macro ?
- vous nommez chacune des zones
-
-
-

Encore merci

BH

"JB" a écrit dans le message de news:

Bonjour,

Sub ErpNonFact()
Set sBD1 = Sheets("ligne ERP")
Set sBD2 = Sheets("ligne invoice")
ligneEcrit = 2
nblignes = sBD1.[A65000].End(xlUp).Row + 1
For i = 2 To nblignes
x = Trim(sBD1.Cells(i, 1))
Set c = sBD2.[A:A].Find(what:=x, LookAt:=xlPart,
MatchCase:úlse)
If c Is Nothing Then
Sheets("erp non fact").Cells(ligneEcrit, 1).Resize(1,
6).Value = _
sBD1.Cells(i, 1).Resize(1, 6).Value
ligneEcrit = ligneEcrit + 1
End If
Next i
End Sub

Sub FactNonErp()
Set sBD1 = Sheets("ligne invoice")
Set sBD2 = Sheets("ligne ERP")
ligneEcrit = 2
nblignes = sBD1.[A65000].End(xlUp).Row + 1
For i = 2 To nblignes
x = Trim(sBD1.Cells(i, 1))
Set c = sBD2.[A:A].Find(what:=x, LookAt:=xlPart,
MatchCase:úlse)
If c Is Nothing Then
Sheets("fact non erp").Cells(ligneEcrit, 1).Resize(1,
12).Value = _
sBD1.Cells(i, 1).Resize(1, 12).Value
ligneEcrit = ligneEcrit + 1
End If
Next i
End Sub

Cordialement JB


Avatar
JB
Bonsoir,


-Je n'ai pas vérifié si le fonctionnement était OK dans tous les cas.

4135-FEU est trouvé dans 04135-FEU par Find parce que l'option
'LookAt' est positionnée à xlPart et non pas XlWhole.

-La boucle:

Do While Mid(x, i, 1) = "0" ' tant que le caractère est égal à '0'
i=i+1
Loop

permet de trouver la position du premier caractère <>'0'

JB


On 5 mai, 21:46, "Bruno RCSC" wrote:
Bonsoir,

Mes sincères remerciements pour les modifs et pour les explications.

La fonction TrimZéro est très pertinente.
Mais ma curiosité est aiguisée :
Comment Excel fait pour considérer que 000201702 et 201702 sont "des
doublons" ce qui, dans mon cas, est vrai alors qu'il considère toujours à
raison que 04135-FEU est en doublons, les deux références commençan t par des
zéros ?
Je ne sais si je suis clair mais je suis bluffé.
Comment traduire : Do While Mid(x, i, 1) = "0" And i < Len(x)

Cordialement.

BH

"JB" a écrit dans le message de news:

Bonjour,

Function DiffTriée(a As Range, b As Range) ' a:première liste b :
2e liste
Dim temp() ' tableau en mémoire
k = 0
' on cherche pour chaque item de la liste 'a' s'il existe dans liste
'b'
For i = 1 To a.Count
If IsError(Application.Match(a(i), b, 0)) And a(i) <> "" Then
' match() <->equiv()
ReDim Preserve temp(k)
temp(k) = a(i) ' on ajoute dans le tableau
k = k + 1
End If
Next i
Call tri(temp, 0, k - 1) ' appelle procédure tri
DiffTriée = Application.Transpose(temp) ' renvoie le tableau
End Function

Qq Modifs de la comparaison de 2BD:

http://boisgontierjacques.free.fr/fichiers/Cellules/Compare2BD.xls

JB

On 4 mai, 21:42, "Bruno RCSC" wrote:



Bonsoir,

Un grand merci à vous trois.

En prenant garde au format du contenu du champ REF1 et en supprimant les
espaces superflus, j'obtiens le résultat attendu, enfin je l'espère , car
j'ai plus de 4000 lignes par mois !!

Question à JB pour essayer de progresser (j'ai essayé de comprendre la
fonction Difftriée du fichier uniondiffliste en vain !) :
Pouvez décrire les étapes de la macro ?
- vous nommez chacune des zones
-
-
-

Encore merci

BH

"JB" a écrit dans le message de news:

Bonjour,

Sub ErpNonFact()
Set sBD1 = Sheets("ligne ERP")
Set sBD2 = Sheets("ligne invoice")
ligneEcrit = 2
nblignes = sBD1.[A65000].End(xlUp).Row + 1
For i = 2 To nblignes
x = Trim(sBD1.Cells(i, 1))
Set c = sBD2.[A:A].Find(what:=x, LookAt:=xlPart,
MatchCase:úlse)
If c Is Nothing Then
Sheets("erp non fact").Cells(ligneEcrit, 1).Resize(1,
6).Value = _
sBD1.Cells(i, 1).Resize(1, 6).Value
ligneEcrit = ligneEcrit + 1
End If
Next i
End Sub

Sub FactNonErp()
Set sBD1 = Sheets("ligne invoice")
Set sBD2 = Sheets("ligne ERP")
ligneEcrit = 2
nblignes = sBD1.[A65000].End(xlUp).Row + 1
For i = 2 To nblignes
x = Trim(sBD1.Cells(i, 1))
Set c = sBD2.[A:A].Find(what:=x, LookAt:=xlPart,
MatchCase:úlse)
If c Is Nothing Then
Sheets("fact non erp").Cells(ligneEcrit, 1).Resize(1,
12).Value = _
sBD1.Cells(i, 1).Resize(1, 12).Value
ligneEcrit = ligneEcrit + 1
End If
Next i
End Sub

Cordialement JB- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -



Avatar
Bruno RCSC
Merci,

De toute façon, je me dois de vérifier les résultats obtenus. Le jeu en vaut
la chandelle !

Mais mon inquiétude était sur les références numériques ayant des zéros
devant dans BD1.
Pour les alphanumériques, à priori, les fichiers ne tronque pas les zéros.
Je contournais le problème en rendant le champ référence au format standard
et en multipliant les cellules par 1 pour les rendre numériques.
On est très loin de votre boucle et de son efficacité !!

Bon dimanche

BH