[Résolu]Garder uniquement les doublons sur Excel

Garder uniquement les doublons sur Excel [Résolu] - VB/VBA/VBS - Programmation

Marsh Posté le 05-08-2006 à 20:30:06    

Bonsoir
 
Je veux utiliser le code suivant
Sub Gardelesdoublons()
For i = 1 To 13
For j = 1 To 7
If Cells(i, j).Value = 5 Then
Cells(i, j).Font.ColorIndex = 3
Else
Cells(i, j).Delete
End If
Next j
Next i
End Sub
 
Supposons que j'ai un tableau excel à une colonne triée avec des doublons et des valeurs différentes. Je veux extraire uniquement les doublons. Je lance ma macro. Mes doublons sont biens conservés et sont coloriés en rouge. Par contre, je ne sais pas pourquoi, mon tableau conserve certaines valeurs, à savoir une valeur sur deux et ma première ligne de doublons n'est pas coloriée.
 
Merci pour vos explications


Message édité par TAM136 le 06-08-2006 à 09:19:35
Reply

Marsh Posté le 05-08-2006 à 20:30:06   

Reply

Marsh Posté le 06-08-2006 à 06:14:43    

Bonjour,  
habituellement quand on delete on procède à l'envers (en commençant par la dernière ligne), c'est plus facile à gérer :
 
Avec ta macro actuelle, tu es dans la boucle mettons... Ligne 6  
La condition à déjà été évaluée pour la ligne 6
et on décide la supprimer :  
Après suppression, l'actuelle ligne 7 va devenir  la nouvelle ligne 6 et la condition ne sera pas réévaluée car elle à déjà été évaluée pour la ligne 6 et la boucle For va s'incrémenter. c'est donc la nouvelle ligne 7 qui sera évaluée.
 
C'est ce qui fait que certaines lignes sont ignorée.
On pourrais "tricher" en mettant un  
i = i -1  
après le delete de manière à réexaminer la ligne 6, cependant cette manière de faire n'est pas très orthodoxe.
Par convention les programmeurs évitent de manipuler les variables de boucle à l'intérieur de la boucle, ce qui produit souvent des effets difficilement gérables : il est bien plus simple de monter la boucle à l'envers :
 
For i = 13 To 1 Step -1
... le reste sans changement
 
A+

Reply

Marsh Posté le 06-08-2006 à 09:18:54    

Bonjour
 
Merci beaucoup pour la réponse.
 
@+

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed