Microsoft 365 croiser deux listes

biba78

XLDnaute Junior
Bonsoir à tous,
besoin de votre aide 😉
je souhaite croiser deux listes A et B et afficher :
  • Dans un 1er onglet les données disponibles dans la feuille A et non présentes la feuille B
  • dan un 2eme Onglet les données disponibles dans la feuille B et non présentes la feuille A
en pièce jointe un exemple simplifié

Cordialement
 

Pièces jointes

  • CROISEMENT DEUX LISTES.xls
    47 KB · Affichages: 14

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Vous avez excel 365 et vous n'utilisez pas toutes les fonctionnalités apparues depuis 2007 en gardant le format de fichier .xls (dépassé depuis 2007).

Dans le fichier joint, j'ai utilisé powerquery (inclus dans votre version) pour joindre les deux tables.
Quand les données changent il suffit de cliquer dans Données/Actualiser Tout

Cordialement
 

Pièces jointes

  • CROISEMENT DEUX LISTES.xlsm
    39.1 KB · Affichages: 9

biba78

XLDnaute Junior
Bonjour
merci pour votre retour, j'avoue que j'ai récupéré un fichier sur le forum pour extraire les communs dans un onglet et il me manquer les non communs en plus je n'ai jamais utilisé le powerquery lll
j'ai mal formulé ma demande car j'avais besoin d'une macro à exécuter a chaque rafraichissement de données
cordialement
 

biba78

XLDnaute Junior
1612623661471.png

je viens de vérifier il n'est pas disponible !!
 

job75

XLDnaute Barbatruc
Bonjour biba78, Roblocho, JHA, chris,

Une solution VBA classique dans le fichier joint avec cette macro paramétrée :
VB:
Sub MAJ(F As Worksheet, ncol%, A As Worksheet, B As Worksheet)
Dim d As Object, tablo, i&, x$, j%, n&, dk, s
Set d = CreateObject("Scripting.Dictionary")
tablo = A.[A1].CurrentRegion.Resize(, ncol) 'matrice plus rapide
For i = 2 To UBound(tablo)
    x = ""
    For j = 1 To ncol
        x = x & Chr(1) & tablo(i, j)
    Next j
    d(x) = ""
Next i
tablo = B.[A1].CurrentRegion.Resize(, ncol) 'matrice plus rapide
For i = 2 To UBound(tablo)
    x = ""
    For j = 1 To ncol
        x = x & Chr(1) & tablo(i, j)
    Next j
    If d.exists(x) Then d.Remove x
Next i
n = d.Count
If n = 0 Then GoTo 1
'---déconcaténation---
dk = d.keys 'tableau base 0
ReDim tablo(1 To n, 1 To ncol) 'tableau base 1
For i = 1 To n
    s = Split(dk(i - 1), Chr(1))
    For j = 1 To ncol
        tablo(i, j) = s(j)
Next j, i
'---restitution--
1 If F.FilterMode Then F.ShowAllData 'si la feuille est filtrée
With F.[A2] '1ère cellule de destination, à adapter
    If n Then .Resize(n, ncol) = tablo
    .Offset(n).Resize(F.Rows.Count - n - .Row + 1, ncol).ClearContents 'RAZ en dessous
End With
With F.UsedRange: End With 'actualise la barre de défilement verticale
End Sub
Elle est appelée par les Worksheet_Activate quand on active l'une des 2 dernières feuilles.

Utilisant des tableaux VBA et le Dictionary elle est très rapide.

A+
 

Pièces jointes

  • CROISEMENT DEUX LISTES(1).xls
    67 KB · Affichages: 6

Modeste geedee

XLDnaute Barbatruc
Vous utilisez excel et vous n'utilisez pas toutes les fonctionnalités de feuilles de calculs ???
et en gardant le format de fichier .xls (dépassé depuis 2007).

mettre les données sous forme de tableaux structurés

dans tableau A
ajouter une colonne "Dispo" :
=NB.si(tableauB!B:B;TableauA!B2)
Dans tableau B
ajouter une colonne "Dispo" :
=NB.si(tableauA!B:B;TableauB!B2)

utilisez les filtres
Dispo = 0

1612785511442.png


l'extension des données et les mises à jour sont automatiques
le report de formule également
 

Discussions similaires

Statistiques des forums

Discussions
312 247
Messages
2 086 582
Membres
103 247
dernier inscrit
bottxok