Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

macro de michdenis: probleme?

33 réponses
Avatar
rick
Bonjour,

La macro de michdenis, me permet de detecter des doublons, quand j'importe
des données sur feuille, la macro se lance et permet de verifier les
différents doublons suivant la combinaisons de 5 colonnes.

le probleme est que je souhaite, si un doublon est détecté lors de l'import
écraser la ligne déja existante quand je repond oui au message(desirez vous
ecraser la ligne?).

J'ai essayé de faire une modif, mais le probleme par exemple, quand sur ma
ligne 15 j'ai une ligne , et quand je vient faire l'import de la meme ligne
j'ai la macro qui se lance , je choisit oui dans mon message: désirez vous
écraser la ligne.
La ligne est effacé mais pas écrasé à la meme ligne, c'est a dire que je me
retrouve avec la ligne 15 à vide et la ligne 16 avec les bonnes données.

Savez vous comment faire pour écraser cette ligne 15, si le doublon est
détecté.
c'est a dire avoir les nouvelle données sur la ligne 15.(ecraser l'ancienne
donnée)

ci-joint l'aperçu de la macro:
Sub doublons()
Dim K As Integer, A As Integer
Dim rg As Range, P As Integer
Dim NomFeuille As String

NomFeuille = "Feuil1" 'à déterminer

Application.EnableEvents = False
'Concatenation des colonnes D, E, H, I, P dans la colonne IV
With Worksheets(NomFeuille)
Set rg = .Range("IV15:IV400")
rg.FormulaLocal = _
"=" & UCase(.Range("$D15").Address(0, 0)) & _
"&" & UCase(.Range("$E15").Address(0, 0)) & "&" _
& UCase(.Range("$H15").Address(0, 0)) _
& "&" & UCase(.Range("$I15").Address(0, 0)) & _
"&" & UCase(.Range("$P15").Address(0, 0))
'substitution des formules pour leurs valeurs, dans la colonne HK:HK
rg.Value = rg.Value
'dans la colonne IU,place la formule suivante
'qui identifie le numero de lignes.ceci dans le but de remettre le
tableau àla
'fin dans le meme ordre de tri,en se basant sur cette colonne
rg.Offset(, -1).Formula = "=row()"
'Transforme la formule de la colonne en sa valeur
rg.Offset(, -1).Value = rg.Offset(, -1).Value
'premier tri de la colonne IU pour regrouper les doublons les un avec
les autres
rg.Offset(, -255).Resize(, 256).Sort Key1:=rg(2, 1)
End With
'Boucle qui teste chacune des cellules de la colonnes IU
'selon le choix de l'utilisateur, affecter une lettre au doublon ou
supprimer ces doublons

Do While rg(K + 1, 1).Row < rg.Row + rg.Rows.Count
A = WorksheetFunction.CountIf(rg, rg(K + 1, 1))
If A > 1 Then
'si a>1, il ya doublons

'cette ligne permet de sélectionner la plage ou sont les doublons pour
permettre à l'utilisateur
'de les visionner
Application.GoTo Range("A" & rg(K + 1, 1).Offset(-2).Row), True
rg(K + 1, 1).Resize(A).EntireRow.Select
'le message d'alerte
If MsgBox("il y a des " & A - 1 & " doublon(s) dans la ligne" _
& rg(K + 1).Row & "." & vbCrLf & vbCrLf & _
"désirez vous écraser cette ligne ? ", _
vbCritical + vbYesNo, "Doublons") = vbYes Then

rg(K + 1).EntireRow.ClearContents

Merci d'avance

10 réponses

1 2 3 4
Avatar
twinley
Bonjour,

c'est une macro pour éviter les doublons de fil que tu devrais mettre au
point...

à+twinley

Bonjour,

La macro de michdenis, me permet de detecter des doublons, quand j'importe
des données sur feuille, la macro se lance et permet de verifier les
différents doublons suivant la combinaisons de 5 colonnes.

le probleme est que je souhaite, si un doublon est détecté lors de l'import
écraser la ligne déja existante quand je repond oui au message(desirez vous
ecraser la ligne?).

J'ai essayé de faire une modif, mais le probleme par exemple, quand sur ma
ligne 15 j'ai une ligne , et quand je vient faire l'import de la meme ligne
j'ai la macro qui se lance , je choisit oui dans mon message: désirez vous
écraser la ligne.
La ligne est effacé mais pas écrasé à la meme ligne, c'est a dire que je me
retrouve avec la ligne 15 à vide et la ligne 16 avec les bonnes données.

Savez vous comment faire pour écraser cette ligne 15, si le doublon est
détecté.
c'est a dire avoir les nouvelle données sur la ligne 15.(ecraser l'ancienne
donnée)

ci-joint l'aperçu de la macro:
Sub doublons()
Dim K As Integer, A As Integer
Dim rg As Range, P As Integer
Dim NomFeuille As String

NomFeuille = "Feuil1" 'à déterminer

Application.EnableEvents = False
'Concatenation des colonnes D, E, H, I, P dans la colonne IV
With Worksheets(NomFeuille)
Set rg = .Range("IV15:IV400")
rg.FormulaLocal = _
"=" & UCase(.Range("$D15").Address(0, 0)) & _
"&" & UCase(.Range("$E15").Address(0, 0)) & "&" _
& UCase(.Range("$H15").Address(0, 0)) _
& "&" & UCase(.Range("$I15").Address(0, 0)) & _
"&" & UCase(.Range("$P15").Address(0, 0))
'substitution des formules pour leurs valeurs, dans la colonne HK:HK
rg.Value = rg.Value
'dans la colonne IU,place la formule suivante
'qui identifie le numero de lignes.ceci dans le but de remettre le
tableau àla
'fin dans le meme ordre de tri,en se basant sur cette colonne
rg.Offset(, -1).Formula = "=row()"
'Transforme la formule de la colonne en sa valeur
rg.Offset(, -1).Value = rg.Offset(, -1).Value
'premier tri de la colonne IU pour regrouper les doublons les un avec
les autres
rg.Offset(, -255).Resize(, 256).Sort Key1:=rg(2, 1)
End With
'Boucle qui teste chacune des cellules de la colonnes IU
'selon le choix de l'utilisateur, affecter une lettre au doublon ou
supprimer ces doublons

Do While rg(K + 1, 1).Row < rg.Row + rg.Rows.Count
A = WorksheetFunction.CountIf(rg, rg(K + 1, 1))
If A > 1 Then
'si a>1, il ya doublons

'cette ligne permet de sélectionner la plage ou sont les doublons pour
permettre à l'utilisateur
'de les visionner
Application.GoTo Range("A" & rg(K + 1, 1).Offset(-2).Row), True
rg(K + 1, 1).Resize(A).EntireRow.Select
'le message d'alerte
If MsgBox("il y a des " & A - 1 & " doublon(s) dans la ligne" _
& rg(K + 1).Row & "." & vbCrLf & vbCrLf & _
"désirez vous écraser cette ligne ? ", _
vbCritical + vbYesNo, "Doublons") = vbYes Then

rg(K + 1).EntireRow.ClearContents

Merci d'avance


Avatar
rick
je comprend pas ta réponse?

tu sait quelle est la ligne a corrigé pour écraser et non effacer.

merci


Bonjour,

c'est une macro pour éviter les doublons de fil que tu devrais mettre au
point...

à+twinley

Bonjour,

La macro de michdenis, me permet de detecter des doublons, quand j'importe
des données sur feuille, la macro se lance et permet de verifier les
différents doublons suivant la combinaisons de 5 colonnes.

le probleme est que je souhaite, si un doublon est détecté lors de l'import
écraser la ligne déja existante quand je repond oui au message(desirez vous
ecraser la ligne?).

J'ai essayé de faire une modif, mais le probleme par exemple, quand sur ma
ligne 15 j'ai une ligne , et quand je vient faire l'import de la meme ligne
j'ai la macro qui se lance , je choisit oui dans mon message: désirez vous
écraser la ligne.
La ligne est effacé mais pas écrasé à la meme ligne, c'est a dire que je me
retrouve avec la ligne 15 à vide et la ligne 16 avec les bonnes données.

Savez vous comment faire pour écraser cette ligne 15, si le doublon est
détecté.
c'est a dire avoir les nouvelle données sur la ligne 15.(ecraser l'ancienne
donnée)

ci-joint l'aperçu de la macro:
Sub doublons()
Dim K As Integer, A As Integer
Dim rg As Range, P As Integer
Dim NomFeuille As String

NomFeuille = "Feuil1" 'à déterminer

Application.EnableEvents = False
'Concatenation des colonnes D, E, H, I, P dans la colonne IV
With Worksheets(NomFeuille)
Set rg = .Range("IV15:IV400")
rg.FormulaLocal = _
"=" & UCase(.Range("$D15").Address(0, 0)) & _
"&" & UCase(.Range("$E15").Address(0, 0)) & "&" _
& UCase(.Range("$H15").Address(0, 0)) _
& "&" & UCase(.Range("$I15").Address(0, 0)) & _
"&" & UCase(.Range("$P15").Address(0, 0))
'substitution des formules pour leurs valeurs, dans la colonne HK:HK
rg.Value = rg.Value
'dans la colonne IU,place la formule suivante
'qui identifie le numero de lignes.ceci dans le but de remettre le
tableau àla
'fin dans le meme ordre de tri,en se basant sur cette colonne
rg.Offset(, -1).Formula = "=row()"
'Transforme la formule de la colonne en sa valeur
rg.Offset(, -1).Value = rg.Offset(, -1).Value
'premier tri de la colonne IU pour regrouper les doublons les un avec
les autres
rg.Offset(, -255).Resize(, 256).Sort Key1:=rg(2, 1)
End With
'Boucle qui teste chacune des cellules de la colonnes IU
'selon le choix de l'utilisateur, affecter une lettre au doublon ou
supprimer ces doublons

Do While rg(K + 1, 1).Row < rg.Row + rg.Rows.Count
A = WorksheetFunction.CountIf(rg, rg(K + 1, 1))
If A > 1 Then
'si a>1, il ya doublons

'cette ligne permet de sélectionner la plage ou sont les doublons pour
permettre à l'utilisateur
'de les visionner
Application.GoTo Range("A" & rg(K + 1, 1).Offset(-2).Row), True
rg(K + 1, 1).Resize(A).EntireRow.Select
'le message d'alerte
If MsgBox("il y a des " & A - 1 & " doublon(s) dans la ligne" _
& rg(K + 1).Row & "." & vbCrLf & vbCrLf & _
"désirez vous écraser cette ligne ? ", _
vbCritical + vbYesNo, "Doublons") = vbYes Then

rg(K + 1).EntireRow.ClearContents

Merci d'avance





Avatar
Misange
Rick,
vraiment fais un effort pour t'adapter à ce forum s'il te plait.
En clair, Twinley te dis que cela fait de très nombreuses fois que tu
poses EXACTEMENT la même question et que ça fatigue tout le monde ici,
sauf une personne qui dort encore à cette heure peut-être.

Ce qui fait que plus personne ne veut te répondre, à part l'exception
citée plus haut, c'est de voir que tu ne fais de ton côté AUCUN effort
pour comprendre les codes qui te sont fournis et que tu es du coup
incapable de les modifier. Fais des choses plus simples mais que tu
comprennes complètement. Tous ceux qui sur ce forum montrent qu'ils
veulent apprendre et non pas seulement se faire écrire des lignes de
codes par d'autres se font aider sans problème. Au lieu de répéter sans
fin les mêmes questions demande toi plutôt pourquoi personne n'a envie
de te répondre.

Je ne vais pas répondre à ta question, mais t'indiquer comment toi tu
peux y répondre :

je te mets sur la piste : la ligne à modifier c'est celle-ci

rg(K + 1).EntireRow.ClearContents

Regarde dans l'aide ce que veut dire entirerow (quand tu es dans VBE,
tape sur la touche F1 et écris entirerow...)
Fais pareil pour "ClearContents"

maintenant pour savoir comment faire pour supprimer une ligne en VBA, tu
lances l'enregistreur de macros et dans une page quelconque, tu
sélectionnes toute une ligne et tu la supprime en faisant clic droit,
supprimer. Arrête l'enregistreur, regarde le code, récupère la ligne
contenant l'instruction enregistrée, essaie de le comprendre et copie
l'instruction que tu penses être la bonne à la place de
EntireRow.ClearContents



Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta

Le 05/05/2005 12:34, :
je comprend pas ta réponse?

tu sait quelle est la ligne a corrigé pour écraser et non effacer.

merci



Bonjour,

c'est une macro pour éviter les doublons de fil que tu devrais mettre au
point...

à+twinley


Bonjour,

La macro de michdenis, me permet de detecter des doublons, quand j'importe
des données sur feuille, la macro se lance et permet de verifier les
différents doublons suivant la combinaisons de 5 colonnes.

le probleme est que je souhaite, si un doublon est détecté lors de l'import
écraser la ligne déja existante quand je repond oui au message(desirez vous
ecraser la ligne?).

J'ai essayé de faire une modif, mais le probleme par exemple, quand sur ma
ligne 15 j'ai une ligne , et quand je vient faire l'import de la meme ligne
j'ai la macro qui se lance , je choisit oui dans mon message: désirez vous
écraser la ligne.
La ligne est effacé mais pas écrasé à la meme ligne, c'est a dire que je me
retrouve avec la ligne 15 à vide et la ligne 16 avec les bonnes données.

Savez vous comment faire pour écraser cette ligne 15, si le doublon est
détecté.
c'est a dire avoir les nouvelle données sur la ligne 15.(ecraser l'ancienne
donnée)

ci-joint l'aperçu de la macro:
Sub doublons()
Dim K As Integer, A As Integer
Dim rg As Range, P As Integer
Dim NomFeuille As String

NomFeuille = "Feuil1" 'à déterminer

Application.EnableEvents = False
'Concatenation des colonnes D, E, H, I, P dans la colonne IV
With Worksheets(NomFeuille)
Set rg = .Range("IV15:IV400")
rg.FormulaLocal = _
"=" & UCase(.Range("$D15").Address(0, 0)) & _
"&" & UCase(.Range("$E15").Address(0, 0)) & "&" _
& UCase(.Range("$H15").Address(0, 0)) _
& "&" & UCase(.Range("$I15").Address(0, 0)) & _
"&" & UCase(.Range("$P15").Address(0, 0))
'substitution des formules pour leurs valeurs, dans la colonne HK:HK
rg.Value = rg.Value
'dans la colonne IU,place la formule suivante
'qui identifie le numero de lignes.ceci dans le but de remettre le
tableau àla
'fin dans le meme ordre de tri,en se basant sur cette colonne
rg.Offset(, -1).Formula = "=row()"
'Transforme la formule de la colonne en sa valeur
rg.Offset(, -1).Value = rg.Offset(, -1).Value
'premier tri de la colonne IU pour regrouper les doublons les un avec
les autres
rg.Offset(, -255).Resize(, 256).Sort Key1:=rg(2, 1)
End With
'Boucle qui teste chacune des cellules de la colonnes IU
'selon le choix de l'utilisateur, affecter une lettre au doublon ou
supprimer ces doublons

Do While rg(K + 1, 1).Row < rg.Row + rg.Rows.Count
A = WorksheetFunction.CountIf(rg, rg(K + 1, 1))
If A > 1 Then
'si a>1, il ya doublons

'cette ligne permet de sélectionner la plage ou sont les doublons pour
permettre à l'utilisateur
'de les visionner
Application.GoTo Range("A" & rg(K + 1, 1).Offset(-2).Row), True
rg(K + 1, 1).Resize(A).EntireRow.Select
'le message d'alerte
If MsgBox("il y a des " & A - 1 & " doublon(s) dans la ligne" _
& rg(K + 1).Row & "." & vbCrLf & vbCrLf & _
"désirez vous écraser cette ligne ? ", _
vbCritical + vbYesNo, "Doublons") = vbYes Then

rg(K + 1).EntireRow.ClearContents

Merci d'avance







Avatar
twinley
C'est ce que nous te reprochons : ne rien comprendre.
Tout le monde te demande avec courtoisie de ne pas ouvrir 50 millions de
sujets pour la même question. Tu l'a posé hier à 22:47.
Comme nous avons un peu de mal à te situer, tu mets tous les
intervenants de ce forum dans l'embarras, et la pagaille dans les sujets.
Pour ma part j'hésite entre idiot congénital ou crétin des Alpes pour te
qualifier.
Jadis, j'ai pris le temps de t'expliquer comment utiliser l'enregistreur
de macro et comment utiliser Outlook Express ou Thunderbird pour lire
les news.
Tu n'as pas eu la politesse de répondre. Ni aux autres intervenants, ni
à moi, pourtant je n'ai pas changé de pseudo.
Tu ne veux pas prendre les outils pour progresser. Pourtant ils sont
gratuits !

Pourquoi veux tu que les gens te répondent ?

Tu vas encore trainer tes savates quelques temps et puis tu vas changer
de pseudo ? Je m'entend encore écrire en décembre de l'année dernière
que ce sera diffcile pour toi de ne pas être reconnu... C'est toujours
d'actualité.

Bien à toi vieux, permet moi cette privauté, car tu commences à vieillir.
Je n'ose pas penser à tes question quand Alzheimer donnera toute sa
puissance...


à+twinley

je comprend pas ta réponse?

tu sait quelle est la ligne a corrigé pour écraser et non effacer.

merci



Bonjour,

c'est une macro pour éviter les doublons de fil que tu devrais mettre au
point...

à+twinley


Bonjour,

La macro de michdenis, me permet de detecter des doublons, quand j'importe
des données sur feuille, la macro se lance et permet de verifier les
différents doublons suivant la combinaisons de 5 colonnes.

le probleme est que je souhaite, si un doublon est détecté lors de l'import
écraser la ligne déja existante quand je repond oui au message(desirez vous
ecraser la ligne?).

J'ai essayé de faire une modif, mais le probleme par exemple, quand sur ma
ligne 15 j'ai une ligne , et quand je vient faire l'import de la meme ligne
j'ai la macro qui se lance , je choisit oui dans mon message: désirez vous
écraser la ligne.
La ligne est effacé mais pas écrasé à la meme ligne, c'est a dire que je me
retrouve avec la ligne 15 à vide et la ligne 16 avec les bonnes données.

Savez vous comment faire pour écraser cette ligne 15, si le doublon est
détecté.
c'est a dire avoir les nouvelle données sur la ligne 15.(ecraser l'ancienne
donnée)

ci-joint l'aperçu de la macro:
Sub doublons()
Dim K As Integer, A As Integer
Dim rg As Range, P As Integer
Dim NomFeuille As String

NomFeuille = "Feuil1" 'à déterminer

Application.EnableEvents = False
'Concatenation des colonnes D, E, H, I, P dans la colonne IV
With Worksheets(NomFeuille)
Set rg = .Range("IV15:IV400")
rg.FormulaLocal = _
"=" & UCase(.Range("$D15").Address(0, 0)) & _
"&" & UCase(.Range("$E15").Address(0, 0)) & "&" _
& UCase(.Range("$H15").Address(0, 0)) _
& "&" & UCase(.Range("$I15").Address(0, 0)) & _
"&" & UCase(.Range("$P15").Address(0, 0))
'substitution des formules pour leurs valeurs, dans la colonne HK:HK
rg.Value = rg.Value
'dans la colonne IU,place la formule suivante
'qui identifie le numero de lignes.ceci dans le but de remettre le
tableau àla
'fin dans le meme ordre de tri,en se basant sur cette colonne
rg.Offset(, -1).Formula = "=row()"
'Transforme la formule de la colonne en sa valeur
rg.Offset(, -1).Value = rg.Offset(, -1).Value
'premier tri de la colonne IU pour regrouper les doublons les un avec
les autres
rg.Offset(, -255).Resize(, 256).Sort Key1:=rg(2, 1)
End With
'Boucle qui teste chacune des cellules de la colonnes IU
'selon le choix de l'utilisateur, affecter une lettre au doublon ou
supprimer ces doublons

Do While rg(K + 1, 1).Row < rg.Row + rg.Rows.Count
A = WorksheetFunction.CountIf(rg, rg(K + 1, 1))
If A > 1 Then
'si a>1, il ya doublons

'cette ligne permet de sélectionner la plage ou sont les doublons pour
permettre à l'utilisateur
'de les visionner
Application.GoTo Range("A" & rg(K + 1, 1).Offset(-2).Row), True
rg(K + 1, 1).Resize(A).EntireRow.Select
'le message d'alerte
If MsgBox("il y a des " & A - 1 & " doublon(s) dans la ligne" _
& rg(K + 1).Row & "." & vbCrLf & vbCrLf & _
"désirez vous écraser cette ligne ? ", _
vbCritical + vbYesNo, "Doublons") = vbYes Then

rg(K + 1).EntireRow.ClearContents

Merci d'avance







Avatar
twinley
Bonjour Misange,

Vous êtes trop bonne ma chère... Je veux dire, trop généreuse.
J'ai fais ma réponse sans voir ta réponse courtoise et altruiste.
Je dois avouer que nous avons affaire à une pointure. Il fallait bien
qu'un jour je m'avoue vaincu...

ps : le RSSexcelabo c'est que du bonheur avec Thunderbird, mais chut !
si Rick s'en sert, il pourrait progresser.

à+twinley

Rick,
vraiment fais un effort pour t'adapter à ce forum s'il te plait.
En clair, Twinley te dis que cela fait de très nombreuses fois que tu
poses EXACTEMENT la même question et que ça fatigue tout le monde ici,
sauf une personne qui dort encore à cette heure peut-être.

Ce qui fait que plus personne ne veut te répondre, à part l'exception
citée plus haut, c'est de voir que tu ne fais de ton côté AUCUN effort
pour comprendre les codes qui te sont fournis et que tu es du coup
incapable de les modifier. Fais des choses plus simples mais que tu
comprennes complètement. Tous ceux qui sur ce forum montrent qu'ils
veulent apprendre et non pas seulement se faire écrire des lignes de
codes par d'autres se font aider sans problème. Au lieu de répéter sans
fin les mêmes questions demande toi plutôt pourquoi personne n'a envie
de te répondre.

Je ne vais pas répondre à ta question, mais t'indiquer comment toi tu
peux y répondre :

je te mets sur la piste : la ligne à modifier c'est celle-ci

rg(K + 1).EntireRow.ClearContents

Regarde dans l'aide ce que veut dire entirerow (quand tu es dans VBE,
tape sur la touche F1 et écris entirerow...)
Fais pareil pour "ClearContents"

maintenant pour savoir comment faire pour supprimer une ligne en VBA, tu
lances l'enregistreur de macros et dans une page quelconque, tu
sélectionnes toute une ligne et tu la supprime en faisant clic droit,
supprimer. Arrête l'enregistreur, regarde le code, récupère la ligne
contenant l'instruction enregistrée, essaie de le comprendre et copie
l'instruction que tu penses être la bonne à la place de
EntireRow.ClearContents



Misange migrateuse http://www.excelabo.net
mail : http://cerbermail.com/?k5Q8Dh2mta

Le 05/05/2005 12:34, :

je comprend pas ta réponse?

tu sait quelle est la ligne a corrigé pour écraser et non effacer.

merci



Bonjour,

c'est une macro pour éviter les doublons de fil que tu devrais mettre
au point...

à+twinley


Bonjour,
La macro de michdenis, me permet de detecter des doublons, quand
j'importe des données sur feuille, la macro se lance et permet de
verifier les différents doublons suivant la combinaisons de 5 colonnes.
le probleme est que je souhaite, si un doublon est détecté lors de
l'import écraser la ligne déja existante quand je repond oui au
message(desirez vous ecraser la ligne?).
J'ai essayé de faire une modif, mais le probleme par exemple, quand
sur ma ligne 15 j'ai une ligne , et quand je vient faire l'import de
la meme ligne j'ai la macro qui se lance , je choisit oui dans mon
message: désirez vous écraser la ligne. La ligne est effacé mais pas
écrasé à la meme ligne, c'est a dire que je me retrouve avec la
ligne 15 à vide et la ligne 16 avec les bonnes données.
Savez vous comment faire pour écraser cette ligne 15, si le doublon
est détecté. c'est a dire avoir les nouvelle données sur la ligne
15.(ecraser l'ancienne donnée)
ci-joint l'aperçu de la macro: Sub doublons() Dim K As Integer, A As
Integer Dim rg As Range, P As Integer Dim NomFeuille As String
NomFeuille = "Feuil1" 'à déterminer
Application.EnableEvents = False 'Concatenation des colonnes D, E,
H, I, P dans la colonne IV With Worksheets(NomFeuille) Set rg =
.Range("IV15:IV400") rg.FormulaLocal = _ "=" &
UCase(.Range("$D15").Address(0, 0)) & _ "&" &
UCase(.Range("$E15").Address(0, 0)) & "&" _ &
UCase(.Range("$H15").Address(0, 0)) _ & "&" &
UCase(.Range("$I15").Address(0, 0)) & _ "&" &
UCase(.Range("$P15").Address(0, 0)) 'substitution des formules
pour leurs valeurs, dans la colonne HK:HK rg.Value = rg.Value
'dans la colonne IU,place la formule suivante 'qui identifie le
numero de lignes.ceci dans le but de remettre le tableau àla 'fin
dans le meme ordre de tri,en se basant sur cette colonne
rg.Offset(, -1).Formula = "=row()" 'Transforme la formule de la
colonne en sa valeur rg.Offset(, -1).Value = rg.Offset(,
-1).Value 'premier tri de la colonne IU pour regrouper les
doublons les un avec les autres rg.Offset(, -255).Resize(,
256).Sort Key1:=rg(2, 1) End With 'Boucle qui teste chacune des
cellules de la colonnes IU 'selon le choix de l'utilisateur,
affecter une lettre au doublon ou supprimer ces doublons
Do While rg(K + 1, 1).Row < rg.Row + rg.Rows.Count A =
WorksheetFunction.CountIf(rg, rg(K + 1, 1)) If A > 1 Then 'si
a>1, il ya doublons 'cette ligne permet de sélectionner la
plage ou sont les doublons pour permettre à l'utilisateur 'de les
visionner Application.GoTo Range("A" & rg(K + 1,
1).Offset(-2).Row), True rg(K + 1,
1).Resize(A).EntireRow.Select 'le message d'alerte If
MsgBox("il y a des " & A - 1 & " doublon(s) dans la ligne" _
& rg(K + 1).Row & "." & vbCrLf & vbCrLf & _
"désirez vous écraser cette ligne ? ", _ vbCritical +
vbYesNo, "Doublons") = vbYes Then rg(K +
1).EntireRow.ClearContents Merci d'avance










Avatar
MichDenis
Bonjour Rick,

Je ne comprends pas ta question pour la raison suivante :

Lorsque tu apelles la procédure, cette dernière t'affiche tous les doublons. Elle ne fait pas la différence entre les doublons qui
existaient avant la saisie de nouvelles et après que tu aies ajouter de nouvelles données. En conséquence, comment fais-tu pour
discriminer les doublons qui étaient déjà présents dans ton tableau et les nouveaux doublons qui se sont ajoutés suite à la saisie
de tes nouvelles données ?

Un autre point que tu devrais regarder de près, lorsqu'il y a doublon, et que tu décides de supprimer les doublons suite à la boîte
de message te demandant ce que tu veux faire, la procédure ne détruit que les doublons, la première ligne est conservée ... tu dois
au moins conserver un exemplaire de la donnée ! Exemple, le message te dit que tu as 5 doublons, mais la procédure en détruit 4 et
conserve le premier exemplaire de la ligne trouvée de ces doublons.

Pour comprendre ce qui se passe, utilise la touche F8 pour voir le déroulement pas à pas lors de l'exécution de la boucle ...
observe après chacune des instructions comment cette dernière à transformer la feuille de calcul.

P.S. Comme c'est une procédure assez complexe, tu ne peux pas penser que tu vas arriver à la modifier en quelques minutes !!! Tu
dois d'abord savoir comment elle travaille et cela peut prendre beaucoup de temps. C'est d'ailleurs la difficulté majeure.


Salutations!





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

La macro de michdenis, me permet de detecter des doublons, quand j'importe
des données sur feuille, la macro se lance et permet de verifier les
différents doublons suivant la combinaisons de 5 colonnes.

le probleme est que je souhaite, si un doublon est détecté lors de l'import
écraser la ligne déja existante quand je repond oui au message(desirez vous
ecraser la ligne?).

J'ai essayé de faire une modif, mais le probleme par exemple, quand sur ma
ligne 15 j'ai une ligne , et quand je vient faire l'import de la meme ligne
j'ai la macro qui se lance , je choisit oui dans mon message: désirez vous
écraser la ligne.
La ligne est effacé mais pas écrasé à la meme ligne, c'est a dire que je me
retrouve avec la ligne 15 à vide et la ligne 16 avec les bonnes données.

Savez vous comment faire pour écraser cette ligne 15, si le doublon est
détecté.
c'est a dire avoir les nouvelle données sur la ligne 15.(ecraser l'ancienne
donnée)

ci-joint l'aperçu de la macro:
Sub doublons()
Dim K As Integer, A As Integer
Dim rg As Range, P As Integer
Dim NomFeuille As String

NomFeuille = "Feuil1" 'à déterminer

Application.EnableEvents = False
'Concatenation des colonnes D, E, H, I, P dans la colonne IV
With Worksheets(NomFeuille)
Set rg = .Range("IV15:IV400")
rg.FormulaLocal = _
"=" & UCase(.Range("$D15").Address(0, 0)) & _
"&" & UCase(.Range("$E15").Address(0, 0)) & "&" _
& UCase(.Range("$H15").Address(0, 0)) _
& "&" & UCase(.Range("$I15").Address(0, 0)) & _
"&" & UCase(.Range("$P15").Address(0, 0))
'substitution des formules pour leurs valeurs, dans la colonne HK:HK
rg.Value = rg.Value
'dans la colonne IU,place la formule suivante
'qui identifie le numero de lignes.ceci dans le but de remettre le
tableau àla
'fin dans le meme ordre de tri,en se basant sur cette colonne
rg.Offset(, -1).Formula = "=row()"
'Transforme la formule de la colonne en sa valeur
rg.Offset(, -1).Value = rg.Offset(, -1).Value
'premier tri de la colonne IU pour regrouper les doublons les un avec
les autres
rg.Offset(, -255).Resize(, 256).Sort Key1:=rg(2, 1)
End With
'Boucle qui teste chacune des cellules de la colonnes IU
'selon le choix de l'utilisateur, affecter une lettre au doublon ou
supprimer ces doublons

Do While rg(K + 1, 1).Row < rg.Row + rg.Rows.Count
A = WorksheetFunction.CountIf(rg, rg(K + 1, 1))
If A > 1 Then
'si a>1, il ya doublons

'cette ligne permet de sélectionner la plage ou sont les doublons pour
permettre à l'utilisateur
'de les visionner
Application.GoTo Range("A" & rg(K + 1, 1).Offset(-2).Row), True
rg(K + 1, 1).Resize(A).EntireRow.Select
'le message d'alerte
If MsgBox("il y a des " & A - 1 & " doublon(s) dans la ligne" _
& rg(K + 1).Row & "." & vbCrLf & vbCrLf & _
"désirez vous écraser cette ligne ? ", _
vbCritical + vbYesNo, "Doublons") = vbYes Then

rg(K + 1).EntireRow.ClearContents

Merci d'avance
Avatar
MichDenis
3 messages pour ne rien dire et tu dis que cela fais 4 à 5 mois que tu t'adonne à cette manoeuvre ?

Lequel entre toi ou Rick ne comprend rien ?




"twinley" a écrit dans le message de news:
C'est ce que nous te reprochons : ne rien comprendre.
Tout le monde te demande avec courtoisie de ne pas ouvrir 50 millions de
sujets pour la même question. Tu l'a posé hier à 22:47.
Comme nous avons un peu de mal à te situer, tu mets tous les
intervenants de ce forum dans l'embarras, et la pagaille dans les sujets.
Pour ma part j'hésite entre idiot congénital ou crétin des Alpes pour te
qualifier.
Jadis, j'ai pris le temps de t'expliquer comment utiliser l'enregistreur
de macro et comment utiliser Outlook Express ou Thunderbird pour lire
les news.
Tu n'as pas eu la politesse de répondre. Ni aux autres intervenants, ni
à moi, pourtant je n'ai pas changé de pseudo.
Tu ne veux pas prendre les outils pour progresser. Pourtant ils sont
gratuits !

Pourquoi veux tu que les gens te répondent ?

Tu vas encore trainer tes savates quelques temps et puis tu vas changer
de pseudo ? Je m'entend encore écrire en décembre de l'année dernière
que ce sera diffcile pour toi de ne pas être reconnu... C'est toujours
d'actualité.

Bien à toi vieux, permet moi cette privauté, car tu commences à vieillir.
Je n'ose pas penser à tes question quand Alzheimer donnera toute sa
puissance...


à+twinley

je comprend pas ta réponse?

tu sait quelle est la ligne a corrigé pour écraser et non effacer.

merci



Bonjour,

c'est une macro pour éviter les doublons de fil que tu devrais mettre au
point...

à+twinley


Bonjour,

La macro de michdenis, me permet de detecter des doublons, quand j'importe
des données sur feuille, la macro se lance et permet de verifier les
différents doublons suivant la combinaisons de 5 colonnes.

le probleme est que je souhaite, si un doublon est détecté lors de l'import
écraser la ligne déja existante quand je repond oui au message(desirez vous
ecraser la ligne?).

J'ai essayé de faire une modif, mais le probleme par exemple, quand sur ma
ligne 15 j'ai une ligne , et quand je vient faire l'import de la meme ligne
j'ai la macro qui se lance , je choisit oui dans mon message: désirez vous
écraser la ligne.
La ligne est effacé mais pas écrasé à la meme ligne, c'est a dire que je me
retrouve avec la ligne 15 à vide et la ligne 16 avec les bonnes données.

Savez vous comment faire pour écraser cette ligne 15, si le doublon est
détecté.
c'est a dire avoir les nouvelle données sur la ligne 15.(ecraser l'ancienne
donnée)

ci-joint l'aperçu de la macro:
Sub doublons()
Dim K As Integer, A As Integer
Dim rg As Range, P As Integer
Dim NomFeuille As String

NomFeuille = "Feuil1" 'à déterminer

Application.EnableEvents = False
'Concatenation des colonnes D, E, H, I, P dans la colonne IV
With Worksheets(NomFeuille)
Set rg = .Range("IV15:IV400")
rg.FormulaLocal = _
"=" & UCase(.Range("$D15").Address(0, 0)) & _
"&" & UCase(.Range("$E15").Address(0, 0)) & "&" _
& UCase(.Range("$H15").Address(0, 0)) _
& "&" & UCase(.Range("$I15").Address(0, 0)) & _
"&" & UCase(.Range("$P15").Address(0, 0))
'substitution des formules pour leurs valeurs, dans la colonne HK:HK
rg.Value = rg.Value
'dans la colonne IU,place la formule suivante
'qui identifie le numero de lignes.ceci dans le but de remettre le
tableau àla
'fin dans le meme ordre de tri,en se basant sur cette colonne
rg.Offset(, -1).Formula = "=row()"
'Transforme la formule de la colonne en sa valeur
rg.Offset(, -1).Value = rg.Offset(, -1).Value
'premier tri de la colonne IU pour regrouper les doublons les un avec
les autres
rg.Offset(, -255).Resize(, 256).Sort Key1:=rg(2, 1)
End With
'Boucle qui teste chacune des cellules de la colonnes IU
'selon le choix de l'utilisateur, affecter une lettre au doublon ou
supprimer ces doublons

Do While rg(K + 1, 1).Row < rg.Row + rg.Rows.Count
A = WorksheetFunction.CountIf(rg, rg(K + 1, 1))
If A > 1 Then
'si a>1, il ya doublons

'cette ligne permet de sélectionner la plage ou sont les doublons pour
permettre à l'utilisateur
'de les visionner
Application.GoTo Range("A" & rg(K + 1, 1).Offset(-2).Row), True
rg(K + 1, 1).Resize(A).EntireRow.Select
'le message d'alerte
If MsgBox("il y a des " & A - 1 & " doublon(s) dans la ligne" _
& rg(K + 1).Row & "." & vbCrLf & vbCrLf & _
"désirez vous écraser cette ligne ? ", _
vbCritical + vbYesNo, "Doublons") = vbYes Then

rg(K + 1).EntireRow.ClearContents

Merci d'avance







Avatar
jps
:-)))))))))))))))))
ah! ce tabarouette de twinley : l'en manque pas une...
jps

"twinley" a écrit dans le message de
news:%
Bonjour,

c'est une macro pour éviter les doublons de fil que tu devrais mettre au
point...

à+twinley

Bonjour,

La macro de michdenis, me permet de detecter des doublons, quand
j'importe


des données sur feuille, la macro se lance et permet de verifier les
différents doublons suivant la combinaisons de 5 colonnes.

le probleme est que je souhaite, si un doublon est détecté lors de
l'import


écraser la ligne déja existante quand je repond oui au message(desirez
vous


ecraser la ligne?).

J'ai essayé de faire une modif, mais le probleme par exemple, quand sur
ma


ligne 15 j'ai une ligne , et quand je vient faire l'import de la meme
ligne


j'ai la macro qui se lance , je choisit oui dans mon message: désirez
vous


écraser la ligne.
La ligne est effacé mais pas écrasé à la meme ligne, c'est a dire que je
me


retrouve avec la ligne 15 à vide et la ligne 16 avec les bonnes données.

Savez vous comment faire pour écraser cette ligne 15, si le doublon est
détecté.
c'est a dire avoir les nouvelle données sur la ligne 15.(ecraser
l'ancienne


donnée)

ci-joint l'aperçu de la macro:
Sub doublons()
Dim K As Integer, A As Integer
Dim rg As Range, P As Integer
Dim NomFeuille As String

NomFeuille = "Feuil1" 'à déterminer

Application.EnableEvents = False
'Concatenation des colonnes D, E, H, I, P dans la colonne IV
With Worksheets(NomFeuille)
Set rg = .Range("IV15:IV400")
rg.FormulaLocal = _
"=" & UCase(.Range("$D15").Address(0, 0)) & _
"&" & UCase(.Range("$E15").Address(0, 0)) & "&" _
& UCase(.Range("$H15").Address(0, 0)) _
& "&" & UCase(.Range("$I15").Address(0, 0)) & _
"&" & UCase(.Range("$P15").Address(0, 0))
'substitution des formules pour leurs valeurs, dans la colonne HK:HK
rg.Value = rg.Value
'dans la colonne IU,place la formule suivante
'qui identifie le numero de lignes.ceci dans le but de remettre le
tableau àla
'fin dans le meme ordre de tri,en se basant sur cette colonne
rg.Offset(, -1).Formula = "=row()"
'Transforme la formule de la colonne en sa valeur
rg.Offset(, -1).Value = rg.Offset(, -1).Value
'premier tri de la colonne IU pour regrouper les doublons les un
avec


les autres
rg.Offset(, -255).Resize(, 256).Sort Key1:=rg(2, 1)
End With
'Boucle qui teste chacune des cellules de la colonnes IU
'selon le choix de l'utilisateur, affecter une lettre au doublon ou
supprimer ces doublons

Do While rg(K + 1, 1).Row < rg.Row + rg.Rows.Count
A = WorksheetFunction.CountIf(rg, rg(K + 1, 1))
If A > 1 Then
'si a>1, il ya doublons

'cette ligne permet de sélectionner la plage ou sont les doublons
pour


permettre à l'utilisateur
'de les visionner
Application.GoTo Range("A" & rg(K + 1, 1).Offset(-2).Row), True
rg(K + 1, 1).Resize(A).EntireRow.Select
'le message d'alerte
If MsgBox("il y a des " & A - 1 & " doublon(s) dans la ligne" _
& rg(K + 1).Row & "." & vbCrLf & vbCrLf & _
"désirez vous écraser cette ligne ? ", _
vbCritical + vbYesNo, "Doublons") = vbYes Then

rg(K + 1).EntireRow.ClearContents

Merci d'avance




Avatar
jps
arrête de jouer au con, rick.... aujourd'hui, c'est férié et personne ne
travaille, même pas michel à qui, j'espère, tu n'oublieras pas d'envoyer une
petite spécialité de ton coin (tu peux même l'envoyer deux fois, des fois
que notre québécois aime)
jps

"rick" a écrit dans le message de
news:
je comprend pas ta réponse?

tu sait quelle est la ligne a corrigé pour écraser et non effacer.

merci


Bonjour,

c'est une macro pour éviter les doublons de fil que tu devrais mettre au
point...

à+twinley

Bonjour,

La macro de michdenis, me permet de detecter des doublons, quand
j'importe



des données sur feuille, la macro se lance et permet de verifier les
différents doublons suivant la combinaisons de 5 colonnes.

le probleme est que je souhaite, si un doublon est détecté lors de
l'import



écraser la ligne déja existante quand je repond oui au message(desirez
vous



ecraser la ligne?).

J'ai essayé de faire une modif, mais le probleme par exemple, quand
sur ma



ligne 15 j'ai une ligne , et quand je vient faire l'import de la meme
ligne



j'ai la macro qui se lance , je choisit oui dans mon message: désirez
vous



écraser la ligne.
La ligne est effacé mais pas écrasé à la meme ligne, c'est a dire que
je me



retrouve avec la ligne 15 à vide et la ligne 16 avec les bonnes
données.




Savez vous comment faire pour écraser cette ligne 15, si le doublon
est



détecté.
c'est a dire avoir les nouvelle données sur la ligne 15.(ecraser
l'ancienne



donnée)

ci-joint l'aperçu de la macro:
Sub doublons()
Dim K As Integer, A As Integer
Dim rg As Range, P As Integer
Dim NomFeuille As String

NomFeuille = "Feuil1" 'à déterminer

Application.EnableEvents = False
'Concatenation des colonnes D, E, H, I, P dans la colonne IV
With Worksheets(NomFeuille)
Set rg = .Range("IV15:IV400")
rg.FormulaLocal = _
"=" & UCase(.Range("$D15").Address(0, 0)) & _
"&" & UCase(.Range("$E15").Address(0, 0)) & "&" _
& UCase(.Range("$H15").Address(0, 0)) _
& "&" & UCase(.Range("$I15").Address(0, 0)) & _
"&" & UCase(.Range("$P15").Address(0, 0))
'substitution des formules pour leurs valeurs, dans la colonne
HK:HK



rg.Value = rg.Value
'dans la colonne IU,place la formule suivante
'qui identifie le numero de lignes.ceci dans le but de remettre le
tableau àla
'fin dans le meme ordre de tri,en se basant sur cette colonne
rg.Offset(, -1).Formula = "=row()"
'Transforme la formule de la colonne en sa valeur
rg.Offset(, -1).Value = rg.Offset(, -1).Value
'premier tri de la colonne IU pour regrouper les doublons les un
avec



les autres
rg.Offset(, -255).Resize(, 256).Sort Key1:=rg(2, 1)
End With
'Boucle qui teste chacune des cellules de la colonnes IU
'selon le choix de l'utilisateur, affecter une lettre au doublon ou
supprimer ces doublons

Do While rg(K + 1, 1).Row < rg.Row + rg.Rows.Count
A = WorksheetFunction.CountIf(rg, rg(K + 1, 1))
If A > 1 Then
'si a>1, il ya doublons

'cette ligne permet de sélectionner la plage ou sont les doublons
pour



permettre à l'utilisateur
'de les visionner
Application.GoTo Range("A" & rg(K + 1, 1).Offset(-2).Row), True
rg(K + 1, 1).Resize(A).EntireRow.Select
'le message d'alerte
If MsgBox("il y a des " & A - 1 & " doublon(s) dans la ligne"
_



& rg(K + 1).Row & "." & vbCrLf & vbCrLf & _
"désirez vous écraser cette ligne ? ", _
vbCritical + vbYesNo, "Doublons") = vbYes Then

rg(K + 1).EntireRow.ClearContents

Merci d'avance







Avatar
jps
je n'ai pas dit autre chose, un peu plus rugueusement, certes, mais je suis
un mec, moi, pas un volatile plein de douceur printanière....
jps

"Misange" a écrit dans le message de
news:%
Rick,
vraiment fais un effort pour t'adapter à ce forum s'il te plait.


1 2 3 4