OVH Cloud OVH Cloud

extraction & suppression

13 réponses
Avatar
Nadyajah
Bonjour,

J'ai une feuille "fichier client" avec les colonnes suivantes :
A:N° Salon - B:N° Client - C:Civilité - D:Nom Client - E:Prénom Client -
F:Adresse 1...

Je souhaiterai extraire les doublons dans la feuille "fichier client à
rectifier" et les supprimer de la feuille "fichier client" automatiquement.
Voici la macro :

Sub SuppressionClients()
Dim Plage As Range, c As Range, Ligne As Long
Range("J:K").Insert
Ligne = 1
Set Plage = Range("D2", Range("D65536").End(xlUp))
For Each c In Plage
c.Offset(0, 6).Value = c.Value & c.Offset(0, 1).Value
Next c
For Each c In Plage
c.Offset(0, 7).Value = _
WorksheetFunction.CountIf(Plage.Offset(0, 6), c.Offset(0, 6))
Next c
Range("k:k").Copy
Range("k:k").PasteSpecial xlPasteValues
For Each c In Plage
If c.Offset(0, 7).Value > 1 Then
Range("A" & c.Row & ":I" & c.Row).Copy _
Sheets("Fichier client à rectifier").Range("A" & Ligne)
Ligne = Ligne + 1
c.EntireRow.Delete
End If
Next c
Range("J:K").Delete
End Sub

Cependant, il ne m'extrait q'un seul des doublons pour certaines lignes et
les 2 pour d'autres.... Je n'y comprend plus rien.
J'ai joins mon fichier pour exemple.
http://cjoint.com/?cex6Vw7kHI


Nadyajah

10 réponses

1 2
Avatar
JLuc
*Bonjour Nadyajah*,
de la maniere dont tu gere ta boucle, tu commence d'en haut (ligne 2)
et tu termine en bas (ligne .End(xlup)).Du coup tu supprime la ligne
par exemple 4 et quand ta boucle veux aller sur la ligne 5, c'est deja
devenu la 4 et tu es sur la ligne theorique 6.Je ne sais pas si je me
fait bien comprendre :-?

For c = Range("D65536").End(xlUp).row To 2
If Cells(c, 4).Offset(0, 7).Value > 1 Then
Range("A" & c & ":I" & c).Copy _
Sheets("Fichier client à rectifier").Range("A" & Ligne)
Ligne = Ligne + 1
Row(c).Delete
End If
Next c
Pas tester, mais devrait convenir. Attention avec cette macro, tu ne
garde meme pas un des doublons dans ta feuille.

Bonjour,

J'ai une feuille "fichier client" avec les colonnes suivantes :
A:N° Salon - B:N° Client - C:Civilité - D:Nom Client - E:Prénom Client -
F:Adresse 1...

Je souhaiterai extraire les doublons dans la feuille "fichier client à
rectifier" et les supprimer de la feuille "fichier client" automatiquement.
Voici la macro :

Sub SuppressionClients()
Dim Plage As Range, c As Range, Ligne As Long
Range("J:K").Insert
Ligne = 1
Set Plage = Range("D2", Range("D65536").End(xlUp))
For Each c In Plage
c.Offset(0, 6).Value = c.Value & c.Offset(0, 1).Value
Next c
For Each c In Plage
c.Offset(0, 7).Value = _
WorksheetFunction.CountIf(Plage.Offset(0, 6), c.Offset(0, 6))
Next c
Range("k:k").Copy
Range("k:k").PasteSpecial xlPasteValues
For Each c In Plage
If c.Offset(0, 7).Value > 1 Then
Range("A" & c.Row & ":I" & c.Row).Copy _
Sheets("Fichier client à rectifier").Range("A" & Ligne)
Ligne = Ligne + 1
c.EntireRow.Delete
End If
Next c
Range("J:K").Delete
End Sub

Cependant, il ne m'extrait q'un seul des doublons pour certaines lignes et
les 2 pour d'autres.... Je n'y comprend plus rien.
J'ai joins mon fichier pour exemple.
http://cjoint.com/?cex6Vw7kHI


Nadyajah



--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O

Avatar
LSteph
Bonsoir,
le lien que tu donnes n'est pas valide.

lSteph
"Nadyajah" a écrit dans le message de
news:
Bonjour,

J'ai une feuille "fichier client" avec les colonnes suivantes :
A:N° Salon - B:N° Client - C:Civilité - D:Nom Client - E:Prénom Client -
F:Adresse 1...

Je souhaiterai extraire les doublons dans la feuille "fichier client à
rectifier" et les supprimer de la feuille "fichier client"
automatiquement.
Voici la macro :

Sub SuppressionClients()
Dim Plage As Range, c As Range, Ligne As Long
Range("J:K").Insert
Ligne = 1
Set Plage = Range("D2", Range("D65536").End(xlUp))
For Each c In Plage
c.Offset(0, 6).Value = c.Value & c.Offset(0, 1).Value
Next c
For Each c In Plage
c.Offset(0, 7).Value = _
WorksheetFunction.CountIf(Plage.Offset(0, 6), c.Offset(0, 6))
Next c
Range("k:k").Copy
Range("k:k").PasteSpecial xlPasteValues
For Each c In Plage
If c.Offset(0, 7).Value > 1 Then
Range("A" & c.Row & ":I" & c.Row).Copy _
Sheets("Fichier client à rectifier").Range("A" & Ligne)
Ligne = Ligne + 1
c.EntireRow.Delete
End If
Next c
Range("J:K").Delete
End Sub

Cependant, il ne m'extrait q'un seul des doublons pour certaines lignes et
les 2 pour d'autres.... Je n'y comprend plus rien.
J'ai joins mon fichier pour exemple.
http://cjoint.com/?cex6Vw7kHI


Nadyajah


Avatar
Nadyajah
Bonsoir,

J'ai réécris la macro suivante et il me dit en selectionnant le "c" de la
ligne de programme "For c = Range("D65536").End(xlUp).Row To 2" =>
incompatibilité de type.
???????

Sub SuppressionClients()
Dim Plage As Range, c As Range, Ligne As Long
Range("J:K").Insert
Ligne = 1
Set Plage = Range("D2", Range("D65536").End(xlUp))
For Each c In Plage
c.Offset(0, 6).Value = c.Value & c.Offset(0, 1).Value
Next c


For c = Range("D65536").End(xlUp).Row To 2
If Cells(c, 4).Offset(0, 7).Value > 1 Then
Range("A" & c & ":I" & c).Copy _
Sheets("Fichier client à rectifier").Range("A" & Ligne)
Ligne = Ligne + 1
Row(c).Delete
End If
Next c


*Bonjour Nadyajah*,
de la maniere dont tu gere ta boucle, tu commence d'en haut (ligne 2)
et tu termine en bas (ligne .End(xlup)).Du coup tu supprime la ligne
par exemple 4 et quand ta boucle veux aller sur la ligne 5, c'est deja
devenu la 4 et tu es sur la ligne theorique 6.Je ne sais pas si je me
fait bien comprendre :-?

For c = Range("D65536").End(xlUp).row To 2
If Cells(c, 4).Offset(0, 7).Value > 1 Then
Range("A" & c & ":I" & c).Copy _
Sheets("Fichier client à rectifier").Range("A" & Ligne)
Ligne = Ligne + 1
Row(c).Delete
End If
Next c
Pas tester, mais devrait convenir. Attention avec cette macro, tu ne
garde meme pas un des doublons dans ta feuille.

Bonjour,

J'ai une feuille "fichier client" avec les colonnes suivantes :
A:N° Salon - B:N° Client - C:Civilité - D:Nom Client - E:Prénom Client -
F:Adresse 1...

Je souhaiterai extraire les doublons dans la feuille "fichier client à
rectifier" et les supprimer de la feuille "fichier client" automatiquement.
Voici la macro :

Sub SuppressionClients()
Dim Plage As Range, c As Range, Ligne As Long
Range("J:K").Insert
Ligne = 1
Set Plage = Range("D2", Range("D65536").End(xlUp))
For Each c In Plage
c.Offset(0, 6).Value = c.Value & c.Offset(0, 1).Value
Next c
For Each c In Plage
c.Offset(0, 7).Value = _
WorksheetFunction.CountIf(Plage.Offset(0, 6), c.Offset(0, 6))
Next c
Range("k:k").Copy
Range("k:k").PasteSpecial xlPasteValues
For Each c In Plage
If c.Offset(0, 7).Value > 1 Then
Range("A" & c.Row & ":I" & c.Row).Copy _
Sheets("Fichier client à rectifier").Range("A" & Ligne)
Ligne = Ligne + 1
c.EntireRow.Delete
End If
Next c
Range("J:K").Delete
End Sub

Cependant, il ne m'extrait q'un seul des doublons pour certaines lignes et
les 2 pour d'autres.... Je n'y comprend plus rien.
J'ai joins mon fichier pour exemple.
http://cjoint.com/?cex6Vw7kHI


Nadyajah



--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O






Avatar
Yoyo
Bonsoir Nadyajah,

Dans ce que t'a proposé JLuc, la variable c représente la ligne à traiter.
Puisque tu as déjà une variable objet "c", il faut que tu en déclares une
autre. Par exemple :

Dim Ligne as Long

et ensuite, tu remplaces le c dans la partie de code de JLuc par cette
nouvelle variable.

Amicalement
Yoyo

"Nadyajah" a écrit dans le message de
news:
Bonsoir,

J'ai réécris la macro suivante et il me dit en selectionnant le "c" de la
ligne de programme "For c = Range("D65536").End(xlUp).Row To 2" =>
incompatibilité de type.
???????

Sub SuppressionClients()
Dim Plage As Range, c As Range, Ligne As Long
Range("J:K").Insert
Ligne = 1
Set Plage = Range("D2", Range("D65536").End(xlUp))
For Each c In Plage
c.Offset(0, 6).Value = c.Value & c.Offset(0, 1).Value
Next c


For c = Range("D65536").End(xlUp).Row To 2
If Cells(c, 4).Offset(0, 7).Value > 1 Then
Range("A" & c & ":I" & c).Copy _
Sheets("Fichier client à rectifier").Range("A" & Ligne)
Ligne = Ligne + 1
Row(c).Delete
End If
Next c


*Bonjour Nadyajah*,
de la maniere dont tu gere ta boucle, tu commence d'en haut (ligne 2)
et tu termine en bas (ligne .End(xlup)).Du coup tu supprime la ligne
par exemple 4 et quand ta boucle veux aller sur la ligne 5, c'est deja
devenu la 4 et tu es sur la ligne theorique 6.Je ne sais pas si je me
fait bien comprendre :-?

For c = Range("D65536").End(xlUp).row To 2
If Cells(c, 4).Offset(0, 7).Value > 1 Then
Range("A" & c & ":I" & c).Copy _
Sheets("Fichier client à rectifier").Range("A" & Ligne)
Ligne = Ligne + 1
Row(c).Delete
End If
Next c
Pas tester, mais devrait convenir. Attention avec cette macro, tu ne
garde meme pas un des doublons dans ta feuille.

Bonjour,

J'ai une feuille "fichier client" avec les colonnes suivantes :
A:N° Salon - B:N° Client - C:Civilité - D:Nom Client - E:Prénom
Client -



F:Adresse 1...

Je souhaiterai extraire les doublons dans la feuille "fichier client à
rectifier" et les supprimer de la feuille "fichier client"
automatiquement.



Voici la macro :

Sub SuppressionClients()
Dim Plage As Range, c As Range, Ligne As Long
Range("J:K").Insert
Ligne = 1
Set Plage = Range("D2", Range("D65536").End(xlUp))
For Each c In Plage
c.Offset(0, 6).Value = c.Value & c.Offset(0, 1).Value
Next c
For Each c In Plage
c.Offset(0, 7).Value = _
WorksheetFunction.CountIf(Plage.Offset(0, 6), c.Offset(0,
6))



Next c
Range("k:k").Copy
Range("k:k").PasteSpecial xlPasteValues
For Each c In Plage
If c.Offset(0, 7).Value > 1 Then
Range("A" & c.Row & ":I" & c.Row).Copy _
Sheets("Fichier client à rectifier").Range("A" & Ligne)
Ligne = Ligne + 1
c.EntireRow.Delete
End If
Next c
Range("J:K").Delete
End Sub

Cependant, il ne m'extrait q'un seul des doublons pour certaines
lignes et



les 2 pour d'autres.... Je n'y comprend plus rien.
J'ai joins mon fichier pour exemple.
http://cjoint.com/?cex6Vw7kHI


Nadyajah



--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O








Avatar
Yoyo
Euh... pas la variable Ligne :-/ Elle existe déjà...
Tu lui donnes le nom que tu veux ;-)

A+

"Yoyo" a écrit dans le message de
news:43e687d7$0$20166$
Bonsoir Nadyajah,

Dans ce que t'a proposé JLuc, la variable c représente la ligne à traiter.
Puisque tu as déjà une variable objet "c", il faut que tu en déclares une
autre. Par exemple :

Dim Ligne as Long

et ensuite, tu remplaces le c dans la partie de code de JLuc par cette
nouvelle variable.

Amicalement
Yoyo

"Nadyajah" a écrit dans le message de
news:
Bonsoir,

J'ai réécris la macro suivante et il me dit en selectionnant le "c" de
la


ligne de programme "For c = Range("D65536").End(xlUp).Row To 2" =>
incompatibilité de type.
???????

Sub SuppressionClients()
Dim Plage As Range, c As Range, Ligne As Long
Range("J:K").Insert
Ligne = 1
Set Plage = Range("D2", Range("D65536").End(xlUp))
For Each c In Plage
c.Offset(0, 6).Value = c.Value & c.Offset(0, 1).Value
Next c


For c = Range("D65536").End(xlUp).Row To 2
If Cells(c, 4).Offset(0, 7).Value > 1 Then
Range("A" & c & ":I" & c).Copy _
Sheets("Fichier client à rectifier").Range("A" & Ligne)
Ligne = Ligne + 1
Row(c).Delete
End If
Next c


*Bonjour Nadyajah*,
de la maniere dont tu gere ta boucle, tu commence d'en haut (ligne 2)
et tu termine en bas (ligne .End(xlup)).Du coup tu supprime la ligne
par exemple 4 et quand ta boucle veux aller sur la ligne 5, c'est deja
devenu la 4 et tu es sur la ligne theorique 6.Je ne sais pas si je me
fait bien comprendre :-?

For c = Range("D65536").End(xlUp).row To 2
If Cells(c, 4).Offset(0, 7).Value > 1 Then
Range("A" & c & ":I" & c).Copy _
Sheets("Fichier client à rectifier").Range("A" & Ligne)
Ligne = Ligne + 1
Row(c).Delete
End If
Next c
Pas tester, mais devrait convenir. Attention avec cette macro, tu ne
garde meme pas un des doublons dans ta feuille.

Bonjour,

J'ai une feuille "fichier client" avec les colonnes suivantes :
A:N° Salon - B:N° Client - C:Civilité - D:Nom Client - E:Prénom
Client -



F:Adresse 1...

Je souhaiterai extraire les doublons dans la feuille "fichier client
à




rectifier" et les supprimer de la feuille "fichier client"
automatiquement.



Voici la macro :

Sub SuppressionClients()
Dim Plage As Range, c As Range, Ligne As Long
Range("J:K").Insert
Ligne = 1
Set Plage = Range("D2", Range("D65536").End(xlUp))
For Each c In Plage
c.Offset(0, 6).Value = c.Value & c.Offset(0, 1).Value
Next c
For Each c In Plage
c.Offset(0, 7).Value = _
WorksheetFunction.CountIf(Plage.Offset(0, 6),
c.Offset(0,




6))
Next c
Range("k:k").Copy
Range("k:k").PasteSpecial xlPasteValues
For Each c In Plage
If c.Offset(0, 7).Value > 1 Then
Range("A" & c.Row & ":I" & c.Row).Copy _
Sheets("Fichier client à rectifier").Range("A" & Ligne)
Ligne = Ligne + 1
c.EntireRow.Delete
End If
Next c
Range("J:K").Delete
End Sub

Cependant, il ne m'extrait q'un seul des doublons pour certaines
lignes et



les 2 pour d'autres.... Je n'y comprend plus rien.
J'ai joins mon fichier pour exemple.
http://cjoint.com/?cex6Vw7kHI


Nadyajah



--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O












Avatar
JLuc
*Bonjour Yoyo*, et merci
Il est vrai que je n'avais pas fait attention a ce petit detail
:oÞ
Merci d'avoir rectifie le tir ;-)


Bonsoir Nadyajah,

Dans ce que t'a proposé JLuc, la variable c représente la ligne à traiter.
Puisque tu as déjà une variable objet "c", il faut que tu en déclares une
autre. Par exemple :

Dim Ligne as Long

et ensuite, tu remplaces le c dans la partie de code de JLuc par cette
nouvelle variable.

Amicalement
Yoyo

"Nadyajah" a écrit dans le message de
news:
Bonsoir,

J'ai réécris la macro suivante et il me dit en selectionnant le "c" de la
ligne de programme "For c = Range("D65536").End(xlUp).Row To 2" =>
incompatibilité de type.
???????

Sub SuppressionClients()
Dim Plage As Range, c As Range, Ligne As Long
Range("J:K").Insert
Ligne = 1
Set Plage = Range("D2", Range("D65536").End(xlUp))
For Each c In Plage
c.Offset(0, 6).Value = c.Value & c.Offset(0, 1).Value
Next c


For c = Range("D65536").End(xlUp).Row To 2
If Cells(c, 4).Offset(0, 7).Value > 1 Then
Range("A" & c & ":I" & c).Copy _
Sheets("Fichier client à rectifier").Range("A" & Ligne)
Ligne = Ligne + 1
Row(c).Delete
End If
Next c


*Bonjour Nadyajah*,
de la maniere dont tu gere ta boucle, tu commence d'en haut (ligne 2)
et tu termine en bas (ligne .End(xlup)).Du coup tu supprime la ligne
par exemple 4 et quand ta boucle veux aller sur la ligne 5, c'est deja
devenu la 4 et tu es sur la ligne theorique 6.Je ne sais pas si je me
fait bien comprendre :-?

For c = Range("D65536").End(xlUp).row To 2
If Cells(c, 4).Offset(0, 7).Value > 1 Then
Range("A" & c & ":I" & c).Copy _
Sheets("Fichier client à rectifier").Range("A" & Ligne)
Ligne = Ligne + 1
Row(c).Delete
End If
Next c
Pas tester, mais devrait convenir. Attention avec cette macro, tu ne
garde meme pas un des doublons dans ta feuille.

Bonjour,

J'ai une feuille "fichier client" avec les colonnes suivantes :
A:N° Salon - B:N° Client - C:Civilité - D:Nom Client - E:Prénom Client -
F:Adresse 1...

Je souhaiterai extraire les doublons dans la feuille "fichier client à
rectifier" et les supprimer de la feuille "fichier client"
automatiquement. Voici la macro :

Sub SuppressionClients()
Dim Plage As Range, c As Range, Ligne As Long
Range("J:K").Insert
Ligne = 1
Set Plage = Range("D2", Range("D65536").End(xlUp))
For Each c In Plage
c.Offset(0, 6).Value = c.Value & c.Offset(0, 1).Value
Next c
For Each c In Plage
c.Offset(0, 7).Value = _
WorksheetFunction.CountIf(Plage.Offset(0, 6), c.Offset(0, 6))
Next c
Range("k:k").Copy
Range("k:k").PasteSpecial xlPasteValues
For Each c In Plage
If c.Offset(0, 7).Value > 1 Then
Range("A" & c.Row & ":I" & c.Row).Copy _
Sheets("Fichier client à rectifier").Range("A" & Ligne)
Ligne = Ligne + 1
c.EntireRow.Delete
End If
Next c
Range("J:K").Delete
End Sub

Cependant, il ne m'extrait q'un seul des doublons pour certaines lignes et
les 2 pour d'autres.... Je n'y comprend plus rien.
J'ai joins mon fichier pour exemple.
http://cjoint.com/?cex6Vw7kHI


Nadyajah



--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O





--
____
( O | O )
--
_oooO_ JLuc _Oooo_

O-O




Avatar
AV
Dans ce genre de manip, le filtre élaboré est beaucoup plus performant qu'une
boucle
Il est évident que, plus le nombre de données à examiner est important, et plus
la différence de rapidité est perceptible

Exemple là :
http://cjoint.com/?cgjEWsjbB3

AV
Avatar
Nadyajah
Bonsoir AV,

Merci pour ta réponse. Cependant, ta macro n'extrait qu'un seul des doublons
alors que je souhaiterais extraire les 2. Ensuite, je vérifies lequel je
souhaite réintégrer et j'ai une macro qui insère la ligne selectionnée dans
mon fichier client.

Cordialement.

Nadyajah


Dans ce genre de manip, le filtre élaboré est beaucoup plus performant qu'une
boucle
Il est évident que, plus le nombre de données à examiner est important, et plus
la différence de rapidité est perceptible

Exemple là :
http://cjoint.com/?cgjEWsjbB3

AV





Avatar
Nadyajah
Bonsoir,
Alors j'ai remplacé le c par "x" mais il s'arrête sur la ligne :
Row(x).Delete
et me dit "sub ou fonction non définie"

?????

Revoila ma macro en globalité

Sub SuppressionClients()

Dim Plage As Range, c As Range, Ligne As Long, d As Long
Range("J:K").Insert
Ligne = 1
Set Plage = Range("D2", Range("D65536").End(xlUp))

'insère dans la colonne J la valeur Nom&Prénom
For Each c In Plage
c.Offset(0, 6).Value = c.Value & c.Offset(0, 1).Value
Next c

'insère dans la colonne K le nombre de doublons trouvés dans la colonne J
For Each c In Plage
c.Offset(0, 7).Value = _
WorksheetFunction.CountIf(Plage.Offset(0, 6), c.Offset(0, 6))
Next c

Range("k:k").Copy
Range("k:k").PasteSpecial xlPasteValues

For d = Range("D65536").End(xlUp).Row To 2
If Cells(d, 4).Offset(0, 7).Value > 1 Then
Range("A" & d & ":I" & d).Copy _
Sheets("Fichier client à rectifier").Range("A" & Ligne)
Ligne = Ligne + 1
Row(d).Delete
End If
Next d

Range("J:K").Delete

MsgBox "Extraction des doublons de noms terminée !"
End Sub
Avatar
Nadyajah
Re,

J'ai supprimée la ligne "Row(x).Delete" pour voir si cela fonctionne mais il
ne m'extrait rien....

Voici le fichier joint
http://cjoint.com/data/cgwLTAtCoz.htm
1 2