Bonjour Rick,
Pour savoir si une macro fait son travail convenablement , il faut d'abord savoir et connaître les attentes de l'usager. À cet
égard, tu as omis de faire une description minutieuse de ton problème, où étaient tes données ? Comment elles sont disposées ? Tu as
oublié aussi de mentionner l'adresse des plages que tu veux comparer (les doublons) ! Et lorsque la macro trouve un doublon, que
doit-elle faire avec cela ?
Salutations!
"rick" a écrit dans le message de news:
bonjour,
j'utilise la macro de frederic pour l'elimination de doublons.
en modifiant le code suivant mes besoins,c'est a dire lorsqu'il a des
doublons afficher un message box et proposer OUI pour conserver ce doublon et
donc rajouter un caractere supplémentaire sur la colonne E pour les
différencier.
ou NON dans le message box,qui supprime le doublon(la ligne).
J'ai essayé d'apporter des modifs dans le code, mais cela bloque et cela ne
fonctionne pas comme je souhaite.
l'apercu de la macro:
Dim CheckRows As Range
Dim ColumnsToMatch As Variant
Dim DeleteDuplicates As Boolean
Dim FormatDuplicates As Boolean
Dim WriteListOfDuplicates As Boolean
Dim AddRowNumberToList As Boolean
Dim lLBound As Long
Dim lUBound As Long
Dim CheckRange As Range
Dim SubArray As Variant
Dim FieldsCollection As New Collection
Dim RowNumberCollection As New Collection
Dim Dummy As Long
Dim DuplicateRange As Range
Dim DuplicatesExist As Boolean
Dim lRow As Long
Dim CollectionKey As String
Dim OffsetValue() As Long
Dim StartCell As Range
Dim Element As Variant
Dim Counter As Long
Dim messdoublons As Byte
'adapter les 6 variables ci-dessous pour mettre à jour
'les paramètres de travail de la macro
Set CheckRows = Rows("15:20")
ColumnsToMatch = Array("A", "E", "F")
DeleteDuplicates = False
FormatDuplicates = False
WriteListOfDuplicates = True
AddRowNumberToList = True
lLBound = LBound(ColumnsToMatch)
lUBound = UBound(ColumnsToMatch)
Set CheckRange = Intersect(Range(ColumnsToMatch(lLBound) & _
":" & ColumnsToMatch(lLBound)), CheckRows)
ReDim OffsetValue(lUBound - lLBound + 1)
For Counter = lLBound To lUBound
OffsetValue(Counter) = Range(ColumnsToMatch(Counter) & ":" & _
ColumnsToMatch(Counter)).Column - CheckRange.Column
Next Counter
On Error Resume Next
SubArray = CheckRange.Value
For lRow = 1 To UBound(SubArray, 1)
If SubArray(lRow, 1) <> "" Then
CollectionKey = ""
For Counter = lLBound To lUBound
CollectionKey = CollectionKey & _
CheckRange(lRow, 1).Offset(0, _
OffsetValue(Counter)).Value
Next Counter
FieldsCollection.Add Dummy, CStr(CollectionKey)
If Err.Number = 457 Then
Err.Clear
DuplicatesExist = True
RowNumberCollection.Add CheckRange(lRow, 1).Row
If DuplicateRange Is Nothing Then
Set DuplicateRange = _
CheckRange.Cells(lRow, 1)
Else
Set DuplicateRange = Union(DuplicateRange, _
CheckRange.Cells(lRow, 1))
End If
End If
End If
Next lRow
On Error GoTo 0
« modification de codes apporté au code»
If DuplicatesExist = False Then
MsgBox "Aucun doublons n'est présent", vbInformation
Else
With DuplicateRange.EntireRow
'If WriteListOfDuplicates Then
If AddRowNumberToList Then
messdoublons = MsgBox("DOublons existant sur la ou les
lignes,SOuhaitez vous conservez cette ligne" & Range("A1"), vbYesNo +
vbInformation)
Select Case reponse
Case vbNo
.Delete
Unload UserForm1
Case vbOK
Unload UserForm1
End Select
Set StartCell = Range("A1")
For Each Element In RowNumberCollection
StartCell.Value = "Row " & Element
Set StartCell = StartCell.Offset(1, 0)
Next Element
End If
'End If
End With
End If
merci d'avance
Bonjour Rick,
Pour savoir si une macro fait son travail convenablement , il faut d'abord savoir et connaître les attentes de l'usager. À cet
égard, tu as omis de faire une description minutieuse de ton problème, où étaient tes données ? Comment elles sont disposées ? Tu as
oublié aussi de mentionner l'adresse des plages que tu veux comparer (les doublons) ! Et lorsque la macro trouve un doublon, que
doit-elle faire avec cela ?
Salutations!
"rick" <rick@discussions.microsoft.com> a écrit dans le message de news: F3578FB5-1E62-44B8-8816-7F53BB86662F@microsoft.com...
bonjour,
j'utilise la macro de frederic pour l'elimination de doublons.
en modifiant le code suivant mes besoins,c'est a dire lorsqu'il a des
doublons afficher un message box et proposer OUI pour conserver ce doublon et
donc rajouter un caractere supplémentaire sur la colonne E pour les
différencier.
ou NON dans le message box,qui supprime le doublon(la ligne).
J'ai essayé d'apporter des modifs dans le code, mais cela bloque et cela ne
fonctionne pas comme je souhaite.
l'apercu de la macro:
Dim CheckRows As Range
Dim ColumnsToMatch As Variant
Dim DeleteDuplicates As Boolean
Dim FormatDuplicates As Boolean
Dim WriteListOfDuplicates As Boolean
Dim AddRowNumberToList As Boolean
Dim lLBound As Long
Dim lUBound As Long
Dim CheckRange As Range
Dim SubArray As Variant
Dim FieldsCollection As New Collection
Dim RowNumberCollection As New Collection
Dim Dummy As Long
Dim DuplicateRange As Range
Dim DuplicatesExist As Boolean
Dim lRow As Long
Dim CollectionKey As String
Dim OffsetValue() As Long
Dim StartCell As Range
Dim Element As Variant
Dim Counter As Long
Dim messdoublons As Byte
'adapter les 6 variables ci-dessous pour mettre à jour
'les paramètres de travail de la macro
Set CheckRows = Rows("15:20")
ColumnsToMatch = Array("A", "E", "F")
DeleteDuplicates = False
FormatDuplicates = False
WriteListOfDuplicates = True
AddRowNumberToList = True
lLBound = LBound(ColumnsToMatch)
lUBound = UBound(ColumnsToMatch)
Set CheckRange = Intersect(Range(ColumnsToMatch(lLBound) & _
":" & ColumnsToMatch(lLBound)), CheckRows)
ReDim OffsetValue(lUBound - lLBound + 1)
For Counter = lLBound To lUBound
OffsetValue(Counter) = Range(ColumnsToMatch(Counter) & ":" & _
ColumnsToMatch(Counter)).Column - CheckRange.Column
Next Counter
On Error Resume Next
SubArray = CheckRange.Value
For lRow = 1 To UBound(SubArray, 1)
If SubArray(lRow, 1) <> "" Then
CollectionKey = ""
For Counter = lLBound To lUBound
CollectionKey = CollectionKey & _
CheckRange(lRow, 1).Offset(0, _
OffsetValue(Counter)).Value
Next Counter
FieldsCollection.Add Dummy, CStr(CollectionKey)
If Err.Number = 457 Then
Err.Clear
DuplicatesExist = True
RowNumberCollection.Add CheckRange(lRow, 1).Row
If DuplicateRange Is Nothing Then
Set DuplicateRange = _
CheckRange.Cells(lRow, 1)
Else
Set DuplicateRange = Union(DuplicateRange, _
CheckRange.Cells(lRow, 1))
End If
End If
End If
Next lRow
On Error GoTo 0
« modification de codes apporté au code»
If DuplicatesExist = False Then
MsgBox "Aucun doublons n'est présent", vbInformation
Else
With DuplicateRange.EntireRow
'If WriteListOfDuplicates Then
If AddRowNumberToList Then
messdoublons = MsgBox("DOublons existant sur la ou les
lignes,SOuhaitez vous conservez cette ligne" & Range("A1"), vbYesNo +
vbInformation)
Select Case reponse
Case vbNo
.Delete
Unload UserForm1
Case vbOK
Unload UserForm1
End Select
Set StartCell = Range("A1")
For Each Element In RowNumberCollection
StartCell.Value = "Row " & Element
Set StartCell = StartCell.Offset(1, 0)
Next Element
End If
'End If
End With
End If
merci d'avance
Bonjour Rick,
Pour savoir si une macro fait son travail convenablement , il faut d'abord savoir et connaître les attentes de l'usager. À cet
égard, tu as omis de faire une description minutieuse de ton problème, où étaient tes données ? Comment elles sont disposées ? Tu as
oublié aussi de mentionner l'adresse des plages que tu veux comparer (les doublons) ! Et lorsque la macro trouve un doublon, que
doit-elle faire avec cela ?
Salutations!
"rick" a écrit dans le message de news:
bonjour,
j'utilise la macro de frederic pour l'elimination de doublons.
en modifiant le code suivant mes besoins,c'est a dire lorsqu'il a des
doublons afficher un message box et proposer OUI pour conserver ce doublon et
donc rajouter un caractere supplémentaire sur la colonne E pour les
différencier.
ou NON dans le message box,qui supprime le doublon(la ligne).
J'ai essayé d'apporter des modifs dans le code, mais cela bloque et cela ne
fonctionne pas comme je souhaite.
l'apercu de la macro:
Dim CheckRows As Range
Dim ColumnsToMatch As Variant
Dim DeleteDuplicates As Boolean
Dim FormatDuplicates As Boolean
Dim WriteListOfDuplicates As Boolean
Dim AddRowNumberToList As Boolean
Dim lLBound As Long
Dim lUBound As Long
Dim CheckRange As Range
Dim SubArray As Variant
Dim FieldsCollection As New Collection
Dim RowNumberCollection As New Collection
Dim Dummy As Long
Dim DuplicateRange As Range
Dim DuplicatesExist As Boolean
Dim lRow As Long
Dim CollectionKey As String
Dim OffsetValue() As Long
Dim StartCell As Range
Dim Element As Variant
Dim Counter As Long
Dim messdoublons As Byte
'adapter les 6 variables ci-dessous pour mettre à jour
'les paramètres de travail de la macro
Set CheckRows = Rows("15:20")
ColumnsToMatch = Array("A", "E", "F")
DeleteDuplicates = False
FormatDuplicates = False
WriteListOfDuplicates = True
AddRowNumberToList = True
lLBound = LBound(ColumnsToMatch)
lUBound = UBound(ColumnsToMatch)
Set CheckRange = Intersect(Range(ColumnsToMatch(lLBound) & _
":" & ColumnsToMatch(lLBound)), CheckRows)
ReDim OffsetValue(lUBound - lLBound + 1)
For Counter = lLBound To lUBound
OffsetValue(Counter) = Range(ColumnsToMatch(Counter) & ":" & _
ColumnsToMatch(Counter)).Column - CheckRange.Column
Next Counter
On Error Resume Next
SubArray = CheckRange.Value
For lRow = 1 To UBound(SubArray, 1)
If SubArray(lRow, 1) <> "" Then
CollectionKey = ""
For Counter = lLBound To lUBound
CollectionKey = CollectionKey & _
CheckRange(lRow, 1).Offset(0, _
OffsetValue(Counter)).Value
Next Counter
FieldsCollection.Add Dummy, CStr(CollectionKey)
If Err.Number = 457 Then
Err.Clear
DuplicatesExist = True
RowNumberCollection.Add CheckRange(lRow, 1).Row
If DuplicateRange Is Nothing Then
Set DuplicateRange = _
CheckRange.Cells(lRow, 1)
Else
Set DuplicateRange = Union(DuplicateRange, _
CheckRange.Cells(lRow, 1))
End If
End If
End If
Next lRow
On Error GoTo 0
« modification de codes apporté au code»
If DuplicatesExist = False Then
MsgBox "Aucun doublons n'est présent", vbInformation
Else
With DuplicateRange.EntireRow
'If WriteListOfDuplicates Then
If AddRowNumberToList Then
messdoublons = MsgBox("DOublons existant sur la ou les
lignes,SOuhaitez vous conservez cette ligne" & Range("A1"), vbYesNo +
vbInformation)
Select Case reponse
Case vbNo
.Delete
Unload UserForm1
Case vbOK
Unload UserForm1
End Select
Set StartCell = Range("A1")
For Each Element In RowNumberCollection
StartCell.Value = "Row " & Element
Set StartCell = StartCell.Offset(1, 0)
Next Element
End If
'End If
End With
End If
merci d'avance
Bonjour Rick,
Pour savoir si une macro fait son travail convenablement , il faut d'abord savoir et connaître les attentes de l'usager. À cet
égard, tu as omis de faire une description minutieuse de ton problème, où étaient tes données ? Comment elles sont disposées ? Tu
as
oublié aussi de mentionner l'adresse des plages que tu veux comparer (les doublons) ! Et lorsque la macro trouve un doublon, que
doit-elle faire avec cela ?
Salutations!
"rick" a écrit dans le message de news:
bonjour,
j'utilise la macro de frederic pour l'elimination de doublons.
en modifiant le code suivant mes besoins,c'est a dire lorsqu'il a des
doublons afficher un message box et proposer OUI pour conserver ce doublon et
donc rajouter un caractere supplémentaire sur la colonne E pour les
différencier.
ou NON dans le message box,qui supprime le doublon(la ligne).
J'ai essayé d'apporter des modifs dans le code, mais cela bloque et cela ne
fonctionne pas comme je souhaite.
l'apercu de la macro:
Dim CheckRows As Range
Dim ColumnsToMatch As Variant
Dim DeleteDuplicates As Boolean
Dim FormatDuplicates As Boolean
Dim WriteListOfDuplicates As Boolean
Dim AddRowNumberToList As Boolean
Dim lLBound As Long
Dim lUBound As Long
Dim CheckRange As Range
Dim SubArray As Variant
Dim FieldsCollection As New Collection
Dim RowNumberCollection As New Collection
Dim Dummy As Long
Dim DuplicateRange As Range
Dim DuplicatesExist As Boolean
Dim lRow As Long
Dim CollectionKey As String
Dim OffsetValue() As Long
Dim StartCell As Range
Dim Element As Variant
Dim Counter As Long
Dim messdoublons As Byte
'adapter les 6 variables ci-dessous pour mettre à jour
'les paramètres de travail de la macro
Set CheckRows = Rows("15:20")
ColumnsToMatch = Array("A", "E", "F")
DeleteDuplicates = False
FormatDuplicates = False
WriteListOfDuplicates = True
AddRowNumberToList = True
lLBound = LBound(ColumnsToMatch)
lUBound = UBound(ColumnsToMatch)
Set CheckRange = Intersect(Range(ColumnsToMatch(lLBound) & _
":" & ColumnsToMatch(lLBound)), CheckRows)
ReDim OffsetValue(lUBound - lLBound + 1)
For Counter = lLBound To lUBound
OffsetValue(Counter) = Range(ColumnsToMatch(Counter) & ":" & _
ColumnsToMatch(Counter)).Column - CheckRange.Column
Next Counter
On Error Resume Next
SubArray = CheckRange.Value
For lRow = 1 To UBound(SubArray, 1)
If SubArray(lRow, 1) <> "" Then
CollectionKey = ""
For Counter = lLBound To lUBound
CollectionKey = CollectionKey & _
CheckRange(lRow, 1).Offset(0, _
OffsetValue(Counter)).Value
Next Counter
FieldsCollection.Add Dummy, CStr(CollectionKey)
If Err.Number = 457 Then
Err.Clear
DuplicatesExist = True
RowNumberCollection.Add CheckRange(lRow, 1).Row
If DuplicateRange Is Nothing Then
Set DuplicateRange = _
CheckRange.Cells(lRow, 1)
Else
Set DuplicateRange = Union(DuplicateRange, _
CheckRange.Cells(lRow, 1))
End If
End If
End If
Next lRow
On Error GoTo 0
« modification de codes apporté au code»
If DuplicatesExist = False Then
MsgBox "Aucun doublons n'est présent", vbInformation
Else
With DuplicateRange.EntireRow
'If WriteListOfDuplicates Then
If AddRowNumberToList Then
messdoublons = MsgBox("DOublons existant sur la ou les
lignes,SOuhaitez vous conservez cette ligne" & Range("A1"), vbYesNo +
vbInformation)
Select Case reponse
Case vbNo
.Delete
Unload UserForm1
Case vbOK
Unload UserForm1
End Select
Set StartCell = Range("A1")
For Each Element In RowNumberCollection
StartCell.Value = "Row " & Element
Set StartCell = StartCell.Offset(1, 0)
Next Element
End If
'End If
End With
End If
merci d'avance
Bonjour Rick,
Pour savoir si une macro fait son travail convenablement , il faut d'abord savoir et connaître les attentes de l'usager. À cet
égard, tu as omis de faire une description minutieuse de ton problème, où étaient tes données ? Comment elles sont disposées ? Tu
as
oublié aussi de mentionner l'adresse des plages que tu veux comparer (les doublons) ! Et lorsque la macro trouve un doublon, que
doit-elle faire avec cela ?
Salutations!
"rick" <rick@discussions.microsoft.com> a écrit dans le message de news: F3578FB5-1E62-44B8-8816-7F53BB86662F@microsoft.com...
bonjour,
j'utilise la macro de frederic pour l'elimination de doublons.
en modifiant le code suivant mes besoins,c'est a dire lorsqu'il a des
doublons afficher un message box et proposer OUI pour conserver ce doublon et
donc rajouter un caractere supplémentaire sur la colonne E pour les
différencier.
ou NON dans le message box,qui supprime le doublon(la ligne).
J'ai essayé d'apporter des modifs dans le code, mais cela bloque et cela ne
fonctionne pas comme je souhaite.
l'apercu de la macro:
Dim CheckRows As Range
Dim ColumnsToMatch As Variant
Dim DeleteDuplicates As Boolean
Dim FormatDuplicates As Boolean
Dim WriteListOfDuplicates As Boolean
Dim AddRowNumberToList As Boolean
Dim lLBound As Long
Dim lUBound As Long
Dim CheckRange As Range
Dim SubArray As Variant
Dim FieldsCollection As New Collection
Dim RowNumberCollection As New Collection
Dim Dummy As Long
Dim DuplicateRange As Range
Dim DuplicatesExist As Boolean
Dim lRow As Long
Dim CollectionKey As String
Dim OffsetValue() As Long
Dim StartCell As Range
Dim Element As Variant
Dim Counter As Long
Dim messdoublons As Byte
'adapter les 6 variables ci-dessous pour mettre à jour
'les paramètres de travail de la macro
Set CheckRows = Rows("15:20")
ColumnsToMatch = Array("A", "E", "F")
DeleteDuplicates = False
FormatDuplicates = False
WriteListOfDuplicates = True
AddRowNumberToList = True
lLBound = LBound(ColumnsToMatch)
lUBound = UBound(ColumnsToMatch)
Set CheckRange = Intersect(Range(ColumnsToMatch(lLBound) & _
":" & ColumnsToMatch(lLBound)), CheckRows)
ReDim OffsetValue(lUBound - lLBound + 1)
For Counter = lLBound To lUBound
OffsetValue(Counter) = Range(ColumnsToMatch(Counter) & ":" & _
ColumnsToMatch(Counter)).Column - CheckRange.Column
Next Counter
On Error Resume Next
SubArray = CheckRange.Value
For lRow = 1 To UBound(SubArray, 1)
If SubArray(lRow, 1) <> "" Then
CollectionKey = ""
For Counter = lLBound To lUBound
CollectionKey = CollectionKey & _
CheckRange(lRow, 1).Offset(0, _
OffsetValue(Counter)).Value
Next Counter
FieldsCollection.Add Dummy, CStr(CollectionKey)
If Err.Number = 457 Then
Err.Clear
DuplicatesExist = True
RowNumberCollection.Add CheckRange(lRow, 1).Row
If DuplicateRange Is Nothing Then
Set DuplicateRange = _
CheckRange.Cells(lRow, 1)
Else
Set DuplicateRange = Union(DuplicateRange, _
CheckRange.Cells(lRow, 1))
End If
End If
End If
Next lRow
On Error GoTo 0
« modification de codes apporté au code»
If DuplicatesExist = False Then
MsgBox "Aucun doublons n'est présent", vbInformation
Else
With DuplicateRange.EntireRow
'If WriteListOfDuplicates Then
If AddRowNumberToList Then
messdoublons = MsgBox("DOublons existant sur la ou les
lignes,SOuhaitez vous conservez cette ligne" & Range("A1"), vbYesNo +
vbInformation)
Select Case reponse
Case vbNo
.Delete
Unload UserForm1
Case vbOK
Unload UserForm1
End Select
Set StartCell = Range("A1")
For Each Element In RowNumberCollection
StartCell.Value = "Row " & Element
Set StartCell = StartCell.Offset(1, 0)
Next Element
End If
'End If
End With
End If
merci d'avance
Bonjour Rick,
Pour savoir si une macro fait son travail convenablement , il faut d'abord savoir et connaître les attentes de l'usager. À cet
égard, tu as omis de faire une description minutieuse de ton problème, où étaient tes données ? Comment elles sont disposées ? Tu
as
oublié aussi de mentionner l'adresse des plages que tu veux comparer (les doublons) ! Et lorsque la macro trouve un doublon, que
doit-elle faire avec cela ?
Salutations!
"rick" a écrit dans le message de news:
bonjour,
j'utilise la macro de frederic pour l'elimination de doublons.
en modifiant le code suivant mes besoins,c'est a dire lorsqu'il a des
doublons afficher un message box et proposer OUI pour conserver ce doublon et
donc rajouter un caractere supplémentaire sur la colonne E pour les
différencier.
ou NON dans le message box,qui supprime le doublon(la ligne).
J'ai essayé d'apporter des modifs dans le code, mais cela bloque et cela ne
fonctionne pas comme je souhaite.
l'apercu de la macro:
Dim CheckRows As Range
Dim ColumnsToMatch As Variant
Dim DeleteDuplicates As Boolean
Dim FormatDuplicates As Boolean
Dim WriteListOfDuplicates As Boolean
Dim AddRowNumberToList As Boolean
Dim lLBound As Long
Dim lUBound As Long
Dim CheckRange As Range
Dim SubArray As Variant
Dim FieldsCollection As New Collection
Dim RowNumberCollection As New Collection
Dim Dummy As Long
Dim DuplicateRange As Range
Dim DuplicatesExist As Boolean
Dim lRow As Long
Dim CollectionKey As String
Dim OffsetValue() As Long
Dim StartCell As Range
Dim Element As Variant
Dim Counter As Long
Dim messdoublons As Byte
'adapter les 6 variables ci-dessous pour mettre à jour
'les paramètres de travail de la macro
Set CheckRows = Rows("15:20")
ColumnsToMatch = Array("A", "E", "F")
DeleteDuplicates = False
FormatDuplicates = False
WriteListOfDuplicates = True
AddRowNumberToList = True
lLBound = LBound(ColumnsToMatch)
lUBound = UBound(ColumnsToMatch)
Set CheckRange = Intersect(Range(ColumnsToMatch(lLBound) & _
":" & ColumnsToMatch(lLBound)), CheckRows)
ReDim OffsetValue(lUBound - lLBound + 1)
For Counter = lLBound To lUBound
OffsetValue(Counter) = Range(ColumnsToMatch(Counter) & ":" & _
ColumnsToMatch(Counter)).Column - CheckRange.Column
Next Counter
On Error Resume Next
SubArray = CheckRange.Value
For lRow = 1 To UBound(SubArray, 1)
If SubArray(lRow, 1) <> "" Then
CollectionKey = ""
For Counter = lLBound To lUBound
CollectionKey = CollectionKey & _
CheckRange(lRow, 1).Offset(0, _
OffsetValue(Counter)).Value
Next Counter
FieldsCollection.Add Dummy, CStr(CollectionKey)
If Err.Number = 457 Then
Err.Clear
DuplicatesExist = True
RowNumberCollection.Add CheckRange(lRow, 1).Row
If DuplicateRange Is Nothing Then
Set DuplicateRange = _
CheckRange.Cells(lRow, 1)
Else
Set DuplicateRange = Union(DuplicateRange, _
CheckRange.Cells(lRow, 1))
End If
End If
End If
Next lRow
On Error GoTo 0
« modification de codes apporté au code»
If DuplicatesExist = False Then
MsgBox "Aucun doublons n'est présent", vbInformation
Else
With DuplicateRange.EntireRow
'If WriteListOfDuplicates Then
If AddRowNumberToList Then
messdoublons = MsgBox("DOublons existant sur la ou les
lignes,SOuhaitez vous conservez cette ligne" & Range("A1"), vbYesNo +
vbInformation)
Select Case reponse
Case vbNo
.Delete
Unload UserForm1
Case vbOK
Unload UserForm1
End Select
Set StartCell = Range("A1")
For Each Element In RowNumberCollection
StartCell.Value = "Row " & Element
Set StartCell = StartCell.Offset(1, 0)
Next Element
End If
'End If
End With
End If
merci d'avance
Bonjour Rick,
Si j'ai bien compris, pour qu'il y ait un doublon, il doit y avoir une correspondance exacte du contenu des 5 cellules de la même
ligne A, E, F, H, I.
Quel est l'événement qui doit déclencher cette macro ?
Cette section de ton message n'est pas claire :
Souhaite t'il entrer cette facilité : si il repond oui cette combinaison est
intégré à cette plage en entrant dans la colonne F un caractere subsidiaire
pour les differencier.
Donne un exemple du contenu des 5 colonnes avant le message et après que l'usager ait répondu OUI.
Salutations!
"rick" a écrit dans le message de news:
ma plage est de A15 à HI200,
5 colonne définnisent une combinaison:
A et E et F et H et I
on doit avoir une combinaison identique,je souhaite donc afficher un message
box quand il y a des doublons et afficher un message à l'utilisateur:
Souhaite t'il entrer cette facilité : si il repond oui cette combinaison est
intégré à cette plage en entrant dans la colonne F un caractere subsidiaire
pour les differencier.
Si il repond non , le doublon est supprimé.
merci d'avanceBonjour Rick,
Pour savoir si une macro fait son travail convenablement , il faut d'abord savoir et connaître les attentes de l'usager. À cet
égard, tu as omis de faire une description minutieuse de ton problème, où étaient tes données ? Comment elles sont disposées ? Tu
as
oublié aussi de mentionner l'adresse des plages que tu veux comparer (les doublons) ! Et lorsque la macro trouve un doublon, que
doit-elle faire avec cela ?
Salutations!
"rick" a écrit dans le message de news:
bonjour,
j'utilise la macro de frederic pour l'elimination de doublons.
en modifiant le code suivant mes besoins,c'est a dire lorsqu'il a des
doublons afficher un message box et proposer OUI pour conserver ce doublon et
donc rajouter un caractere supplémentaire sur la colonne E pour les
différencier.
ou NON dans le message box,qui supprime le doublon(la ligne).
J'ai essayé d'apporter des modifs dans le code, mais cela bloque et cela ne
fonctionne pas comme je souhaite.
l'apercu de la macro:
Dim CheckRows As Range
Dim ColumnsToMatch As Variant
Dim DeleteDuplicates As Boolean
Dim FormatDuplicates As Boolean
Dim WriteListOfDuplicates As Boolean
Dim AddRowNumberToList As Boolean
Dim lLBound As Long
Dim lUBound As Long
Dim CheckRange As Range
Dim SubArray As Variant
Dim FieldsCollection As New Collection
Dim RowNumberCollection As New Collection
Dim Dummy As Long
Dim DuplicateRange As Range
Dim DuplicatesExist As Boolean
Dim lRow As Long
Dim CollectionKey As String
Dim OffsetValue() As Long
Dim StartCell As Range
Dim Element As Variant
Dim Counter As Long
Dim messdoublons As Byte
'adapter les 6 variables ci-dessous pour mettre à jour
'les paramètres de travail de la macro
Set CheckRows = Rows("15:20")
ColumnsToMatch = Array("A", "E", "F")
DeleteDuplicates = False
FormatDuplicates = False
WriteListOfDuplicates = True
AddRowNumberToList = True
lLBound = LBound(ColumnsToMatch)
lUBound = UBound(ColumnsToMatch)
Set CheckRange = Intersect(Range(ColumnsToMatch(lLBound) & _
":" & ColumnsToMatch(lLBound)), CheckRows)
ReDim OffsetValue(lUBound - lLBound + 1)
For Counter = lLBound To lUBound
OffsetValue(Counter) = Range(ColumnsToMatch(Counter) & ":" & _
ColumnsToMatch(Counter)).Column - CheckRange.Column
Next Counter
On Error Resume Next
SubArray = CheckRange.Value
For lRow = 1 To UBound(SubArray, 1)
If SubArray(lRow, 1) <> "" Then
CollectionKey = ""
For Counter = lLBound To lUBound
CollectionKey = CollectionKey & _
CheckRange(lRow, 1).Offset(0, _
OffsetValue(Counter)).Value
Next Counter
FieldsCollection.Add Dummy, CStr(CollectionKey)
If Err.Number = 457 Then
Err.Clear
DuplicatesExist = True
RowNumberCollection.Add CheckRange(lRow, 1).Row
If DuplicateRange Is Nothing Then
Set DuplicateRange = _
CheckRange.Cells(lRow, 1)
Else
Set DuplicateRange = Union(DuplicateRange, _
CheckRange.Cells(lRow, 1))
End If
End If
End If
Next lRow
On Error GoTo 0
« modification de codes apporté au code»
If DuplicatesExist = False Then
MsgBox "Aucun doublons n'est présent", vbInformation
Else
With DuplicateRange.EntireRow
'If WriteListOfDuplicates Then
If AddRowNumberToList Then
messdoublons = MsgBox("DOublons existant sur la ou les
lignes,SOuhaitez vous conservez cette ligne" & Range("A1"), vbYesNo +
vbInformation)
Select Case reponse
Case vbNo
.Delete
Unload UserForm1
Case vbOK
Unload UserForm1
End Select
Set StartCell = Range("A1")
For Each Element In RowNumberCollection
StartCell.Value = "Row " & Element
Set StartCell = StartCell.Offset(1, 0)
Next Element
End If
'End If
End With
End If
merci d'avance
Bonjour Rick,
Si j'ai bien compris, pour qu'il y ait un doublon, il doit y avoir une correspondance exacte du contenu des 5 cellules de la même
ligne A, E, F, H, I.
Quel est l'événement qui doit déclencher cette macro ?
Cette section de ton message n'est pas claire :
Souhaite t'il entrer cette facilité : si il repond oui cette combinaison est
intégré à cette plage en entrant dans la colonne F un caractere subsidiaire
pour les differencier.
Donne un exemple du contenu des 5 colonnes avant le message et après que l'usager ait répondu OUI.
Salutations!
"rick" <rick@discussions.microsoft.com> a écrit dans le message de news: B0FC0774-CE9B-483A-83DE-C39BAFC8D84B@microsoft.com...
ma plage est de A15 à HI200,
5 colonne définnisent une combinaison:
A et E et F et H et I
on doit avoir une combinaison identique,je souhaite donc afficher un message
box quand il y a des doublons et afficher un message à l'utilisateur:
Souhaite t'il entrer cette facilité : si il repond oui cette combinaison est
intégré à cette plage en entrant dans la colonne F un caractere subsidiaire
pour les differencier.
Si il repond non , le doublon est supprimé.
merci d'avance
Bonjour Rick,
Pour savoir si une macro fait son travail convenablement , il faut d'abord savoir et connaître les attentes de l'usager. À cet
égard, tu as omis de faire une description minutieuse de ton problème, où étaient tes données ? Comment elles sont disposées ? Tu
as
oublié aussi de mentionner l'adresse des plages que tu veux comparer (les doublons) ! Et lorsque la macro trouve un doublon, que
doit-elle faire avec cela ?
Salutations!
"rick" <rick@discussions.microsoft.com> a écrit dans le message de news: F3578FB5-1E62-44B8-8816-7F53BB86662F@microsoft.com...
bonjour,
j'utilise la macro de frederic pour l'elimination de doublons.
en modifiant le code suivant mes besoins,c'est a dire lorsqu'il a des
doublons afficher un message box et proposer OUI pour conserver ce doublon et
donc rajouter un caractere supplémentaire sur la colonne E pour les
différencier.
ou NON dans le message box,qui supprime le doublon(la ligne).
J'ai essayé d'apporter des modifs dans le code, mais cela bloque et cela ne
fonctionne pas comme je souhaite.
l'apercu de la macro:
Dim CheckRows As Range
Dim ColumnsToMatch As Variant
Dim DeleteDuplicates As Boolean
Dim FormatDuplicates As Boolean
Dim WriteListOfDuplicates As Boolean
Dim AddRowNumberToList As Boolean
Dim lLBound As Long
Dim lUBound As Long
Dim CheckRange As Range
Dim SubArray As Variant
Dim FieldsCollection As New Collection
Dim RowNumberCollection As New Collection
Dim Dummy As Long
Dim DuplicateRange As Range
Dim DuplicatesExist As Boolean
Dim lRow As Long
Dim CollectionKey As String
Dim OffsetValue() As Long
Dim StartCell As Range
Dim Element As Variant
Dim Counter As Long
Dim messdoublons As Byte
'adapter les 6 variables ci-dessous pour mettre à jour
'les paramètres de travail de la macro
Set CheckRows = Rows("15:20")
ColumnsToMatch = Array("A", "E", "F")
DeleteDuplicates = False
FormatDuplicates = False
WriteListOfDuplicates = True
AddRowNumberToList = True
lLBound = LBound(ColumnsToMatch)
lUBound = UBound(ColumnsToMatch)
Set CheckRange = Intersect(Range(ColumnsToMatch(lLBound) & _
":" & ColumnsToMatch(lLBound)), CheckRows)
ReDim OffsetValue(lUBound - lLBound + 1)
For Counter = lLBound To lUBound
OffsetValue(Counter) = Range(ColumnsToMatch(Counter) & ":" & _
ColumnsToMatch(Counter)).Column - CheckRange.Column
Next Counter
On Error Resume Next
SubArray = CheckRange.Value
For lRow = 1 To UBound(SubArray, 1)
If SubArray(lRow, 1) <> "" Then
CollectionKey = ""
For Counter = lLBound To lUBound
CollectionKey = CollectionKey & _
CheckRange(lRow, 1).Offset(0, _
OffsetValue(Counter)).Value
Next Counter
FieldsCollection.Add Dummy, CStr(CollectionKey)
If Err.Number = 457 Then
Err.Clear
DuplicatesExist = True
RowNumberCollection.Add CheckRange(lRow, 1).Row
If DuplicateRange Is Nothing Then
Set DuplicateRange = _
CheckRange.Cells(lRow, 1)
Else
Set DuplicateRange = Union(DuplicateRange, _
CheckRange.Cells(lRow, 1))
End If
End If
End If
Next lRow
On Error GoTo 0
« modification de codes apporté au code»
If DuplicatesExist = False Then
MsgBox "Aucun doublons n'est présent", vbInformation
Else
With DuplicateRange.EntireRow
'If WriteListOfDuplicates Then
If AddRowNumberToList Then
messdoublons = MsgBox("DOublons existant sur la ou les
lignes,SOuhaitez vous conservez cette ligne" & Range("A1"), vbYesNo +
vbInformation)
Select Case reponse
Case vbNo
.Delete
Unload UserForm1
Case vbOK
Unload UserForm1
End Select
Set StartCell = Range("A1")
For Each Element In RowNumberCollection
StartCell.Value = "Row " & Element
Set StartCell = StartCell.Offset(1, 0)
Next Element
End If
'End If
End With
End If
merci d'avance
Bonjour Rick,
Si j'ai bien compris, pour qu'il y ait un doublon, il doit y avoir une correspondance exacte du contenu des 5 cellules de la même
ligne A, E, F, H, I.
Quel est l'événement qui doit déclencher cette macro ?
Cette section de ton message n'est pas claire :
Souhaite t'il entrer cette facilité : si il repond oui cette combinaison est
intégré à cette plage en entrant dans la colonne F un caractere subsidiaire
pour les differencier.
Donne un exemple du contenu des 5 colonnes avant le message et après que l'usager ait répondu OUI.
Salutations!
"rick" a écrit dans le message de news:
ma plage est de A15 à HI200,
5 colonne définnisent une combinaison:
A et E et F et H et I
on doit avoir une combinaison identique,je souhaite donc afficher un message
box quand il y a des doublons et afficher un message à l'utilisateur:
Souhaite t'il entrer cette facilité : si il repond oui cette combinaison est
intégré à cette plage en entrant dans la colonne F un caractere subsidiaire
pour les differencier.
Si il repond non , le doublon est supprimé.
merci d'avanceBonjour Rick,
Pour savoir si une macro fait son travail convenablement , il faut d'abord savoir et connaître les attentes de l'usager. À cet
égard, tu as omis de faire une description minutieuse de ton problème, où étaient tes données ? Comment elles sont disposées ? Tu
as
oublié aussi de mentionner l'adresse des plages que tu veux comparer (les doublons) ! Et lorsque la macro trouve un doublon, que
doit-elle faire avec cela ?
Salutations!
"rick" a écrit dans le message de news:
bonjour,
j'utilise la macro de frederic pour l'elimination de doublons.
en modifiant le code suivant mes besoins,c'est a dire lorsqu'il a des
doublons afficher un message box et proposer OUI pour conserver ce doublon et
donc rajouter un caractere supplémentaire sur la colonne E pour les
différencier.
ou NON dans le message box,qui supprime le doublon(la ligne).
J'ai essayé d'apporter des modifs dans le code, mais cela bloque et cela ne
fonctionne pas comme je souhaite.
l'apercu de la macro:
Dim CheckRows As Range
Dim ColumnsToMatch As Variant
Dim DeleteDuplicates As Boolean
Dim FormatDuplicates As Boolean
Dim WriteListOfDuplicates As Boolean
Dim AddRowNumberToList As Boolean
Dim lLBound As Long
Dim lUBound As Long
Dim CheckRange As Range
Dim SubArray As Variant
Dim FieldsCollection As New Collection
Dim RowNumberCollection As New Collection
Dim Dummy As Long
Dim DuplicateRange As Range
Dim DuplicatesExist As Boolean
Dim lRow As Long
Dim CollectionKey As String
Dim OffsetValue() As Long
Dim StartCell As Range
Dim Element As Variant
Dim Counter As Long
Dim messdoublons As Byte
'adapter les 6 variables ci-dessous pour mettre à jour
'les paramètres de travail de la macro
Set CheckRows = Rows("15:20")
ColumnsToMatch = Array("A", "E", "F")
DeleteDuplicates = False
FormatDuplicates = False
WriteListOfDuplicates = True
AddRowNumberToList = True
lLBound = LBound(ColumnsToMatch)
lUBound = UBound(ColumnsToMatch)
Set CheckRange = Intersect(Range(ColumnsToMatch(lLBound) & _
":" & ColumnsToMatch(lLBound)), CheckRows)
ReDim OffsetValue(lUBound - lLBound + 1)
For Counter = lLBound To lUBound
OffsetValue(Counter) = Range(ColumnsToMatch(Counter) & ":" & _
ColumnsToMatch(Counter)).Column - CheckRange.Column
Next Counter
On Error Resume Next
SubArray = CheckRange.Value
For lRow = 1 To UBound(SubArray, 1)
If SubArray(lRow, 1) <> "" Then
CollectionKey = ""
For Counter = lLBound To lUBound
CollectionKey = CollectionKey & _
CheckRange(lRow, 1).Offset(0, _
OffsetValue(Counter)).Value
Next Counter
FieldsCollection.Add Dummy, CStr(CollectionKey)
If Err.Number = 457 Then
Err.Clear
DuplicatesExist = True
RowNumberCollection.Add CheckRange(lRow, 1).Row
If DuplicateRange Is Nothing Then
Set DuplicateRange = _
CheckRange.Cells(lRow, 1)
Else
Set DuplicateRange = Union(DuplicateRange, _
CheckRange.Cells(lRow, 1))
End If
End If
End If
Next lRow
On Error GoTo 0
« modification de codes apporté au code»
If DuplicatesExist = False Then
MsgBox "Aucun doublons n'est présent", vbInformation
Else
With DuplicateRange.EntireRow
'If WriteListOfDuplicates Then
If AddRowNumberToList Then
messdoublons = MsgBox("DOublons existant sur la ou les
lignes,SOuhaitez vous conservez cette ligne" & Range("A1"), vbYesNo +
vbInformation)
Select Case reponse
Case vbNo
.Delete
Unload UserForm1
Case vbOK
Unload UserForm1
End Select
Set StartCell = Range("A1")
For Each Element In RowNumberCollection
StartCell.Value = "Row " & Element
Set StartCell = StartCell.Offset(1, 0)
Next Element
End If
'End If
End With
End If
merci d'avance
Bonjour Rick,
Si j'ai bien compris, pour qu'il y ait un doublon, il doit y avoir une correspondance exacte du contenu des 5 cellules de la même
ligne A, E, F, H, I.
Quel est l'événement qui doit déclencher cette macro ?
Cette section de ton message n'est pas claire :
Souhaite t'il entrer cette facilité : si il repond oui cette combinaison est
intégré à cette plage en entrant dans la colonne F un caractere subsidiaire
pour les differencier.
Donne un exemple du contenu des 5 colonnes avant le message et après que l'usager ait répondu OUI.
Salutations!
"rick" a écrit dans le message de news:
ma plage est de A15 à HI200,
5 colonne définnisent une combinaison:
A et E et F et H et I
on doit avoir une combinaison identique,je souhaite donc afficher un message
box quand il y a des doublons et afficher un message à l'utilisateur:
Souhaite t'il entrer cette facilité : si il repond oui cette combinaison est
intégré à cette plage en entrant dans la colonne F un caractere subsidiaire
pour les differencier.
Si il repond non , le doublon est supprimé.
merci d'avanceBonjour Rick,
Pour savoir si une macro fait son travail convenablement , il faut d'abord savoir et connaître les attentes de l'usager. À cet
égard, tu as omis de faire une description minutieuse de ton problème, où étaient tes données ? Comment elles sont disposées ?
Tu
as
oublié aussi de mentionner l'adresse des plages que tu veux comparer (les doublons) ! Et lorsque la macro trouve un doublon, que
doit-elle faire avec cela ?
Salutations!
"rick" a écrit dans le message de news:
bonjour,
j'utilise la macro de frederic pour l'elimination de doublons.
en modifiant le code suivant mes besoins,c'est a dire lorsqu'il a des
doublons afficher un message box et proposer OUI pour conserver ce doublon et
donc rajouter un caractere supplémentaire sur la colonne E pour les
différencier.
ou NON dans le message box,qui supprime le doublon(la ligne).
J'ai essayé d'apporter des modifs dans le code, mais cela bloque et cela ne
fonctionne pas comme je souhaite.
l'apercu de la macro:
Dim CheckRows As Range
Dim ColumnsToMatch As Variant
Dim DeleteDuplicates As Boolean
Dim FormatDuplicates As Boolean
Dim WriteListOfDuplicates As Boolean
Dim AddRowNumberToList As Boolean
Dim lLBound As Long
Dim lUBound As Long
Dim CheckRange As Range
Dim SubArray As Variant
Dim FieldsCollection As New Collection
Dim RowNumberCollection As New Collection
Dim Dummy As Long
Dim DuplicateRange As Range
Dim DuplicatesExist As Boolean
Dim lRow As Long
Dim CollectionKey As String
Dim OffsetValue() As Long
Dim StartCell As Range
Dim Element As Variant
Dim Counter As Long
Dim messdoublons As Byte
'adapter les 6 variables ci-dessous pour mettre à jour
'les paramètres de travail de la macro
Set CheckRows = Rows("15:20")
ColumnsToMatch = Array("A", "E", "F")
DeleteDuplicates = False
FormatDuplicates = False
WriteListOfDuplicates = True
AddRowNumberToList = True
lLBound = LBound(ColumnsToMatch)
lUBound = UBound(ColumnsToMatch)
Set CheckRange = Intersect(Range(ColumnsToMatch(lLBound) & _
":" & ColumnsToMatch(lLBound)), CheckRows)
ReDim OffsetValue(lUBound - lLBound + 1)
For Counter = lLBound To lUBound
OffsetValue(Counter) = Range(ColumnsToMatch(Counter) & ":" & _
ColumnsToMatch(Counter)).Column - CheckRange.Column
Next Counter
On Error Resume Next
SubArray = CheckRange.Value
For lRow = 1 To UBound(SubArray, 1)
If SubArray(lRow, 1) <> "" Then
CollectionKey = ""
For Counter = lLBound To lUBound
CollectionKey = CollectionKey & _
CheckRange(lRow, 1).Offset(0, _
OffsetValue(Counter)).Value
Next Counter
FieldsCollection.Add Dummy, CStr(CollectionKey)
If Err.Number = 457 Then
Err.Clear
DuplicatesExist = True
RowNumberCollection.Add CheckRange(lRow, 1).Row
If DuplicateRange Is Nothing Then
Set DuplicateRange = _
CheckRange.Cells(lRow, 1)
Else
Set DuplicateRange = Union(DuplicateRange, _
CheckRange.Cells(lRow, 1))
End If
End If
End If
Next lRow
On Error GoTo 0
« modification de codes apporté au code»
If DuplicatesExist = False Then
MsgBox "Aucun doublons n'est présent", vbInformation
Else
With DuplicateRange.EntireRow
'If WriteListOfDuplicates Then
If AddRowNumberToList Then
messdoublons = MsgBox("DOublons existant sur la ou les
lignes,SOuhaitez vous conservez cette ligne" & Range("A1"), vbYesNo +
vbInformation)
Select Case reponse
Case vbNo
.Delete
Unload UserForm1
Case vbOK
Unload UserForm1
End Select
Set StartCell = Range("A1")
For Each Element In RowNumberCollection
StartCell.Value = "Row " & Element
Set StartCell = StartCell.Offset(1, 0)
Next Element
End If
'End If
End With
End If
merci d'avance
Bonjour Rick,
Si j'ai bien compris, pour qu'il y ait un doublon, il doit y avoir une correspondance exacte du contenu des 5 cellules de la même
ligne A, E, F, H, I.
Quel est l'événement qui doit déclencher cette macro ?
Cette section de ton message n'est pas claire :
Souhaite t'il entrer cette facilité : si il repond oui cette combinaison est
intégré à cette plage en entrant dans la colonne F un caractere subsidiaire
pour les differencier.
Donne un exemple du contenu des 5 colonnes avant le message et après que l'usager ait répondu OUI.
Salutations!
"rick" <rick@discussions.microsoft.com> a écrit dans le message de news: B0FC0774-CE9B-483A-83DE-C39BAFC8D84B@microsoft.com...
ma plage est de A15 à HI200,
5 colonne définnisent une combinaison:
A et E et F et H et I
on doit avoir une combinaison identique,je souhaite donc afficher un message
box quand il y a des doublons et afficher un message à l'utilisateur:
Souhaite t'il entrer cette facilité : si il repond oui cette combinaison est
intégré à cette plage en entrant dans la colonne F un caractere subsidiaire
pour les differencier.
Si il repond non , le doublon est supprimé.
merci d'avance
Bonjour Rick,
Pour savoir si une macro fait son travail convenablement , il faut d'abord savoir et connaître les attentes de l'usager. À cet
égard, tu as omis de faire une description minutieuse de ton problème, où étaient tes données ? Comment elles sont disposées ?
Tu
as
oublié aussi de mentionner l'adresse des plages que tu veux comparer (les doublons) ! Et lorsque la macro trouve un doublon, que
doit-elle faire avec cela ?
Salutations!
"rick" <rick@discussions.microsoft.com> a écrit dans le message de news: F3578FB5-1E62-44B8-8816-7F53BB86662F@microsoft.com...
bonjour,
j'utilise la macro de frederic pour l'elimination de doublons.
en modifiant le code suivant mes besoins,c'est a dire lorsqu'il a des
doublons afficher un message box et proposer OUI pour conserver ce doublon et
donc rajouter un caractere supplémentaire sur la colonne E pour les
différencier.
ou NON dans le message box,qui supprime le doublon(la ligne).
J'ai essayé d'apporter des modifs dans le code, mais cela bloque et cela ne
fonctionne pas comme je souhaite.
l'apercu de la macro:
Dim CheckRows As Range
Dim ColumnsToMatch As Variant
Dim DeleteDuplicates As Boolean
Dim FormatDuplicates As Boolean
Dim WriteListOfDuplicates As Boolean
Dim AddRowNumberToList As Boolean
Dim lLBound As Long
Dim lUBound As Long
Dim CheckRange As Range
Dim SubArray As Variant
Dim FieldsCollection As New Collection
Dim RowNumberCollection As New Collection
Dim Dummy As Long
Dim DuplicateRange As Range
Dim DuplicatesExist As Boolean
Dim lRow As Long
Dim CollectionKey As String
Dim OffsetValue() As Long
Dim StartCell As Range
Dim Element As Variant
Dim Counter As Long
Dim messdoublons As Byte
'adapter les 6 variables ci-dessous pour mettre à jour
'les paramètres de travail de la macro
Set CheckRows = Rows("15:20")
ColumnsToMatch = Array("A", "E", "F")
DeleteDuplicates = False
FormatDuplicates = False
WriteListOfDuplicates = True
AddRowNumberToList = True
lLBound = LBound(ColumnsToMatch)
lUBound = UBound(ColumnsToMatch)
Set CheckRange = Intersect(Range(ColumnsToMatch(lLBound) & _
":" & ColumnsToMatch(lLBound)), CheckRows)
ReDim OffsetValue(lUBound - lLBound + 1)
For Counter = lLBound To lUBound
OffsetValue(Counter) = Range(ColumnsToMatch(Counter) & ":" & _
ColumnsToMatch(Counter)).Column - CheckRange.Column
Next Counter
On Error Resume Next
SubArray = CheckRange.Value
For lRow = 1 To UBound(SubArray, 1)
If SubArray(lRow, 1) <> "" Then
CollectionKey = ""
For Counter = lLBound To lUBound
CollectionKey = CollectionKey & _
CheckRange(lRow, 1).Offset(0, _
OffsetValue(Counter)).Value
Next Counter
FieldsCollection.Add Dummy, CStr(CollectionKey)
If Err.Number = 457 Then
Err.Clear
DuplicatesExist = True
RowNumberCollection.Add CheckRange(lRow, 1).Row
If DuplicateRange Is Nothing Then
Set DuplicateRange = _
CheckRange.Cells(lRow, 1)
Else
Set DuplicateRange = Union(DuplicateRange, _
CheckRange.Cells(lRow, 1))
End If
End If
End If
Next lRow
On Error GoTo 0
« modification de codes apporté au code»
If DuplicatesExist = False Then
MsgBox "Aucun doublons n'est présent", vbInformation
Else
With DuplicateRange.EntireRow
'If WriteListOfDuplicates Then
If AddRowNumberToList Then
messdoublons = MsgBox("DOublons existant sur la ou les
lignes,SOuhaitez vous conservez cette ligne" & Range("A1"), vbYesNo +
vbInformation)
Select Case reponse
Case vbNo
.Delete
Unload UserForm1
Case vbOK
Unload UserForm1
End Select
Set StartCell = Range("A1")
For Each Element In RowNumberCollection
StartCell.Value = "Row " & Element
Set StartCell = StartCell.Offset(1, 0)
Next Element
End If
'End If
End With
End If
merci d'avance
Bonjour Rick,
Si j'ai bien compris, pour qu'il y ait un doublon, il doit y avoir une correspondance exacte du contenu des 5 cellules de la même
ligne A, E, F, H, I.
Quel est l'événement qui doit déclencher cette macro ?
Cette section de ton message n'est pas claire :
Souhaite t'il entrer cette facilité : si il repond oui cette combinaison est
intégré à cette plage en entrant dans la colonne F un caractere subsidiaire
pour les differencier.
Donne un exemple du contenu des 5 colonnes avant le message et après que l'usager ait répondu OUI.
Salutations!
"rick" a écrit dans le message de news:
ma plage est de A15 à HI200,
5 colonne définnisent une combinaison:
A et E et F et H et I
on doit avoir une combinaison identique,je souhaite donc afficher un message
box quand il y a des doublons et afficher un message à l'utilisateur:
Souhaite t'il entrer cette facilité : si il repond oui cette combinaison est
intégré à cette plage en entrant dans la colonne F un caractere subsidiaire
pour les differencier.
Si il repond non , le doublon est supprimé.
merci d'avanceBonjour Rick,
Pour savoir si une macro fait son travail convenablement , il faut d'abord savoir et connaître les attentes de l'usager. À cet
égard, tu as omis de faire une description minutieuse de ton problème, où étaient tes données ? Comment elles sont disposées ?
Tu
as
oublié aussi de mentionner l'adresse des plages que tu veux comparer (les doublons) ! Et lorsque la macro trouve un doublon, que
doit-elle faire avec cela ?
Salutations!
"rick" a écrit dans le message de news:
bonjour,
j'utilise la macro de frederic pour l'elimination de doublons.
en modifiant le code suivant mes besoins,c'est a dire lorsqu'il a des
doublons afficher un message box et proposer OUI pour conserver ce doublon et
donc rajouter un caractere supplémentaire sur la colonne E pour les
différencier.
ou NON dans le message box,qui supprime le doublon(la ligne).
J'ai essayé d'apporter des modifs dans le code, mais cela bloque et cela ne
fonctionne pas comme je souhaite.
l'apercu de la macro:
Dim CheckRows As Range
Dim ColumnsToMatch As Variant
Dim DeleteDuplicates As Boolean
Dim FormatDuplicates As Boolean
Dim WriteListOfDuplicates As Boolean
Dim AddRowNumberToList As Boolean
Dim lLBound As Long
Dim lUBound As Long
Dim CheckRange As Range
Dim SubArray As Variant
Dim FieldsCollection As New Collection
Dim RowNumberCollection As New Collection
Dim Dummy As Long
Dim DuplicateRange As Range
Dim DuplicatesExist As Boolean
Dim lRow As Long
Dim CollectionKey As String
Dim OffsetValue() As Long
Dim StartCell As Range
Dim Element As Variant
Dim Counter As Long
Dim messdoublons As Byte
'adapter les 6 variables ci-dessous pour mettre à jour
'les paramètres de travail de la macro
Set CheckRows = Rows("15:20")
ColumnsToMatch = Array("A", "E", "F")
DeleteDuplicates = False
FormatDuplicates = False
WriteListOfDuplicates = True
AddRowNumberToList = True
lLBound = LBound(ColumnsToMatch)
lUBound = UBound(ColumnsToMatch)
Set CheckRange = Intersect(Range(ColumnsToMatch(lLBound) & _
":" & ColumnsToMatch(lLBound)), CheckRows)
ReDim OffsetValue(lUBound - lLBound + 1)
For Counter = lLBound To lUBound
OffsetValue(Counter) = Range(ColumnsToMatch(Counter) & ":" & _
ColumnsToMatch(Counter)).Column - CheckRange.Column
Next Counter
On Error Resume Next
SubArray = CheckRange.Value
For lRow = 1 To UBound(SubArray, 1)
If SubArray(lRow, 1) <> "" Then
CollectionKey = ""
For Counter = lLBound To lUBound
CollectionKey = CollectionKey & _
CheckRange(lRow, 1).Offset(0, _
OffsetValue(Counter)).Value
Next Counter
FieldsCollection.Add Dummy, CStr(CollectionKey)
If Err.Number = 457 Then
Err.Clear
DuplicatesExist = True
RowNumberCollection.Add CheckRange(lRow, 1).Row
If DuplicateRange Is Nothing Then
Set DuplicateRange = _
CheckRange.Cells(lRow, 1)
Else
Set DuplicateRange = Union(DuplicateRange, _
CheckRange.Cells(lRow, 1))
End If
End If
End If
Next lRow
On Error GoTo 0
« modification de codes apporté au code»
If DuplicatesExist = False Then
MsgBox "Aucun doublons n'est présent", vbInformation
Else
With DuplicateRange.EntireRow
'If WriteListOfDuplicates Then
If AddRowNumberToList Then
messdoublons = MsgBox("DOublons existant sur la ou les
lignes,SOuhaitez vous conservez cette ligne" & Range("A1"), vbYesNo +
vbInformation)
Select Case reponse
Case vbNo
.Delete
Unload UserForm1
Case vbOK
Unload UserForm1
End Select
Set StartCell = Range("A1")
For Each Element In RowNumberCollection
StartCell.Value = "Row " & Element
Set StartCell = StartCell.Offset(1, 0)
Next Element
End If
'End If
End With
End If
merci d'avance
Bonjour Rick,
Si j'ai bien compris, pour qu'il y ait un doublon, il doit y avoir une correspondance exacte du contenu des 5 cellules de la même
ligne A, E, F, H, I.
Quel est l'événement qui doit déclencher cette macro ?
Cette section de ton message n'est pas claire :
Souhaite t'il entrer cette facilité : si il repond oui cette combinaison est
intégré à cette plage en entrant dans la colonne F un caractere subsidiaire
pour les differencier.
Donne un exemple du contenu des 5 colonnes avant le message et après que l'usager ait répondu OUI.
Salutations!
"rick" a écrit dans le message de news:
ma plage est de A15 à HI200,
5 colonne définnisent une combinaison:
A et E et F et H et I
on doit avoir une combinaison identique,je souhaite donc afficher un message
box quand il y a des doublons et afficher un message à l'utilisateur:
Souhaite t'il entrer cette facilité : si il repond oui cette combinaison est
intégré à cette plage en entrant dans la colonne F un caractere subsidiaire
pour les differencier.
Si il repond non , le doublon est supprimé.
merci d'avanceBonjour Rick,
Pour savoir si une macro fait son travail convenablement , il faut d'abord savoir et connaître les attentes de l'usager. À cet
égard, tu as omis de faire une description minutieuse de ton problème, où étaient tes données ? Comment elles sont disposées ? Tu
as
oublié aussi de mentionner l'adresse des plages que tu veux comparer (les doublons) ! Et lorsque la macro trouve un doublon, que
doit-elle faire avec cela ?
Salutations!
"rick" a écrit dans le message de news:
bonjour,
j'utilise la macro de frederic pour l'elimination de doublons.
en modifiant le code suivant mes besoins,c'est a dire lorsqu'il a des
doublons afficher un message box et proposer OUI pour conserver ce doublon et
donc rajouter un caractere supplémentaire sur la colonne E pour les
différencier.
ou NON dans le message box,qui supprime le doublon(la ligne).
J'ai essayé d'apporter des modifs dans le code, mais cela bloque et cela ne
fonctionne pas comme je souhaite.
l'apercu de la macro:
Dim CheckRows As Range
Dim ColumnsToMatch As Variant
Dim DeleteDuplicates As Boolean
Dim FormatDuplicates As Boolean
Dim WriteListOfDuplicates As Boolean
Dim AddRowNumberToList As Boolean
Dim lLBound As Long
Dim lUBound As Long
Dim CheckRange As Range
Dim SubArray As Variant
Dim FieldsCollection As New Collection
Dim RowNumberCollection As New Collection
Dim Dummy As Long
Dim DuplicateRange As Range
Dim DuplicatesExist As Boolean
Dim lRow As Long
Dim CollectionKey As String
Dim OffsetValue() As Long
Dim StartCell As Range
Dim Element As Variant
Dim Counter As Long
Dim messdoublons As Byte
'adapter les 6 variables ci-dessous pour mettre à jour
'les paramètres de travail de la macro
Set CheckRows = Rows("15:20")
ColumnsToMatch = Array("A", "E", "F")
DeleteDuplicates = False
FormatDuplicates = False
WriteListOfDuplicates = True
AddRowNumberToList = True
lLBound = LBound(ColumnsToMatch)
lUBound = UBound(ColumnsToMatch)
Set CheckRange = Intersect(Range(ColumnsToMatch(lLBound) & _
":" & ColumnsToMatch(lLBound)), CheckRows)
ReDim OffsetValue(lUBound - lLBound + 1)
For Counter = lLBound To lUBound
OffsetValue(Counter) = Range(ColumnsToMatch(Counter) & ":" & _
ColumnsToMatch(Counter)).Column - CheckRange.Column
Next Counter
On Error Resume Next
SubArray = CheckRange.Value
For lRow = 1 To UBound(SubArray, 1)
If SubArray(lRow, 1) <> "" Then
CollectionKey = ""
For Counter = lLBound To lUBound
CollectionKey = CollectionKey & _
CheckRange(lRow, 1).Offset(0, _
OffsetValue(Counter)).Value
Next Counter
FieldsCollection.Add Dummy, CStr(CollectionKey)
If Err.Number = 457 Then
Err.Clear
DuplicatesExist = True
RowNumberCollection.Add CheckRange(lRow, 1).Row
If DuplicateRange Is Nothing Then
Set DuplicateRange = _
CheckRange.Cells(lRow, 1)
Else
Set DuplicateRange = Union(DuplicateRange, _
CheckRange.Cells(lRow, 1))
End If
End If
End If
Next lRow
On Error GoTo 0
« modification de codes apporté au code»
If DuplicatesExist = False Then
MsgBox "Aucun doublons n'est présent", vbInformation
Else
With DuplicateRange.EntireRow
'If WriteListOfDuplicates Then
If AddRowNumberToList Then
messdoublons = MsgBox("DOublons existant sur la ou les
lignes,SOuhaitez vous conservez cette ligne" & Range("A1"), vbYesNo +
vbInformation)
Select Case reponse
Case vbNo
.Delete
Unload UserForm1
Case vbOK
Unload UserForm1
End Select
Set StartCell = Range("A1")
For Each Element In RowNumberCollection
StartCell.Value = "Row " & Element
Set StartCell = StartCell.Offset(1, 0)
Next Element
End If
'End If
End With
End If
merci d'avance
Bonjour Rick,
Si j'ai bien compris, pour qu'il y ait un doublon, il doit y avoir une correspondance exacte du contenu des 5 cellules de la même
ligne A, E, F, H, I.
Quel est l'événement qui doit déclencher cette macro ?
Cette section de ton message n'est pas claire :
Souhaite t'il entrer cette facilité : si il repond oui cette combinaison est
intégré à cette plage en entrant dans la colonne F un caractere subsidiaire
pour les differencier.
Donne un exemple du contenu des 5 colonnes avant le message et après que l'usager ait répondu OUI.
Salutations!
"rick" <rick@discussions.microsoft.com> a écrit dans le message de news: B0FC0774-CE9B-483A-83DE-C39BAFC8D84B@microsoft.com...
ma plage est de A15 à HI200,
5 colonne définnisent une combinaison:
A et E et F et H et I
on doit avoir une combinaison identique,je souhaite donc afficher un message
box quand il y a des doublons et afficher un message à l'utilisateur:
Souhaite t'il entrer cette facilité : si il repond oui cette combinaison est
intégré à cette plage en entrant dans la colonne F un caractere subsidiaire
pour les differencier.
Si il repond non , le doublon est supprimé.
merci d'avance
Bonjour Rick,
Pour savoir si une macro fait son travail convenablement , il faut d'abord savoir et connaître les attentes de l'usager. À cet
égard, tu as omis de faire une description minutieuse de ton problème, où étaient tes données ? Comment elles sont disposées ? Tu
as
oublié aussi de mentionner l'adresse des plages que tu veux comparer (les doublons) ! Et lorsque la macro trouve un doublon, que
doit-elle faire avec cela ?
Salutations!
"rick" <rick@discussions.microsoft.com> a écrit dans le message de news: F3578FB5-1E62-44B8-8816-7F53BB86662F@microsoft.com...
bonjour,
j'utilise la macro de frederic pour l'elimination de doublons.
en modifiant le code suivant mes besoins,c'est a dire lorsqu'il a des
doublons afficher un message box et proposer OUI pour conserver ce doublon et
donc rajouter un caractere supplémentaire sur la colonne E pour les
différencier.
ou NON dans le message box,qui supprime le doublon(la ligne).
J'ai essayé d'apporter des modifs dans le code, mais cela bloque et cela ne
fonctionne pas comme je souhaite.
l'apercu de la macro:
Dim CheckRows As Range
Dim ColumnsToMatch As Variant
Dim DeleteDuplicates As Boolean
Dim FormatDuplicates As Boolean
Dim WriteListOfDuplicates As Boolean
Dim AddRowNumberToList As Boolean
Dim lLBound As Long
Dim lUBound As Long
Dim CheckRange As Range
Dim SubArray As Variant
Dim FieldsCollection As New Collection
Dim RowNumberCollection As New Collection
Dim Dummy As Long
Dim DuplicateRange As Range
Dim DuplicatesExist As Boolean
Dim lRow As Long
Dim CollectionKey As String
Dim OffsetValue() As Long
Dim StartCell As Range
Dim Element As Variant
Dim Counter As Long
Dim messdoublons As Byte
'adapter les 6 variables ci-dessous pour mettre à jour
'les paramètres de travail de la macro
Set CheckRows = Rows("15:20")
ColumnsToMatch = Array("A", "E", "F")
DeleteDuplicates = False
FormatDuplicates = False
WriteListOfDuplicates = True
AddRowNumberToList = True
lLBound = LBound(ColumnsToMatch)
lUBound = UBound(ColumnsToMatch)
Set CheckRange = Intersect(Range(ColumnsToMatch(lLBound) & _
":" & ColumnsToMatch(lLBound)), CheckRows)
ReDim OffsetValue(lUBound - lLBound + 1)
For Counter = lLBound To lUBound
OffsetValue(Counter) = Range(ColumnsToMatch(Counter) & ":" & _
ColumnsToMatch(Counter)).Column - CheckRange.Column
Next Counter
On Error Resume Next
SubArray = CheckRange.Value
For lRow = 1 To UBound(SubArray, 1)
If SubArray(lRow, 1) <> "" Then
CollectionKey = ""
For Counter = lLBound To lUBound
CollectionKey = CollectionKey & _
CheckRange(lRow, 1).Offset(0, _
OffsetValue(Counter)).Value
Next Counter
FieldsCollection.Add Dummy, CStr(CollectionKey)
If Err.Number = 457 Then
Err.Clear
DuplicatesExist = True
RowNumberCollection.Add CheckRange(lRow, 1).Row
If DuplicateRange Is Nothing Then
Set DuplicateRange = _
CheckRange.Cells(lRow, 1)
Else
Set DuplicateRange = Union(DuplicateRange, _
CheckRange.Cells(lRow, 1))
End If
End If
End If
Next lRow
On Error GoTo 0
« modification de codes apporté au code»
If DuplicatesExist = False Then
MsgBox "Aucun doublons n'est présent", vbInformation
Else
With DuplicateRange.EntireRow
'If WriteListOfDuplicates Then
If AddRowNumberToList Then
messdoublons = MsgBox("DOublons existant sur la ou les
lignes,SOuhaitez vous conservez cette ligne" & Range("A1"), vbYesNo +
vbInformation)
Select Case reponse
Case vbNo
.Delete
Unload UserForm1
Case vbOK
Unload UserForm1
End Select
Set StartCell = Range("A1")
For Each Element In RowNumberCollection
StartCell.Value = "Row " & Element
Set StartCell = StartCell.Offset(1, 0)
Next Element
End If
'End If
End With
End If
merci d'avance
Bonjour Rick,
Si j'ai bien compris, pour qu'il y ait un doublon, il doit y avoir une correspondance exacte du contenu des 5 cellules de la même
ligne A, E, F, H, I.
Quel est l'événement qui doit déclencher cette macro ?
Cette section de ton message n'est pas claire :
Souhaite t'il entrer cette facilité : si il repond oui cette combinaison est
intégré à cette plage en entrant dans la colonne F un caractere subsidiaire
pour les differencier.
Donne un exemple du contenu des 5 colonnes avant le message et après que l'usager ait répondu OUI.
Salutations!
"rick" a écrit dans le message de news:
ma plage est de A15 à HI200,
5 colonne définnisent une combinaison:
A et E et F et H et I
on doit avoir une combinaison identique,je souhaite donc afficher un message
box quand il y a des doublons et afficher un message à l'utilisateur:
Souhaite t'il entrer cette facilité : si il repond oui cette combinaison est
intégré à cette plage en entrant dans la colonne F un caractere subsidiaire
pour les differencier.
Si il repond non , le doublon est supprimé.
merci d'avanceBonjour Rick,
Pour savoir si une macro fait son travail convenablement , il faut d'abord savoir et connaître les attentes de l'usager. À cet
égard, tu as omis de faire une description minutieuse de ton problème, où étaient tes données ? Comment elles sont disposées ? Tu
as
oublié aussi de mentionner l'adresse des plages que tu veux comparer (les doublons) ! Et lorsque la macro trouve un doublon, que
doit-elle faire avec cela ?
Salutations!
"rick" a écrit dans le message de news:
bonjour,
j'utilise la macro de frederic pour l'elimination de doublons.
en modifiant le code suivant mes besoins,c'est a dire lorsqu'il a des
doublons afficher un message box et proposer OUI pour conserver ce doublon et
donc rajouter un caractere supplémentaire sur la colonne E pour les
différencier.
ou NON dans le message box,qui supprime le doublon(la ligne).
J'ai essayé d'apporter des modifs dans le code, mais cela bloque et cela ne
fonctionne pas comme je souhaite.
l'apercu de la macro:
Dim CheckRows As Range
Dim ColumnsToMatch As Variant
Dim DeleteDuplicates As Boolean
Dim FormatDuplicates As Boolean
Dim WriteListOfDuplicates As Boolean
Dim AddRowNumberToList As Boolean
Dim lLBound As Long
Dim lUBound As Long
Dim CheckRange As Range
Dim SubArray As Variant
Dim FieldsCollection As New Collection
Dim RowNumberCollection As New Collection
Dim Dummy As Long
Dim DuplicateRange As Range
Dim DuplicatesExist As Boolean
Dim lRow As Long
Dim CollectionKey As String
Dim OffsetValue() As Long
Dim StartCell As Range
Dim Element As Variant
Dim Counter As Long
Dim messdoublons As Byte
'adapter les 6 variables ci-dessous pour mettre à jour
'les paramètres de travail de la macro
Set CheckRows = Rows("15:20")
ColumnsToMatch = Array("A", "E", "F")
DeleteDuplicates = False
FormatDuplicates = False
WriteListOfDuplicates = True
AddRowNumberToList = True
lLBound = LBound(ColumnsToMatch)
lUBound = UBound(ColumnsToMatch)
Set CheckRange = Intersect(Range(ColumnsToMatch(lLBound) & _
":" & ColumnsToMatch(lLBound)), CheckRows)
ReDim OffsetValue(lUBound - lLBound + 1)
For Counter = lLBound To lUBound
OffsetValue(Counter) = Range(ColumnsToMatch(Counter) & ":" & _
ColumnsToMatch(Counter)).Column - CheckRange.Column
Next Counter
On Error Resume Next
SubArray = CheckRange.Value
For lRow = 1 To UBound(SubArray, 1)
If SubArray(lRow, 1) <> "" Then
CollectionKey = ""
For Counter = lLBound To lUBound
CollectionKey = CollectionKey & _
CheckRange(lRow, 1).Offset(0, _
OffsetValue(Counter)).Value
Next Counter
FieldsCollection.Add Dummy, CStr(CollectionKey)
If Err.Number = 457 Then
Err.Clear
DuplicatesExist = True
RowNumberCollection.Add CheckRange(lRow, 1).Row
If DuplicateRange Is Nothing Then
Set DuplicateRange = _
CheckRange.Cells(lRow, 1)
Else
Set DuplicateRange = Union(DuplicateRange, _
CheckRange.Cells(lRow, 1))
End If
End If
End If
Next lRow
On Error GoTo 0
« modification de codes apporté au code»
If DuplicatesExist = False Then
MsgBox "Aucun doublons n'est présent", vbInformation
Else
With DuplicateRange.EntireRow
'If WriteListOfDuplicates Then
If AddRowNumberToList Then
messdoublons = MsgBox("DOublons existant sur la ou les
lignes,SOuhaitez vous conservez cette ligne" & Range("A1"), vbYesNo +
vbInformation)
Select Case reponse
Case vbNo
.Delete
Unload UserForm1
Case vbOK
Unload UserForm1
End Select
Set StartCell = Range("A1")
For Each Element In RowNumberCollection
StartCell.Value = "Row " & Element
Set StartCell = StartCell.Offset(1, 0)
Next Element
End If
'End If
End With
End If
merci d'avance
c'est à la fin de l'import de mes données, via une macro de mon bouton de
commande.
Je verifie toute la plage de A15 à HI200
Par exemple si:
j'ai
123456 12345 6789 1 890
123456 12345 6789 1 890
123456
si j'aiBonjour Rick,
Si j'ai bien compris, pour qu'il y ait un doublon, il doit y avoir une correspondance exacte du contenu des 5 cellules de la même
ligne A, E, F, H, I.
Quel est l'événement qui doit déclencher cette macro ?
Cette section de ton message n'est pas claire :
Souhaite t'il entrer cette facilité : si il repond oui cette combinaison est
intégré à cette plage en entrant dans la colonne F un caractere subsidiaire
pour les differencier.
Donne un exemple du contenu des 5 colonnes avant le message et après que l'usager ait répondu OUI.
Salutations!
"rick" a écrit dans le message de news:
ma plage est de A15 à HI200,
5 colonne définnisent une combinaison:
A et E et F et H et I
on doit avoir une combinaison identique,je souhaite donc afficher un message
box quand il y a des doublons et afficher un message à l'utilisateur:
Souhaite t'il entrer cette facilité : si il repond oui cette combinaison est
intégré à cette plage en entrant dans la colonne F un caractere subsidiaire
pour les differencier.
Si il repond non , le doublon est supprimé.
merci d'avanceBonjour Rick,
Pour savoir si une macro fait son travail convenablement , il faut d'abord savoir et connaître les attentes de l'usager. À cet
égard, tu as omis de faire une description minutieuse de ton problème, où étaient tes données ? Comment elles sont disposées ? Tu
as
oublié aussi de mentionner l'adresse des plages que tu veux comparer (les doublons) ! Et lorsque la macro trouve un doublon, que
doit-elle faire avec cela ?
Salutations!
"rick" a écrit dans le message de news:
bonjour,
j'utilise la macro de frederic pour l'elimination de doublons.
en modifiant le code suivant mes besoins,c'est a dire lorsqu'il a des
doublons afficher un message box et proposer OUI pour conserver ce doublon et
donc rajouter un caractere supplémentaire sur la colonne E pour les
différencier.
ou NON dans le message box,qui supprime le doublon(la ligne).
J'ai essayé d'apporter des modifs dans le code, mais cela bloque et cela ne
fonctionne pas comme je souhaite.
l'apercu de la macro:
Dim CheckRows As Range
Dim ColumnsToMatch As Variant
Dim DeleteDuplicates As Boolean
Dim FormatDuplicates As Boolean
Dim WriteListOfDuplicates As Boolean
Dim AddRowNumberToList As Boolean
Dim lLBound As Long
Dim lUBound As Long
Dim CheckRange As Range
Dim SubArray As Variant
Dim FieldsCollection As New Collection
Dim RowNumberCollection As New Collection
Dim Dummy As Long
Dim DuplicateRange As Range
Dim DuplicatesExist As Boolean
Dim lRow As Long
Dim CollectionKey As String
Dim OffsetValue() As Long
Dim StartCell As Range
Dim Element As Variant
Dim Counter As Long
Dim messdoublons As Byte
'adapter les 6 variables ci-dessous pour mettre à jour
'les paramètres de travail de la macro
Set CheckRows = Rows("15:20")
ColumnsToMatch = Array("A", "E", "F")
DeleteDuplicates = False
FormatDuplicates = False
WriteListOfDuplicates = True
AddRowNumberToList = True
lLBound = LBound(ColumnsToMatch)
lUBound = UBound(ColumnsToMatch)
Set CheckRange = Intersect(Range(ColumnsToMatch(lLBound) & _
":" & ColumnsToMatch(lLBound)), CheckRows)
ReDim OffsetValue(lUBound - lLBound + 1)
For Counter = lLBound To lUBound
OffsetValue(Counter) = Range(ColumnsToMatch(Counter) & ":" & _
ColumnsToMatch(Counter)).Column - CheckRange.Column
Next Counter
On Error Resume Next
SubArray = CheckRange.Value
For lRow = 1 To UBound(SubArray, 1)
If SubArray(lRow, 1) <> "" Then
CollectionKey = ""
For Counter = lLBound To lUBound
CollectionKey = CollectionKey & _
CheckRange(lRow, 1).Offset(0, _
OffsetValue(Counter)).Value
Next Counter
FieldsCollection.Add Dummy, CStr(CollectionKey)
If Err.Number = 457 Then
Err.Clear
DuplicatesExist = True
RowNumberCollection.Add CheckRange(lRow, 1).Row
If DuplicateRange Is Nothing Then
Set DuplicateRange = _
CheckRange.Cells(lRow, 1)
Else
Set DuplicateRange = Union(DuplicateRange, _
CheckRange.Cells(lRow, 1))
End If
End If
End If
Next lRow
On Error GoTo 0
« modification de codes apporté au code»
If DuplicatesExist = False Then
MsgBox "Aucun doublons n'est présent", vbInformation
Else
With DuplicateRange.EntireRow
'If WriteListOfDuplicates Then
If AddRowNumberToList Then
messdoublons = MsgBox("DOublons existant sur la ou les
lignes,SOuhaitez vous conservez cette ligne" & Range("A1"), vbYesNo +
vbInformation)
Select Case reponse
Case vbNo
.Delete
Unload UserForm1
Case vbOK
Unload UserForm1
End Select
Set StartCell = Range("A1")
For Each Element In RowNumberCollection
StartCell.Value = "Row " & Element
Set StartCell = StartCell.Offset(1, 0)
Next Element
End If
'End If
End With
End If
merci d'avance
c'est à la fin de l'import de mes données, via une macro de mon bouton de
commande.
Je verifie toute la plage de A15 à HI200
Par exemple si:
j'ai
123456 12345 6789 1 890
123456 12345 6789 1 890
123456
si j'ai
Bonjour Rick,
Si j'ai bien compris, pour qu'il y ait un doublon, il doit y avoir une correspondance exacte du contenu des 5 cellules de la même
ligne A, E, F, H, I.
Quel est l'événement qui doit déclencher cette macro ?
Cette section de ton message n'est pas claire :
Souhaite t'il entrer cette facilité : si il repond oui cette combinaison est
intégré à cette plage en entrant dans la colonne F un caractere subsidiaire
pour les differencier.
Donne un exemple du contenu des 5 colonnes avant le message et après que l'usager ait répondu OUI.
Salutations!
"rick" <rick@discussions.microsoft.com> a écrit dans le message de news: B0FC0774-CE9B-483A-83DE-C39BAFC8D84B@microsoft.com...
ma plage est de A15 à HI200,
5 colonne définnisent une combinaison:
A et E et F et H et I
on doit avoir une combinaison identique,je souhaite donc afficher un message
box quand il y a des doublons et afficher un message à l'utilisateur:
Souhaite t'il entrer cette facilité : si il repond oui cette combinaison est
intégré à cette plage en entrant dans la colonne F un caractere subsidiaire
pour les differencier.
Si il repond non , le doublon est supprimé.
merci d'avance
Bonjour Rick,
Pour savoir si une macro fait son travail convenablement , il faut d'abord savoir et connaître les attentes de l'usager. À cet
égard, tu as omis de faire une description minutieuse de ton problème, où étaient tes données ? Comment elles sont disposées ? Tu
as
oublié aussi de mentionner l'adresse des plages que tu veux comparer (les doublons) ! Et lorsque la macro trouve un doublon, que
doit-elle faire avec cela ?
Salutations!
"rick" <rick@discussions.microsoft.com> a écrit dans le message de news: F3578FB5-1E62-44B8-8816-7F53BB86662F@microsoft.com...
bonjour,
j'utilise la macro de frederic pour l'elimination de doublons.
en modifiant le code suivant mes besoins,c'est a dire lorsqu'il a des
doublons afficher un message box et proposer OUI pour conserver ce doublon et
donc rajouter un caractere supplémentaire sur la colonne E pour les
différencier.
ou NON dans le message box,qui supprime le doublon(la ligne).
J'ai essayé d'apporter des modifs dans le code, mais cela bloque et cela ne
fonctionne pas comme je souhaite.
l'apercu de la macro:
Dim CheckRows As Range
Dim ColumnsToMatch As Variant
Dim DeleteDuplicates As Boolean
Dim FormatDuplicates As Boolean
Dim WriteListOfDuplicates As Boolean
Dim AddRowNumberToList As Boolean
Dim lLBound As Long
Dim lUBound As Long
Dim CheckRange As Range
Dim SubArray As Variant
Dim FieldsCollection As New Collection
Dim RowNumberCollection As New Collection
Dim Dummy As Long
Dim DuplicateRange As Range
Dim DuplicatesExist As Boolean
Dim lRow As Long
Dim CollectionKey As String
Dim OffsetValue() As Long
Dim StartCell As Range
Dim Element As Variant
Dim Counter As Long
Dim messdoublons As Byte
'adapter les 6 variables ci-dessous pour mettre à jour
'les paramètres de travail de la macro
Set CheckRows = Rows("15:20")
ColumnsToMatch = Array("A", "E", "F")
DeleteDuplicates = False
FormatDuplicates = False
WriteListOfDuplicates = True
AddRowNumberToList = True
lLBound = LBound(ColumnsToMatch)
lUBound = UBound(ColumnsToMatch)
Set CheckRange = Intersect(Range(ColumnsToMatch(lLBound) & _
":" & ColumnsToMatch(lLBound)), CheckRows)
ReDim OffsetValue(lUBound - lLBound + 1)
For Counter = lLBound To lUBound
OffsetValue(Counter) = Range(ColumnsToMatch(Counter) & ":" & _
ColumnsToMatch(Counter)).Column - CheckRange.Column
Next Counter
On Error Resume Next
SubArray = CheckRange.Value
For lRow = 1 To UBound(SubArray, 1)
If SubArray(lRow, 1) <> "" Then
CollectionKey = ""
For Counter = lLBound To lUBound
CollectionKey = CollectionKey & _
CheckRange(lRow, 1).Offset(0, _
OffsetValue(Counter)).Value
Next Counter
FieldsCollection.Add Dummy, CStr(CollectionKey)
If Err.Number = 457 Then
Err.Clear
DuplicatesExist = True
RowNumberCollection.Add CheckRange(lRow, 1).Row
If DuplicateRange Is Nothing Then
Set DuplicateRange = _
CheckRange.Cells(lRow, 1)
Else
Set DuplicateRange = Union(DuplicateRange, _
CheckRange.Cells(lRow, 1))
End If
End If
End If
Next lRow
On Error GoTo 0
« modification de codes apporté au code»
If DuplicatesExist = False Then
MsgBox "Aucun doublons n'est présent", vbInformation
Else
With DuplicateRange.EntireRow
'If WriteListOfDuplicates Then
If AddRowNumberToList Then
messdoublons = MsgBox("DOublons existant sur la ou les
lignes,SOuhaitez vous conservez cette ligne" & Range("A1"), vbYesNo +
vbInformation)
Select Case reponse
Case vbNo
.Delete
Unload UserForm1
Case vbOK
Unload UserForm1
End Select
Set StartCell = Range("A1")
For Each Element In RowNumberCollection
StartCell.Value = "Row " & Element
Set StartCell = StartCell.Offset(1, 0)
Next Element
End If
'End If
End With
End If
merci d'avance
c'est à la fin de l'import de mes données, via une macro de mon bouton de
commande.
Je verifie toute la plage de A15 à HI200
Par exemple si:
j'ai
123456 12345 6789 1 890
123456 12345 6789 1 890
123456
si j'aiBonjour Rick,
Si j'ai bien compris, pour qu'il y ait un doublon, il doit y avoir une correspondance exacte du contenu des 5 cellules de la même
ligne A, E, F, H, I.
Quel est l'événement qui doit déclencher cette macro ?
Cette section de ton message n'est pas claire :
Souhaite t'il entrer cette facilité : si il repond oui cette combinaison est
intégré à cette plage en entrant dans la colonne F un caractere subsidiaire
pour les differencier.
Donne un exemple du contenu des 5 colonnes avant le message et après que l'usager ait répondu OUI.
Salutations!
"rick" a écrit dans le message de news:
ma plage est de A15 à HI200,
5 colonne définnisent une combinaison:
A et E et F et H et I
on doit avoir une combinaison identique,je souhaite donc afficher un message
box quand il y a des doublons et afficher un message à l'utilisateur:
Souhaite t'il entrer cette facilité : si il repond oui cette combinaison est
intégré à cette plage en entrant dans la colonne F un caractere subsidiaire
pour les differencier.
Si il repond non , le doublon est supprimé.
merci d'avanceBonjour Rick,
Pour savoir si une macro fait son travail convenablement , il faut d'abord savoir et connaître les attentes de l'usager. À cet
égard, tu as omis de faire une description minutieuse de ton problème, où étaient tes données ? Comment elles sont disposées ? Tu
as
oublié aussi de mentionner l'adresse des plages que tu veux comparer (les doublons) ! Et lorsque la macro trouve un doublon, que
doit-elle faire avec cela ?
Salutations!
"rick" a écrit dans le message de news:
bonjour,
j'utilise la macro de frederic pour l'elimination de doublons.
en modifiant le code suivant mes besoins,c'est a dire lorsqu'il a des
doublons afficher un message box et proposer OUI pour conserver ce doublon et
donc rajouter un caractere supplémentaire sur la colonne E pour les
différencier.
ou NON dans le message box,qui supprime le doublon(la ligne).
J'ai essayé d'apporter des modifs dans le code, mais cela bloque et cela ne
fonctionne pas comme je souhaite.
l'apercu de la macro:
Dim CheckRows As Range
Dim ColumnsToMatch As Variant
Dim DeleteDuplicates As Boolean
Dim FormatDuplicates As Boolean
Dim WriteListOfDuplicates As Boolean
Dim AddRowNumberToList As Boolean
Dim lLBound As Long
Dim lUBound As Long
Dim CheckRange As Range
Dim SubArray As Variant
Dim FieldsCollection As New Collection
Dim RowNumberCollection As New Collection
Dim Dummy As Long
Dim DuplicateRange As Range
Dim DuplicatesExist As Boolean
Dim lRow As Long
Dim CollectionKey As String
Dim OffsetValue() As Long
Dim StartCell As Range
Dim Element As Variant
Dim Counter As Long
Dim messdoublons As Byte
'adapter les 6 variables ci-dessous pour mettre à jour
'les paramètres de travail de la macro
Set CheckRows = Rows("15:20")
ColumnsToMatch = Array("A", "E", "F")
DeleteDuplicates = False
FormatDuplicates = False
WriteListOfDuplicates = True
AddRowNumberToList = True
lLBound = LBound(ColumnsToMatch)
lUBound = UBound(ColumnsToMatch)
Set CheckRange = Intersect(Range(ColumnsToMatch(lLBound) & _
":" & ColumnsToMatch(lLBound)), CheckRows)
ReDim OffsetValue(lUBound - lLBound + 1)
For Counter = lLBound To lUBound
OffsetValue(Counter) = Range(ColumnsToMatch(Counter) & ":" & _
ColumnsToMatch(Counter)).Column - CheckRange.Column
Next Counter
On Error Resume Next
SubArray = CheckRange.Value
For lRow = 1 To UBound(SubArray, 1)
If SubArray(lRow, 1) <> "" Then
CollectionKey = ""
For Counter = lLBound To lUBound
CollectionKey = CollectionKey & _
CheckRange(lRow, 1).Offset(0, _
OffsetValue(Counter)).Value
Next Counter
FieldsCollection.Add Dummy, CStr(CollectionKey)
If Err.Number = 457 Then
Err.Clear
DuplicatesExist = True
RowNumberCollection.Add CheckRange(lRow, 1).Row
If DuplicateRange Is Nothing Then
Set DuplicateRange = _
CheckRange.Cells(lRow, 1)
Else
Set DuplicateRange = Union(DuplicateRange, _
CheckRange.Cells(lRow, 1))
End If
End If
End If
Next lRow
On Error GoTo 0
« modification de codes apporté au code»
If DuplicatesExist = False Then
MsgBox "Aucun doublons n'est présent", vbInformation
Else
With DuplicateRange.EntireRow
'If WriteListOfDuplicates Then
If AddRowNumberToList Then
messdoublons = MsgBox("DOublons existant sur la ou les
lignes,SOuhaitez vous conservez cette ligne" & Range("A1"), vbYesNo +
vbInformation)
Select Case reponse
Case vbNo
.Delete
Unload UserForm1
Case vbOK
Unload UserForm1
End Select
Set StartCell = Range("A1")
For Each Element In RowNumberCollection
StartCell.Value = "Row " & Element
Set StartCell = StartCell.Offset(1, 0)
Next Element
End If
'End If
End With
End If
merci d'avance