comparaison des feuilles

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

alessandro

XLDnaute Occasionnel
Bonjour,
Je reviens vers vous avec une problématique :
Je dois comparer beaucoup des feuilles e dois trouver seulement les communs
apres ecrire sur le feuil compare les communs


Merci pour votre aide
 

Pièces jointes

Re : comparaison des feuilles

Bonsoir à tous,

Une autre solution :

Code:
Sub Communs()
Dim lig As Integer, cel As Range, i As Integer
[COLOR="Red"]Sheets(1).Range("C2:D65536").ClearContents[/COLOR]
lig = 1
For Each cel In Sheets(2).Range("A2", Sheets(2).Range("A65536").End(xlUp))
  For i = 3 To Sheets.Count
    If Application.CountIf(Sheets(i).Range("A2", Sheets(i).Range("A65536").End(xlUp)), cel) = 0 Then GoTo 1
  Next
  lig = lig + 1
  Sheets(1).Cells(lig, 3) = cel
  Sheets(1).Cells(lig, 4) = cel.Offset(, 1)
1 Next
End Sub

Nota : en feuille 18 il n'y avait pas de données communes, j'ai dû en modifier 3.

Edit : au cas où l'on relance la macro sur des feuilles modifiées, j'ai ajouté la ligne en rouge.

A+
 

Pièces jointes

Dernière édition:
Re : comparaison des feuilles

Bonsoir à tous,

Une autre solution :

Code:
Sub Communs()
Dim lig As Integer, cel As Range, i As Integer
lig = 1
For Each cel In Sheets(2).Range("A2", Sheets(2).Range("A65536").End(xlUp))
  For i = 3 To Sheets.Count
    If Application.CountIf(Sheets(i).Range("A2", Sheets(i).Range("A65536").End(xlUp)), cel) = 0 Then GoTo 1
  Next
  lig = lig + 1
  Sheets(1).Cells(lig, 3) = cel
  Sheets(1).Cells(lig, 4) = cel.Offset(, 1)
1 Next
End Sub

Nota : en feuille 18 il n'y avait pas de données communes, j'ai dû en modifier 3.

A+

Merci pour ta reponse
mais je voudrai seulement les communs a tous les feuilles
alessandro
 
Re : comparaison des feuilles

Bonsoir
Je crois qu'il serait intéressant de re formuler la question.
car nous avons eu trois interprétation différentes:
Pour moi : valeurs au moins doublonnées sur l'ensemble des trois feuilles.
Pour Job valeur communes aux trois feuilles .
Et pour JHA je crois que c'est un comparatif entre feuille 10 et la 15,18,12.
A question peu précise plusieurs interprétations

Je dois trouver seulement les items communs a tous les feuilles je sais que l'item
commun ce 10034 PUFFER BALL ASS.TI X24 mais je voudrai un macro pour le trouver
merci pour votre reponse
 
Re : comparaison des feuilles

Re,

Je dois trouver seulement les items communs a tous les feuilles je sais que l'item commun ce 10034 PUFFER BALL ASS.TI X24 mais je voudrai un macro pour le trouver

alessando, c'est tout à fait ce que j'avais compris et ce que fait ma macro.

Mais dans le fichier présenté dans votre 1er post, l'item 10034 PUFFER BALL ASS.TI X24 n'existe pas en feuille 18 !

C'est pour cela que j'ai mis 3 items communs en feuille 18, regardez mon fichier 🙄

A+
 
Dernière édition:
Re : comparaison des feuilles

Bonsoir Lii,

Mais oui, pourquoi s'embêter.

Je suppose que l'utilisateur sait ce qu'il fait, qu'il a compris la macro, et que donc il ne va pas modifier l'ordre des feuilles.

Si l'on utilise le nom de la feuille compara dans la macro, cela la complique (un tout petit peu) et quid si l'utilisateur change ce nom ?

A+
 
Re : comparaison des feuilles

Bonjour le fil, le forum,

Pour faire plaisir à Lii, une solution où la position de la feuille compara est quelconque :

Code:
Sub Communs()
Dim Nom As String, lig As Integer, N As Byte, cel As Range, ws As Worksheet
[COLOR="Red"]Nom = "compara" 'feuille d'étude[/COLOR]
On Error Resume Next 'au cas où "compara" n'existe pas
Worksheets(Nom).Range("C2:D65536").ClearContents
If Err Then MsgBox "La feuille d'étude doit être nommée """ & Nom & """...", 48: Exit Sub
lig = 1
[COLOR="Red"]N = IIf(Worksheets(1).Name <> Nom, 1, 2) 'position de la feuille de référence[/COLOR]
For Each cel In Worksheets(N).Range("A2", Worksheets(N).Range("A65536").End(xlUp))
  For Each ws In Worksheets
    If ws.Name <> Nom Then
      If Application.CountIf(ws.Range("A:A"), cel) = 0 Then GoTo 1
    End If
  Next
  lig = lig + 1
  Sheets(Nom).Cells(lig, 3) = cel
  Sheets(Nom).Cells(lig, 4) = cel.Offset(, 1)
1 Next
End Sub

A+
 

Pièces jointes

Dernière édition:
Re : comparaison des feuilles

Bonjour,

Méthode rapide

Code:
Sub communs()
  Set f1 = Sheets("10")
  Set mondico1 = CreateObject("Scripting.Dictionary")
  For Each c In f1.Range("a2:a" & f1.[a65000].End(xlUp).Row)
     mondico1.Item(c.Value) = c.Offset(, 1).Value
  Next
  For Each f In Array("15", "18", "12")
    Set mondico2 = CreateObject("Scripting.Dictionary")
    For Each c In Sheets(f).Range("a2:a" & Sheets(f).[a65000].End(xlUp).Row)
      If mondico1.Exists(c.Value) Then mondico2(c.Value) = c.Offset(, 1).Value
    Next c
    Set mondico1 = mondico2
  Next f
  Sheets("communs").[c2].Resize(mondico2.Count, 1) = Application.Transpose(mondico2.keys)
  Sheets("communs").[d2].Resize(mondico2.Count, 1) = Application.Transpose(mondico2.items)
End Sub

JB
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
13
Affichages
359
Réponses
2
Affichages
379
Réponses
2
Affichages
138
Réponses
1
Affichages
171
Réponses
4
Affichages
226
Retour