OVH Cloud OVH Cloud

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
Clément Marcotte
ARRANGE TOI TOUT SEUL ET VA-T-EN AU DIABLE MAUDIT PARASITE.

--
On apprend pas à un vieux singe à faire des grimaces
"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
rick
Bonjour michdenis,

déja merci beaucoup, et sinon je commence a comprendre la macro des doublons.
au fait j'ai par exemple:

sur la ligne 15 : j'ai des données sur les differentes colonnes
et j'importe mes données d'un autre tableau qui viendront se mettre sur la
ligne en dessous c'est a dire a partir de la ligne 16, c'est la que la macro
des doublons se lance
supposant que la donnée importé est sur une ligne.
en lancant la macro des doublons je m'apercoit qu'il ya des doublons de la
ligne 15 et 16.
J'ai donc le message qui s'affiche "doublons detecté: souhaitez vous ecraser
la ligne 15. "

si je repond oui, par rapport au code(ou j'ai apporté la modif), j'ai ma
ligne 15 qui s'efface, et donc j'aurai ma ligne 15 vierge et la donnée
importé sur ma ligne 16.
La macro fait tres bien son travail, mais je souhaite ne pas avoir la ligne
15 vierge, je souhaite ecraser cette ligne 15 par la ligne 16.

du coup j'aurai la ligne 16 qui a etait importé et qui remplacera la ligne
15 existante.
soit au final avoir juste la ligne 15 renseigné.puisque j'ecrase la donnee
existante.
je bloque un peu?
je sait que la modif doit se faire sur cette ligne de macro:
rg(K + 1).EntireRow.ClearContents


mais je n'y arrive pas
as tu une idée?
merci d'avance pour ton aide.


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
Bonjour Rick,

Je te donne un exemple :

Lundi : tu entres 5 lignes de données. De ces lignes, 2 lignes sont identiques selon tes critères retenus

Mardi, tu entres 5 autres lignes de données, 1 ligne est identique aux 2 lignes identiques du Lundi

Mercredi, tu entres 5 nouvelles lignes de doublons, 1 autre ligne est identique aux 3 autres.

Si Mercredi soir tu décides d'exécuter la procédure, tu obtiendras 4 doublons. La question comment savoir lequels des doublons
représentent seulement ceux que tu as entrés le mercredi. Ce que je veux tu comprennes, c'est que la procédure ne fait pas de
discrimination pour savoir quand cette donnée a été saisie ce n'était d'ailleurs pas un de tes critères. Comment faire alors pour
supprimer seulement les doublons du Lundi et du mardi pour ne conserver ceux du Mercredi.

Pour ce qui est de la réponse que tu cherches, tu dois apprendre à faire la différence entre effacer des données et supprimer la
lignes des données. Regarde et observe sur un tableau de données, l'effet des commandes suivantes à partir du menu Édition /
supprimer / et la commande Effacer / tout / format ...

En vba
rg(K + 1).EntireRow.ClearContents -> efface les données seulement
rg(K + 1).EntireRow.Clear -> efface les données & le format de cellule
rg(K + 1).EntireRow.delete -> supprime la ligne des données
C'est celle que tu as de besoin !


P.S. C'était ma dernière intervention sur cette procédure. Nul besoin à l'avenir d'insérer mon nom (pseudonyme) dans l'énoncé de ta
question. Ici, les questions s'adressent à tous.


Salutations!




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

déja merci beaucoup, et sinon je commence a comprendre la macro des doublons.
au fait j'ai par exemple:

sur la ligne 15 : j'ai des données sur les differentes colonnes
et j'importe mes données d'un autre tableau qui viendront se mettre sur la
ligne en dessous c'est a dire a partir de la ligne 16, c'est la que la macro
des doublons se lance
supposant que la donnée importé est sur une ligne.
en lancant la macro des doublons je m'apercoit qu'il ya des doublons de la
ligne 15 et 16.
J'ai donc le message qui s'affiche "doublons detecté: souhaitez vous ecraser
la ligne 15. "

si je repond oui, par rapport au code(ou j'ai apporté la modif), j'ai ma
ligne 15 qui s'efface, et donc j'aurai ma ligne 15 vierge et la donnée
importé sur ma ligne 16.
La macro fait tres bien son travail, mais je souhaite ne pas avoir la ligne
15 vierge, je souhaite ecraser cette ligne 15 par la ligne 16.

du coup j'aurai la ligne 16 qui a etait importé et qui remplacera la ligne
15 existante.
soit au final avoir juste la ligne 15 renseigné.puisque j'ecrase la donnee
existante.
je bloque un peu?
je sait que la modif doit se faire sur cette ligne de macro:
rg(K + 1).EntireRow.ClearContents


mais je n'y arrive pas
as tu une idée?
merci d'avance pour ton aide.


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
rick
je connait bien michdenis, ces code en vba.
rg(K + 1).EntireRow.ClearContents -> efface les données seulement
rg(K + 1).EntireRow.Clear -> efface les données & le format de cellule
rg(K + 1).EntireRow.delete -> supprime la ligne des données

j'ai d'ailleurs utiliser

rg(K + 1).EntireRow.ClearContents

je ne peux pas utiliser
rg(K + 1).EntireRow.delete
car quand je l'utilise cela peut fonctionner mais comme dans mon
classeur,j'ai une autre feuille qui a des formules par rapport a la feuille
1, donc si j'utilise .delete
j'aurai des #REF! sur ma feuille 2

je souhaite juste écraser la valeur, suppose que j'ai dans ligne 15 des
données.
et quand j'importe une autre ligne elle fait doublons avec la ligne 15, donc
je souhaite écraser la ligne 15 et mettre le ligne 16 à la 15.

en utilisant delete, dans ma feuille 2 j'ai des #ref!!

merci d'avance



Bonjour Rick,

Je te donne un exemple :

Lundi : tu entres 5 lignes de données. De ces lignes, 2 lignes sont identiques selon tes critères retenus

Mardi, tu entres 5 autres lignes de données, 1 ligne est identique aux 2 lignes identiques du Lundi

Mercredi, tu entres 5 nouvelles lignes de doublons, 1 autre ligne est identique aux 3 autres.

Si Mercredi soir tu décides d'exécuter la procédure, tu obtiendras 4 doublons. La question comment savoir lequels des doublons
représentent seulement ceux que tu as entrés le mercredi. Ce que je veux tu comprennes, c'est que la procédure ne fait pas de
discrimination pour savoir quand cette donnée a été saisie ce n'était d'ailleurs pas un de tes critères. Comment faire alors pour
supprimer seulement les doublons du Lundi et du mardi pour ne conserver ceux du Mercredi.

Pour ce qui est de la réponse que tu cherches, tu dois apprendre à faire la différence entre effacer des données et supprimer la
lignes des données. Regarde et observe sur un tableau de données, l'effet des commandes suivantes à partir du menu Édition /
supprimer / et la commande Effacer / tout / format ...

En vba
rg(K + 1).EntireRow.ClearContents -> efface les données seulement
rg(K + 1).EntireRow.Clear -> efface les données & le format de cellule
rg(K + 1).EntireRow.delete -> supprime la ligne des données
C'est celle que tu as de besoin !


P.S. C'était ma dernière intervention sur cette procédure. Nul besoin à l'avenir d'insérer mon nom (pseudonyme) dans l'énoncé de ta
question. Ici, les questions s'adressent à tous.


Salutations!




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

déja merci beaucoup, et sinon je commence a comprendre la macro des doublons.
au fait j'ai par exemple:

sur la ligne 15 : j'ai des données sur les differentes colonnes
et j'importe mes données d'un autre tableau qui viendront se mettre sur la
ligne en dessous c'est a dire a partir de la ligne 16, c'est la que la macro
des doublons se lance
supposant que la donnée importé est sur une ligne.
en lancant la macro des doublons je m'apercoit qu'il ya des doublons de la
ligne 15 et 16.
J'ai donc le message qui s'affiche "doublons detecté: souhaitez vous ecraser
la ligne 15. "

si je repond oui, par rapport au code(ou j'ai apporté la modif), j'ai ma
ligne 15 qui s'efface, et donc j'aurai ma ligne 15 vierge et la donnée
importé sur ma ligne 16.
La macro fait tres bien son travail, mais je souhaite ne pas avoir la ligne
15 vierge, je souhaite ecraser cette ligne 15 par la ligne 16.

du coup j'aurai la ligne 16 qui a etait importé et qui remplacera la ligne
15 existante.
soit au final avoir juste la ligne 15 renseigné.puisque j'ecrase la donnee
existante.
je bloque un peu?
je sait que la modif doit se faire sur cette ligne de macro:
rg(K + 1).EntireRow.ClearContents


mais je n'y arrive pas
as tu une idée?
merci d'avance pour ton aide.


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
AV
P.S. C'était ma dernière intervention sur cette procédure.


Pffff....
Quelle déception m'envahit, me submerge, de ne point pouvoir suivre ce
passionnant "feuilleton" !
;-)
Allez, courage Denis, ça n'est qu'un petit coup de blues passager.... à moins
que ce ne soit à la suite de la relecture du mythe de Sisyphe ou de celui du
tonneau des Danaïdes ??
;-))
AV qui pense que la mythologie a déjà tout raconté




Nul besoin à l'avenir d'insérer mon nom (pseudonyme) dans l'énoncé de ta
question. Ici, les questions s'adressent à tous.


Salutations!




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


Bonjour michdenis,

déja merci beaucoup, et sinon je commence a comprendre la macro des doublons.
au fait j'ai par exemple:

sur la ligne 15 : j'ai des données sur les differentes colonnes
et j'importe mes données d'un autre tableau qui viendront se mettre sur la
ligne en dessous c'est a dire a partir de la ligne 16, c'est la que la macro
des doublons se lance
supposant que la donnée importé est sur une ligne.
en lancant la macro des doublons je m'apercoit qu'il ya des doublons de la
ligne 15 et 16.
J'ai donc le message qui s'affiche "doublons detecté: souhaitez vous ecraser
la ligne 15. "

si je repond oui, par rapport au code(ou j'ai apporté la modif), j'ai ma
ligne 15 qui s'efface, et donc j'aurai ma ligne 15 vierge et la donnée
importé sur ma ligne 16.
La macro fait tres bien son travail, mais je souhaite ne pas avoir la ligne
15 vierge, je souhaite ecraser cette ligne 15 par la ligne 16.

du coup j'aurai la ligne 16 qui a etait importé et qui remplacera la ligne
15 existante.
soit au final avoir juste la ligne 15 renseigné.puisque j'ecrase la donnee
existante.
je bloque un peu?
je sait que la modif doit se faire sur cette ligne de macro:
rg(K + 1).EntireRow.ClearContents


mais je n'y arrive pas
as tu une idée?
merci d'avance pour ton aide.


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
Misange
je sait que la modif doit se faire sur cette ligne de macro:
rg(K + 1).EntireRow.ClearContents



Tu ne comprends toujours pas pourquoi personne ne veux plus t'aider Rick
? Ton "je sait" (faute d'orthographe = copyright
Urgent-testou-Hali-Phil-Rick qui ne se connaissent pas entre eux) puis le
mais je n'y arrive pas
as tu une idée?
Ont de quoi désespérer ceux qui ont essayé de t'aider. C'est comme s'il

n'y avait que toi au monde.

La seule chose que tu veux c'est qu'on t'écrive tes macros et que
celles-ci fassent exactement ce que tu as demandé, pour le N° de ligne
que tu veux et pas une autre. Rien d'autre ne t'intéresse, les conseils
que les uns et les autres ont essayé de te donner pour t'aider ne
t'intéressent absolument pas. Tu n'as même pas un mot pour signifier que
tu les as lus.
Tu n'as toujours pas compris quel était l'esprit de ce forum, la notion
d'AIDE t'est inaccessible, tu veux juste qu'on te FOURNISSE. Tu n'as
même pas daigné utiliser les outils qu'on te recommandait pour suivre le
forum de façon plus efficace et conviviale.
Il y a de quoi dégouter les plus acharnés.

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


Avatar
Clément Marcotte
je comprend pas ta réponse?


T'es rien qu'un maudit hypocrite, plus hypocrite que le plus bandit
des politiciens.

--
On apprend pas à un vieux singe à faire des grimaces

Avatar
jps
pauvre flo
je crains bien que tu ne perdes ton temps car rick, peut-être parce que ça
rime avec brique, est réfractaire... même de denis, il se fout : notre
pourtant dévoué et brillant québécois lui a-t-il pas demandé de supprimer
son pseudo de l'objet du message? quand on sait utiliser 40000 pseudos, on
doit savoir changer un objet...regardez, moi je suis bien parvenu à le
faire...
nul doute que de tels comportements vous usent, pas au point d'abréger ma
vie, j'espère
jps

"Misange" a écrit dans le message de
news:

je sait que la modif doit se faire sur cette ligne de macro:
rg(K + 1).EntireRow.ClearContents



Tu ne comprends toujours pas pourquoi personne ne veux plus t'aider Rick
? Ton "je sait" (faute d'orthographe = copyright
Urgent-testou-Hali-Phil-Rick qui ne se connaissent pas entre eux) puis le
mais je n'y arrive pas
as tu une idée?
Ont de quoi désespérer ceux qui ont essayé de t'aider. C'est comme s'il

n'y avait que toi au monde.

La seule chose que tu veux c'est qu'on t'écrive tes macros et que
celles-ci fassent exactement ce que tu as demandé, pour le N° de ligne
que tu veux et pas une autre. Rien d'autre ne t'intéresse, les conseils
que les uns et les autres ont essayé de te donner pour t'aider ne
t'intéressent absolument pas. Tu n'as même pas un mot pour signifier que
tu les as lus.
Tu n'as toujours pas compris quel était l'esprit de ce forum, la notion
d'AIDE t'est inaccessible, tu veux juste qu'on te FOURNISSE. Tu n'as
même pas daigné utiliser les outils qu'on te recommandait pour suivre le
forum de façon plus efficace et conviviale.
Il y a de quoi dégouter les plus acharnés.

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





Avatar
twinley
ouaip...Je repart sur la pointe des pieds.

à+twinley

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
arrête avec tes pléonasmes, clément
jps

"Clément Marcotte" a écrit dans le message
de news:
le plus bandit des politiciens.


1 2 3 4