Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
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 !
[COLOR="DarkSlateGray"][B]Sub toto()
Dim plage As Range, tableau
Set plage = Range("A2:A" & Range("A65536").End(xlUp).Row)
tableau = plage.Value
For i = 1 To UBound(tableau, 1)
Select Case WorksheetFunction.CountIf(plage, tableau(i, 1))
Case 2
For j = i + 1 To UBound(tableau, 1)
If tableau(i, 1) = tableau(j, 1) Then tableau(j, 1) = "": Exit For
Next
Case Else: tableau(i, 1) = ""
End Select
Next
plage.Offset(0, 1) = tableau
End Sub[/B][/COLOR]
Roger frappe toujours vite et juste... Un modèle ! Je me permet quand même d'envoyer ma proposition avec la macro ci-dessous et j'essaie de comprendre et d'assimiler la sienne :
Code:
Option Explicit 'oblige à déclarer toutes les variables
Sub toto()
Dim pl As Range 'déclare la variable pl (PLage)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim x As Byte 'déclare la variable x (incrément de variable)
Dim tb() As Integer 'déclare le tableau de variables tb (TaBleau)
Dim y As Integer 'déclare la variable y (incrément de varriable)
Set pl = Range("A2:A" & Range("A65536").End(xlUp).Row) 'définit la plage pl
'********************************************
'première variable du tableau de variables tb
'********************************************
For Each cel In pl 'boucle 1 : sur toutes les cellules cel de la plage pl
'condition : si la valeur de la cellule cel existe plus d'une fois dans la plage pl
If Application.WorksheetFunction.CountIf(pl, cel.Value) > 1 Then
ReDim Preserve tb(x) 'redimensionne le tableau tb
tb(x) = cel.Value 'attribue la première variable
cel.Offset(0, 1).Value = cel.Value 'copie la valeur de cel en colonne B
Exit For 'sort de la boucle
End If 'fin de la condition
Next cel 'prochaine cellule de la boucle 1
'*******************************************
'autres variables du tableau de variables tb
'*******************************************
For Each cel In pl 'boucle 1 : sur toutes les cellules cel de la plage pl
'condition : si la valeur de la cellule cel existe plus d'une fois dans la plage pl
If Application.WorksheetFunction.CountIf(pl, cel.Value) > 1 Then
For y = 0 To UBound(tb) 'boucle 2 : sur toutes les variables indexées du tableau tb
'si la valeur de la cellule est égale à la variable indexée de tb, va à l'étiquette "suite" (sans ajout de variables)
If cel.Value = tb(y) Then GoTo suite
Next y 'prochaine variable indexée de la boucle 2
cel.Offset(0, 1).Value = cel.Value 'copie la valeur de cel en colonne B
x = x + 1 'incrémente la variable x
ReDim Preserve tb(x) 'redimensionne le tableau de variable tb
tb(x) = cel.Value 'ajoute une nouvelle variable indexée au tableau tb
End If 'fin de la condition
suite: 'étiquette
Next cel 'prochaine cellule de la boucle 1
End Sub
Pas si sûr d'avoir visé juste !
Ma procédure conserve uniquement un exemplaire des éléments en double, mais élimine les éléments uniques et aussi les éléments multiples en nombre supérieur à deux.
Pour faire la même chose que vous, je dois modifier ainsi :
Code:
[COLOR="DarkSlateGray"]Sub toto()
Dim plage As Range, tableau
Set plage = Range("A2:A" & Range("A65536").End(xlUp).Row)
tableau = plage.Value
For i = 1 To UBound(tableau, 1)
Select Case WorksheetFunction.CountIf(plage, tableau(i, 1))
Case [COLOR="Red"]Is > 1[/COLOR]
For j = i + 1 To UBound(tableau, 1)
[COLOR="Red"]If tableau(i, 1) = tableau(j, 1) Then tableau(j, 1) = ""[/COLOR]
Next
Case Else: tableau(i, 1) = ""
End Select
Next
plage.Offset(0, 1) = tableau
End Sub[/COLOR]
For i = [A65000].End(xlUp).Row To 2 Step -1
If Cells(i, 1) <> Cells(i - 1, 1) And Application.CountIf([a:a], Cells(i, 1)) > 1 Then Cells(i, 2) = Cells(i, 1)
Next i
Hulk ! Tu n'es plus le seul... Je suis vert moi aussi ! Vert de honte quand je vois ce que font nos amis. C'est plus de la formule ça ! C'est carrément de la Formule 1 !
Merci pour le tableau comparatif, très instructif, mais ...
Pour que la comparaison soit fiable il faudrait que l'extension de la plage de données réponde aux mêmes critères que ceux qui peuvent être déduits de l'exemple initial, c'est à dire :
- pas de cellules vides
- des doublons groupés
- pas de valeurs alphabétiques
- pas plus de deux valeurs identiques
Pour ma part, le comparatif sur l'extension des données répond à une autre question que celle posée initialement.
Bonjour,
d'accord avec Roger. C'est d'ailleurs pour cela que j'avais précisé "par rapport à l'exemple fourni". Il faudrait donc que bruno62 précise d'avantage sa demande.
- 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