Sub Suppression_Doublon_Ligne()
Dim d As Object
Dim i As Long
Set d = CreateObject("scripting.dictionary")
For i = 4 To 11: d(Cells(13, i).Value) = "": Next i
Range("d13:k13").ClearContents
Range("d13").Resize(, d.Count).Value = d.keys
End Sub
Sub Macro1()[COLOR=#000080][/COLOR]
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim PL As Range 'déclare la variable PL (PLage)
Dim CEL As Range 'déclare la variable CEL (CELlule)
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
Set PL = Range("D13:K13") 'définit la plage PL
For Each CEL In PL 'boucle sur toutes les cellules CEL de la palge PL
D(CEL.Value) = "" 'alimente le dictionnaire D
Next CEL 'prochaine cellule de la boucle
PL.ClearContents 'vide la plage PL
Range("D13").Resize(1, D.Count).Value = D.keys 'renvoie dans D13 redimensionnée les éléments du dicttionnaire D sans doublon
End Sub
Bonjour Guido.
Avec le code suivant, tu obtiens une réponse à ta demande.
Je te laisse le soin d'adapter les colonnes à ton fichier original.
Code:Sub Suppression_Doublon_Ligne() Dim d As Object Dim i As Long Set d = CreateObject("scripting.dictionary") For i = 4 To 11: d(Cells(13, i).Value) = "": Next i Range("d13:k13").ClearContents Range("d13").Resize(, d.Count).Value = d.keys End Sub
For Each s In Array(plag1, plag2, plag3, plag4)
'ton code
Next s
d.RemoveAll
bonjour Guido thebenoit59 Robert
contente de te croiser le Robert
le mieux passer par un array definir tes plages
Code:For Each s In Array(plag1, plag2, plag3, plag4) 'ton code Next s
attention entre chaque plage vider ton dico
Code:d.RemoveAll
pas le temps de regarder maintenant desole
Sub Macro1()
Dim D As Object 'déclare la variable D (Dictionnaire)
Dim TPL As Variant 'décalre la variable TPL (Tableau des PLages)
Dim PL As Range 'déclare la variable PL (PLage)
Dim CEL As Range 'déclare la variable CEL (CELlule)
Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
TPL = Array(Range("D13:K13"), Range("D23:K33"), Range("D53:K53"), Range("D73:K73")) 'définit le tableau des plages TPL
For I = 0 To UBound(TPL, 1) 'boucle 1 : sur toutes les plages du tableau des plages TPL
Set PL = TPL(I) 'définit la plage PL
For Each CEL In PL 'boucle 2 : sur toutes les cellules CEL de la plage PL
D(CEL.Value) = "" 'alimente le dictionnaire D
Next CEL 'prochaine cellule de la boucle 2
PL.ClearContents 'vide la plage PL
'renvoie dans la première cellule redimensionnée de la plage PL les éléments du dictionnaire D sans doublon
PL.Cells(1, 1).Resize(1, D.Count).Value = D.keys
D.RemoveAll 'vide le dictionnaire D (Choukran Lætitia)
Next I 'prochaine plage de la boucle 1
End Sub
Sub Demo()
Dim Rg As Range, C%, VA, V
For Each Rg In Feuil1.[D13:K13,D23:K23,D53:K53,D73:K73].Rows
C = 0
VA = Rg.Value
ReDim VR(1 To UBound(VA, 2))
For Each V In VA
If IsError(Application.Match(V, VR, 0)) Then C = C + 1: VR(C) = V
Next
Rg.Value = VR
Next
End Sub
Merci de ton retour !
Mon code précédent gère chaque plage quelles que soient les cellules de début et de fin.
Si ton besoin est toujours en ligne entre les colonnes D & K,
l'écriture des plages peut être réduite juste aux numéros de lignes si cela t'intéresse …
Sub Demo2()
Dim C%, R, V
Application.ScreenUpdating = False
For Each R In [{13,23,53,73}]
C = 0
ReDim VA(1 To 8)
With Feuil1.Cells(R, 4).Resize(, 8)
For Each V In .Value
If IsError(Application.Match(V, VA, 0)) Then C = C + 1: VA(C) = V
Next
.Value = VA
End With
Next
Application.ScreenUpdating = True
End Sub