Private Sub Worksheet_Activate()
Dim ncol%, coldeb%, lig&, d As Object, w As Worksheet, c As Range, x$, n&, col%
ncol = 7
coldeb = 2
lig = 1
Set d = CreateObject("Scripting.Dictionary")
Application.ScreenUpdating = False
Rows("2:" & Rows.Count).Delete 'RAZ
For Each w In Sheets(Array("Feuil1", "Feuil3")) 'nom des feuilles à adapter
For Each c In w.UsedRange.Columns(1).Cells
x = LCase(c)
If x <> "" Then
If Not d.exists(x) Then
lig = lig + 1
d(x) = lig 'mémorise le n° de ligne
c.Copy Cells(lig, 1) 'copie le nom
End If
n = d(x) 'récupère le n° de ligne
c(1, 2).Resize(, ncol).Copy Cells(n, coldeb) 'copier-coller
For col = coldeb To coldeb + ncol - 1
With Cells(n, col)
If .Interior.ColorIndex = 3 Then 'si rouge
.Value = "AT"
.Font.ColorIndex = 2 'police blache
ElseIf .Interior.ColorIndex = 15 Then 'si gris
.Value = "NT"
.Font.ColorIndex = 2 'police blanche
.Interior.ColorIndex = 1 'fond noir
.Borders(xlDiagonalUp).LineStyle = xlNone
.Borders(xlDiagonalDown).LineStyle = xlNone
End If
End With
Next col
End If
Next c
coldeb = coldeb + ncol 'décalage vers la droite
Next w
End Sub
En fait, il semblerait que nom6 ne soit pas un doublon mais un complément .Bonjour à Tous,
Voici avec macro
Je viens de voir que Nom6 est en doublon en Feuil3
A tester et à modifier la macro pour mettre le tableau en haut
Bruno
C'est évidemment un doublon et d'après ce que j'ai compris c'est le dernier doublon qu'on utilise.En fait, il semblerait que nom6 ne soit pas un doublon mais un complément .
If Application.CountIf(c(2).Resize(w.Rows.Count - c.Row), c) = 0 Then 's'il s'agit du dernier doublon
Pour le doublon c'est ma faute... Mea culpa, il n'y en a pas normalement.Bonjour mxh, le forum,
Bien entendu s'il y a beaucoup de doublons il faut s'arranger pour ne traiter que les derniers doublons.
Voyez ce fichier (2) et la macro où j'ai ajouté le test :
Avec les tableaux de 10 000 lignes du post #6 la macro s'exécute chez moi en 6,7 secondes.VB:If Application.CountIf(c(2).Resize(w.Rows.Count - c.Row), c) = 0 Then 's'il s'agit du dernier doublon
C'est le temps qu'il faut pour exécuter 20 000 fois le test précédent.
A+