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

Pb pour comparer 2 bases

7 réponses
Avatar
Bruno RCSC
Bonjour,

Sous Win XP, Excel 2002.

Grâce à ce forum et à la contribution de JB, j'utilise du code pour extraire
des valeurs d'une base1 non présentes dans une base2 et inversement;
Cela fonctionne mais aujourd'hui, je suis confronté à un nouveau cas de
figure.
Le résultat m'indique des positions de la base2 présente dans la base1 alors
que ce n'est pas vrai.

Je joins un exemple concret car ce n'est pas facile à exposer.

http://cjoint.com/?mpqkNkBFg4

Si quelqu'un peut m'aider, je l'en remercie par avance.

BH

7 réponses

Avatar
Carim
Bonjour,

Pour comparer des listes, perso je n'utilise pas de macro ...

Dans la feuille Base2, dans la cellule F2 , tu peux saisir :

=SI(NB.SI(Base1!$A$2:$A$74,A2)>0,A2,"")

à copier jusqu'à la ligne 114, tu obtiendras les références
véritablement communes...

A +
Avatar
Bruno RCSC
Merci pour cette réponse.

Si je pouvais me passer de VBA, je le ferais.
Mais à priori, c'est la seule solution dans la mesure où je veux pouvoir
communiquer à d'autres personnes le résultat à la question suivante :
"Quels sont les enregistrements que nous n'avons pas dans notre base (la
base2) sachant que les champs de la base1 et de la base2 sont différents".
Chaque base comprend entre 12 et 14 champs dont seulement 5 sont communs.

La formule fonctionne mais fait ressortir les enregistrements présents dans
les 2 bases. Je voudrais l'inverse.

Mon objectif serait de pouvoir extraire les non-doublons en prenant en
compte les champs Numéro/CodePostal/Poids ensemble.

BH

---------
Bonjour,

Pour comparer des listes, perso je n'utilise pas de macro ...

Dans la feuille Base2, dans la cellule F2 , tu peux saisir :

=SI(NB.SI(Base1!$A$2:$A$74,A2)>0,A2,"")

à copier jusqu'à la ligne 114, tu obtiendras les références
véritablement communes...

A +
Avatar
AH60
Bonsoir

voir ça
http://cjoint.com/?mpw5BhD2CZ
'----------------------------------------------------
Sub CompareBase2()
Dim rngA As Range
Dim rngB As Range
Dim cell As Range
Dim lg As Long, i As Long

Set rngA = Sheets("Base1").Range("A2:" & Sheets("Base1") _
.Cells(Rows.Count, 1).End(xlUp).Address)
Set rngB = Sheets("Base2").Range("A2:" & Sheets("Base2") _
.Cells(Rows.Count, 1).End(xlUp).Address)

lg = 2
i = 1
For Each cell In rngB
If Application.CountIf(rngA, cell.Value) = 0 Then
Sheets("BD2NonBD1").Cells(lg, 1).Resize(1, 12).Value = _
rngB.Cells(i, 1).Resize(1, 12).Value
rngB.Cells(i, 1).Resize(1, 5).Interior.ColorIndex = 36
lg = lg + 1
End If
i = i + 1
Next
End Sub
'------------------------------------------------------------
Sub CompareBase1()
Dim rngA As Range
Dim rngB As Range
Dim cell As Range
Dim lg As Long, i As Long

Set rngA = Sheets("Base1").Range("A2:" & Sheets("Base1") _
.Cells(Rows.Count, 1).End(xlUp).Address)
Set rngB = Sheets("Base2").Range("A2:" & Sheets("Base2") _
.Cells(Rows.Count, 1).End(xlUp).Address)

lg = 2
i = 1
For Each cell In rngA
If Application.CountIf(rngB, cell.Value) = 0 Then
Sheets("BD1NonBD2").Cells(lg, 1).Resize(1, 12).Value = _
rngA.Cells(i, 1).Resize(1, 12).Value
rngA.Cells(i, 1).Resize(1, 5).Interior.ColorIndex = 36
lg = lg + 1
End If
i = i + 1
Next
End Sub

Abed_H






Merci pour cette réponse.

Si je pouvais me passer de VBA, je le ferais.
Mais à priori, c'est la seule solution dans la mesure où je veux pouvoir
communiquer à d'autres personnes le résultat à la question suivante :
"Quels sont les enregistrements que nous n'avons pas dans notre base (la
base2) sachant que les champs de la base1 et de la base2 sont différents".
Chaque base comprend entre 12 et 14 champs dont seulement 5 sont communs.

La formule fonctionne mais fait ressortir les enregistrements présents dans
les 2 bases. Je voudrais l'inverse.

Mon objectif serait de pouvoir extraire les non-doublons en prenant en
compte les champs Numéro/CodePostal/Poids ensemble.

BH

---------
Bonjour,

Pour comparer des listes, perso je n'utilise pas de macro ...

Dans la feuille Base2, dans la cellule F2 , tu peux saisir :

=SI(NB.SI(Base1!$A$2:$A$74,A2)>0,A2,"")

à copier jusqu'à la ligne 114, tu obtiendras les références
véritablement communes...

A +





Avatar
AH60
le fichier avec ce lien ne peut être envoyé un autre à été chargé, je ne sais
pas ?

Abed_H




Bonsoir

voir ça
http://cjoint.com/?mpw5BhD2CZ
'----------------------------------------------------
Sub CompareBase2()
Dim rngA As Range
Dim rngB As Range
Dim cell As Range
Dim lg As Long, i As Long

Set rngA = Sheets("Base1").Range("A2:" & Sheets("Base1") _
.Cells(Rows.Count, 1).End(xlUp).Address)
Set rngB = Sheets("Base2").Range("A2:" & Sheets("Base2") _
.Cells(Rows.Count, 1).End(xlUp).Address)

lg = 2
i = 1
For Each cell In rngB
If Application.CountIf(rngA, cell.Value) = 0 Then
Sheets("BD2NonBD1").Cells(lg, 1).Resize(1, 12).Value = _
rngB.Cells(i, 1).Resize(1, 12).Value
rngB.Cells(i, 1).Resize(1, 5).Interior.ColorIndex = 36
lg = lg + 1
End If
i = i + 1
Next
End Sub
'------------------------------------------------------------
Sub CompareBase1()
Dim rngA As Range
Dim rngB As Range
Dim cell As Range
Dim lg As Long, i As Long

Set rngA = Sheets("Base1").Range("A2:" & Sheets("Base1") _
.Cells(Rows.Count, 1).End(xlUp).Address)
Set rngB = Sheets("Base2").Range("A2:" & Sheets("Base2") _
.Cells(Rows.Count, 1).End(xlUp).Address)

lg = 2
i = 1
For Each cell In rngA
If Application.CountIf(rngB, cell.Value) = 0 Then
Sheets("BD1NonBD2").Cells(lg, 1).Resize(1, 12).Value = _
rngA.Cells(i, 1).Resize(1, 12).Value
rngA.Cells(i, 1).Resize(1, 5).Interior.ColorIndex = 36
lg = lg + 1
End If
i = i + 1
Next
End Sub

Abed_H






Merci pour cette réponse.

Si je pouvais me passer de VBA, je le ferais.
Mais à priori, c'est la seule solution dans la mesure où je veux pouvoir
communiquer à d'autres personnes le résultat à la question suivante :
"Quels sont les enregistrements que nous n'avons pas dans notre base (la
base2) sachant que les champs de la base1 et de la base2 sont différents".
Chaque base comprend entre 12 et 14 champs dont seulement 5 sont communs.

La formule fonctionne mais fait ressortir les enregistrements présents dans
les 2 bases. Je voudrais l'inverse.

Mon objectif serait de pouvoir extraire les non-doublons en prenant en
compte les champs Numéro/CodePostal/Poids ensemble.

BH

---------
Bonjour,

Pour comparer des listes, perso je n'utilise pas de macro ...

Dans la feuille Base2, dans la cellule F2 , tu peux saisir :

=SI(NB.SI(Base1!$A$2:$A$74,A2)>0,A2,"")

à copier jusqu'à la ligne 114, tu obtiendras les références
véritablement communes...

A +







Avatar
Carim
Bruno,

Tant qu'à faire, j'ai refondu ton fichier avec les formules pour
extraire les lignes Uniques à chaque base ainsi que les communes ...

http://cjoint.com/?mqjso8Mljs

A +
Avatar
Bruno RCSC
Bonjour,

Merci Carim, cela va bien me dépanner. Sans VBA, on arrive au résultat
attendu.
La MFC est bien utile.
J'ai juste corrigé les formules de l'onglet UniqueBD2 qui faisaient
référence à BD1 au lieu de BD2 pour le champs code postal/ville/poids.

Pour AH60, je vais prendre le temps de comprendre le code, en revanche, je
ne peux pas ouvrir le fichier joint.
Mais merci quand même.

Bonne journée.

BH.

--
Bruno,

Tant qu'à faire, j'ai refondu ton fichier avec les formules pour
extraire les lignes Uniques à chaque base ainsi que les communes ...

http://cjoint.com/?mqjso8Mljs

A +
Avatar
Carim
Merci pour ton retour d'infos ...