Accueil
Accueil Le Club Delphi Kylix C C++ Java J2EE DotNET & C# Visual Basic Access Pascal Dev Web PHP ASP XML UML SQLSGBD Windows Linux Autres
logo

precedent    sommaire    suivant   


Comment supprimer les doublons contenus dans une plage de cellules ?
auteurs : SilkyRoad, Singular
Cet exemple supprime la ligne complète si des cellules de la plage A1:A10 sont en doublons:

Vba

Option Explicit
Option Base 1

Sub SupprimeDoublons()
    Dim Plage As Range, Cell As Range
    Dim Un As New Collection
    Dim Tableau() As Integer
    Dim x As Integer
    
    
    'Définit la plage de cellules pour la recherche de doublons
    Set Plage = Worksheets("Feuil1").Range("A1:A10")
    
    On Error Resume Next
    'Boucle sur les cellules de la plage cible
    For Each Cell In Plage
        'Création d'une collection de données uniques (sans doublons)
        Un.Add Cell, CStr(Cell)
        
        'Une erreur survient si l'élément existe dans la collection.
        'La procédure enregistre le numéro de ligne correspondant dans un tableau.
        If Err.Number <> 0 Then
            x = x + 1
            ReDim Preserve Tableau(1 To x)
            Tableau(x) = Cell.Row
            Err.Clear
        End If
    Next Cell
    On Error GoTo 0
    
    'On sort si aucun doublon n'a été trouvé.
    If x = 0 Then Exit Sub
    
    'Fige l'écran pendant la suppression des lignes
    Application.ScreenUpdating = False
    
    'Boucle sur le tableau pour supprimer les lignes contenant des doublons.
    For x = UBound(Tableau) To LBound(Tableau) Step -1
        Worksheets("Feuil1").Rows(Tableau(x)).EntireRow.Delete
    Next x
    
    Application.ScreenUpdating = True
End Sub



Consultez le tutoriel sur les doublons pour obtenir plus d'informations.



Comment générer une série de nombres entiers aléatoires sans doublon ?
auteur : SilkyRoad
La procédure suivante crée une série de nombres entre 1 et 25, de façon aléatoire et sans doublon.
Les valeurs sont écrites verticalement dans la feuille de calcul, et une option permet d'indiquer à partir de quelle cellule (B1 dans l'exemple).

Vba

Sub Test()
    GenereSerieAleatoireSansDoublons 25, Range("B1")
End Sub


Sub GenereSerieAleatoireSansDoublons(NbValeurs As Integer, Cell As Range)
    Dim Tableau() As Integer, TabNumLignes() As Integer
    Dim i As Integer, k As Integer
    
    ReDim Tableau(NbValeurs)
    ReDim TabNumLignes(NbValeurs)
    
    For i = 1 To NbValeurs
        TabNumLignes(i) = i
        Tableau(i) = i
    Next
    
    'Initialise le générateur de nombres aléatoires
    Randomize
    
    For i = NbValeurs To 1 Step -1
        k = Int((i * Rnd) + 1)
        Cells(Cell.Row + i - 1, Cell.Column) = Tableau(TabNumLignes(k))
        TabNumLignes(k) = TabNumLignes(i)
    Next

End Sub



Il est aussi possible d'effectuer le tirage sans macro:

Insérez la formule = Alea() dans la cellule A1, puis utilisez les poignées de recopie jusqu'en A25.
Saisissez les nombres 1 à 25 chronologiquement dans la plage B1:B25
Dans la cellule C1 vous saisissez:
=RECHERCHEV(PETITE.VALEUR($A$1:$A$25;LIGNE());$A$1:$B$25;2;0)
puis utilisez les poignées de recopie jusqu'en C25.

Utilisez la touche clavier F9 pour lancer nouveau tirage.



precedent    sommaire    suivant   

Consultez les autres F.A.Q's


Les sources présentés sur cette pages sont libre de droits, et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs. Copyright ©2008  Developpez LLC. Tout droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérets. Cette page est déposée à la SACD.

Vos questions techniques : forum d'entraide Accueil - Publiez vos articles, tutoriels, cours et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones. Nous contacter - Copyright 2000..2005 www.developpez.com