FAQ Excel

FAQ ExcelConsultez toutes les FAQ
Nombre d'auteurs : 46, nombre de questions : 845, dernière mise à jour : 30 mars 2022
Sommaire→Les doublons- Quelles sont les fonctions disponibles dans Excel pour gérer les doublons ?
- Comment supprimer les doublons contenus dans une plage de cellules ?
- Comment conserver uniquement les doublons d'un tableau ?
- Comment générer une série de nombres entiers aléatoires sans doublon ?
- Comment créer des listes de validation conditionnelles et sans doublon ?
- Comment dédoublonner une plage en utilisant un SQL par DAO ?
- Comment extraire les données d'une plage qui n'apparaissent pas dans une deuxième plage ?
Cet exemple supprime la ligne complète si des cellules de la plage A1:A10 sont en doublons :
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 SubCe deuxième code supprime les lignes qui ont le même contenu dans la colonne A.
On suppose que la feuille est préalablement triée sur cette colonne et qu'il n'y a pas de cellule
vide dans la colonne A.
Sub DeleteDouble()
Dim rRange As Range
Dim rCell As Range
Set rRange = Range([A1], [A1].End(xlDown))
For Each rCell In rRange
Do While rCell = rCell.Offset(1, 0)
rCell.Offset(1, 0).EntireRow.Delete
Loop
Next rCell
End SubSi un problème de casse (majuscules/minuscules) risque de se présenter, ajoutez le mot clé
Option Compare Text en tête de module.
Consultez le tutoriel sur les doublons pour obtenir plus d'informations.
Si par exemple vos données sont en A2:A20, saisissez la formule suivante en B2 :
=SI(NB.SI($A$2:$A$20;A2)>1;"Multiple";"Unique")
Etirez la formule vers le bas, jusqu'en B20.
Appliquez un filtre automatique dans la feuille et affichez les données contenant la donnée "Multiple".
Copiez les cellules visibles (les doublons) dans une autre feuille.
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).
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 SubIl 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.
Voici une méthode pour dé-doublonner une plage qui utilise un SQL par DAO.
Cette méthode permet de combiner plusieurs champs non contigus pour enlever les doublons.
Pensez à ajouter la référence DAO 3.x.
Sub DAOdedoublonnage()
'lancer le processus de dédoublonnage
Dim rT As Range, rD As Range, rCible As Range
Dim sql As String, group As String
On Error GoTo sortiePropre
Set rT = application.InputBox("Sélection de la table sans les libellés", _
"Dédoublonnage", Selection.AddressLocal, Type:=8)
Set rD = application.InputBox("Sélection du/des champs critère(s)", _
"Dédoublonnage", Selection.AddressLocal, Type:=8)
Set rCible = application.InputBox("Indication de la plage de restitution", _
"Dédoublonnage", Selection.AddressLocal, Type:=8)
Dim db As DAO.database
Dim rs As DAO.Recordset
Set db = DAO.OpenDatabase(rT.Parent.Parent.FullName, False, False, "Excel 8.0;HDR=NO;")
For i = 0 To rT.Columns.Count - 1
If Intersect(rD, rT.Parent.Cells(rT.Row, rT.Column + i)) Is Nothing Then
sql = sql & ", First([F" & i + 1 & "])"
Else
sql = sql & ", [F" & i + 1 & "]"
group = group & ", [F" & i + 1 & "]"
End If
Next i
sql = "SELECT " & Mid(sql, 3) & " " & _
"FROM [" & rT.Parent.Name & "$" & rT.Address(False, False, xlA1) & "] " & _
"GROUP BY " & Mid(group, 3)
'Debug.Print sql
Set rs = db.OpenRecordset(sql, DAO.dbOpenSnapshot)
rCible.CopyFromRecordset rs
rs.Close
sortiePropre:
Set rD = Nothing
Set rT = Nothing
Set rCible = Nothing
Set db = Nothing
Set rs = Nothing
End SubLes données sont par exemple dans la plage A2:B20 et vous souhaitez extraire les éléments de la plage A2:A20 qui n'apparaissent pas dans la plage B2:B20.
Vous allez saisir la formule suivante en C2 :
=SI(A2="";"";SI(NB.SI(B$2:B20;A2)>0;"";MAX($D$1:$D1)+1))Puis utilisez les poignées de recopie vers le bas, jusqu'en C20.
Vous allez ainsi identifier et indexer les lignes qui contiennent des données répondant à votre recherche.
Nota :SI(A2="";"";
permet de gérer les éventuelles cellules vides dans la colonne A.
Ensuite saisissez cette formule en D2 :
=SI(LIGNES($C$2:$C2)>MAX($C$2:$C$20);"";DECALER($A$2;EQUIV(LIGNES($C$2:$C2);$C$2:$C$20;0)-1;0))Puis utilisez les poignées de recopie vers le bas jusqu'en D20.
Vous obtenez la liste synthétique des éléments de la colonne A.
La colonne C ne servant que de calcul intermédiaire, elle pourra éventuellement par la suite être masquée dans la feuille de calcul
(Sélectionnez la colonne C / Clic droit / Choisissez l'option "Masquer").



