Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

afficher les doublons dans une autre plage VBA

  • Initiateur de la discussion Initiateur de la discussion iliess
  • Date de début Date de début

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 !

iliess

XLDnaute Occasionnel
bonjour
j'ai deux colonnes A et B
Exemple
DATE CLIENTS
01/01/2012 A
01/01/2012 A
02/01/2012 B
02/01/2012 C
SVP comment
Dans la cellule D1 s'affiche en (VBA)
Le clients A et en double dans la date 01/01/2012 ou bien
la date 01/01/2012 le client A est en double
merci beaucoup
 

Pièces jointes

Re : afficher les doublons dans une autre plage VBA

Bonjour,
Dans la cellule D1 s'affiche en (VBA)
Le clients A et en double dans la date 01/01/2012 ou bien
la date 01/01/2012 le client A est en double
Je ne sais pas le faire en VBA, et je me permets de te donner une réponse par formule si tu veux???
Code:
=INDEX(B2:B7;MIN(SI(FREQUENCE(EQUIV(A2:A7&B2:B7;A2:A7&B2:B7;0);LIGNE(INDIRECT("1:"&LIGNES(A2:A7))))>1;LIGNE(INDIRECT("1:"&LIGNES(A2:A7))))))
@ valider par Ctrl+Maj+Entree

Et si on a plusieurs doublons, par exemple le client B est aussi en double en 02-jan???

Amicalement
 
Re : afficher les doublons dans une autre plage VBA

Bonjour Ilies, Rachid, bonjour le forum,

Une proposition VBA avec le code ci-dessous tiré du site de
Jacques BOISGONTIER
Code:
Sub Macro1()
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim dico1 As Object 'déclare la variable dico1 (DICtiOnnaire 1)
Dim dico2 As Object 'déclare la variable dico2 (DICtiOnnaire 2)
Dim cel As Range 'déclare la variable cel (CELlule)

Set dico1 = CreateObject("Scripting.Dictionary") 'définit le dictionnaire dico1
Set dico2 = CreateObject("Scripting.Dictionary") 'définit le dictionnaire dico2
With Sheets("Feuil1") 'prend en compte l'onglet "Feuil1"
    dl = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée de la colonne 1 (=A)
    Set pl = .Range("A2:A" & dl) 'définit la plage pl
    For Each cel In pl 'boucle sur toutes les cellules cel de la plage pl
        'si la valeur de cel concaténée avec la valeur de la cellule en colonne B existe, alimente le dictionnaire 2 avec le message à afficher
        If dico1.exists(cel.Value & "_" & cel.Offset(0, 1).Value) Then dico2.Item("À la date du " & cel.Value & " le client " & cel.Offset(0, 1).Value & " est en double") = ""
        dico1.Item(cel.Value & "_" & cel.Offset(0, 1).Value) = "" 'alimente le dico1
    Next cel 'prochaine cellule de la boucle
    'si le dico2 n'est pas vide'place les doublons dans la colonne D à partir de D1
    If dico2.Count > 0 Then .Range("D1").Resize(dico2.Count, 1) = Application.Transpose(dico2.keys)
End With 'fin de la prise en compte de l'onglet "Feuil1"
End Sub
 
Re : afficher les doublons dans une autre plage VBA

Bonsoir le forum,

une astuce :
J'utilise toutes les colonnes du c'est a dire de la cellule A2:C7 de la feuilles excel, pour le tableau T

VB:
Sub test1()

Set F1 = Worksheets("Feuil1")

T = F1.Range(F1.Cells(2, 1), F1.Cells(7, 3))

D = 1
For i = 1 To UBound(T, 1)
D = D + i
For j = D To UBound(T, 1)
If T(i, 1) & T(i, 2) = T(j, 1) & T(j, 2) Then
T(j, 3) = 1
End If
Next j
Next i

For i = 1 To UBound(T, 1)
If T(i, 3) = 1 Then
F1.Cells(i + 1, 3) = "Doublon"
End If
Next i

End Sub

laurent
 

Pièces jointes

Dernière édition:
Re : afficher les doublons dans une autre plage VBA

ReBonsoir,

Astuce suite :

Ici la 3éme colonne est en mémoire rajouter a la zone de la selection du tableau de la feuille excel A2:B7 (C'est adire que la troisieme colonne est virege de toute donnée car j'ai ajouter une dimension a mon tableau T dont les données en mémoire sont celle des cellules de la feuille excel A2:B7.

VB:
Sub test1()

Dim F1 As Worksheet
Set F1 = Worksheets("Feuil1")

Dim T() As Variant
T = F1.Range(F1.Cells(2, 1), F1.Cells(7, 2))

ReDim Preserve T(1 To UBound(T, 1), 1 To 3)

D = 1
For i = 1 To UBound(T, 1)
D = D + i
For j = D To UBound(T, 1)
If T(i, 1) & T(i, 2) = T(j, 1) & T(j, 2) Then
T(j, 3) = 1
End If
Next j
Next i

For i = 1 To UBound(T, 1)
If T(i, 3) = 1 Then
F1.Cells(i + 1, 3) = "Doublon"
End If
Next i

End Sub

Je remercie les membres de se forum pour toute l'aide que vous m'avez apporter mon savoir, et mes quelques astuces. Merci a tous de votre aides toujours très précieuse.
Au plaisir de vous lire et vous répondre.

Laurent

Laurent
 

Pièces jointes

Dernière édition:
Re : afficher les doublons dans une autre plage VBA

salut mon ami laurent
désolé pour ma mauvaise explication
j'ai arrangé mais pensés et voila le juste

la partie en jaune est un formulaire
la plage G1 K10000 base de donnée
la date et le client marche ensemble comme le nom et le prénom
j'ai le code qui enregistre les valeurs dans le formulaire vers la base de donnée

Problème

Parfois j’ai oublié est ce que j’ai saisir le client exemple A dans la date 03/01/2012 ou non
Alors lorsque je tape la date et je tape le client
si cette date avec ce client existe dans la base de donnée
dans la cellule E1 ce client existe dans cette date sinon rien
 

Pièces jointes

Re : afficher les doublons dans une autre plage VBA

Bonsoir,

Voici le code aprés correction :

VB:
Sub test1()
 
Dim F1 As Worksheet
 Set F1 = Worksheets("Feuil1")
 
Dim T() As Variant
 T = F1.Range(F1.Cells(2, 7), F1.Cells(10000, 11))
 
ReDim Preserve T(1 To UBound(T, 1), 1 To 6)
 
D = 1
 For i = 1 To UBound(T, 1)
 D = D + i
 For j = D To UBound(T, 1)
 If F1.Cells(1, 3) & F1.Cells(2, 3) = T(j, 1) & T(j, 2) Then
 T(j, 6) = 1
 End If
 Next j
 Next i
 
For i = 1 To UBound(T, 1)
 If T(i, 6) = 1 Then
 F1.Cells(1, 5) = "Après le test affiche la date du " & T(i, 1) & " contient le client  " & T(i, 2)

 End If
 Next i
 
Erase T
End Sub

laurent
 
Dernière édition:
Re : afficher les doublons dans une autre plage VBA

Bonsoir,

plus rapide en execution

VB:
Sub test1()
   
 Dim F1 As Worksheet
   Set F1 = Worksheets("Feuil1")
   
 Dim T() As Variant
   T = F1.Range(F1.Cells(2, 7), F1.Cells(10000, 11))
   
 ReDim Preserve T(1 To UBound(T, 1), 1 To 6)
   
 'D = 1
  For i = 1 To UBound(T, 1)
   'D = D + i
  'For j = D To UBound(T, 1)
  If F1.Cells(1, 3) & F1.Cells(2, 3) = T(i, 1) & T(i, 2) Then
   T(i, 6) = 1
   End If
   'Next j
  Next i
   
 For i = 1 To UBound(T, 1)
   If T(i, 6) = 1 Then
   F1.Cells(1, 5) = "Après le test affiche la date du " & T(i, 1) & " contient le client  " & T(i, 2)
  
  End If
   Next i
   
 Erase T
  End Sub

Ps : Ne pas oublié aussi Robert et Rachid qui sont très très fort aussi et que je salut au passage, car il m'ont aussi apporté leur aide qui ma était bien précieuse aussi.

Ps : Pour iliess voici des exemples a adapter en foction de vos besoins pour la suite

laurent
 
Dernière édition:
Re : afficher les doublons dans une autre plage VBA

salut mon ami
merci beaucoup ça marche très bien et Merci d'avoir pris le temps de me répondre.
et un autre merci pour tous les amis qui sont participé a ce sujet.
 
- 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
4
Affichages
311
Réponses
1
Affichages
370
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…