OVH Cloud OVH Cloud

suppression d'une ligne doublon macro (trois critères)

3 réponses
Avatar
nathphil.montion
Bonjour à tous !

Voici mon problème, j'ai une feuille de données sur laquelle il y a 12
colonnes, les colonnes critères sont : b, g, et i.

J'ai une feuille "données" et une feuille "recherches" qui contiennent
les mêmes données.

Sur la feuille "recherches", une macro permet de copier une ligne et
de l'envoyer dans un formulaire (encore une autre feuille), certaines
colonnes de la ligne sont ainsi complétées, mais pas forcément toutes.
(Ce fichier excel est partagé entre 10 personnes, aussi je ne peux pas
permettre de couper la ligne au lieu de copier car je fausse les
données pour les autres.)

La ligne est ensuite renvoyée (à l'aide d'une macro) dans les feuilles
"données" et "recherches" et se place à la suite de la dernière
entrée, mais elle devient un doublon (forcément la ligne qui a été
copiée au départ est toujours là mais il faut maintenant la supprimer
car elle n'est plus complète.

Ce que je souhaite faire c'est comparer à l'aide d'une macro (car cela
doit se faire systématiquement et automatiquement) les trois colonnes
b, g, et i pour retrouver les doublons et supprimer l'ancienne ligne
pour les deux feuilles.

J'ai bidouiller comme j'ai pu, mais je ne trouve pas de solutions,
quelqu'un peut-il m'aider ?

Par avance, merci !!!!!!

Nathalie

3 réponses

Avatar
michdenis
Bonjour Nathalie,

Voici ! J'ai utilisé le filtre élaboré.

J'utilise temporairement la colonne "X" et les cellules Z1:Z2 pour les critères. Si ces cellules ne sont pas
disponibles, il faut les remplaces dans la procédure, il en est de même pour la colonne X.

La ligne 1 doit avoir des étiquettes de colonnes.
J'ai supposé que les données débutaient en ligne 2

Copie ceci dans un module standard, et teste là.

'-----------------------
Sub MettreAJourLes2Feuilles()

Dim Lig As Long, Rg As Range
Dim Arr()
Arr = Array("Recherches", "Données")

For Each N In Arr
With Worksheets(N)
Lig = .Cells.Find("*", , xlFormulas, , _
xlByRows, xlPrevious).Row

'Zone de critère : Z1:Z2 'à adapter au besoin
.Range("Z1") = ""
.Range("Z2").Formula = "=countif(" & _
.Range("X1:X" & Lig).Address(0, 0) & ",X2)>1"

.Range("X1:X" & Lig).Formula = "±&G1&I1"

With .Range("X1:X" & Lig)
Set Rg = .Offset(1).Resize(.Rows.Count - 1)
.AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Worksheets(N).Range("Z1:Z2"), _
Unique:=True
On Error Resume Next
Set Rg = Rg.SpecialCells(xlCellTypeVisible)
Rg.EntireRow.Delete (xlUp)
End With
.ShowAllData
.Range("X1:X" & Lig).Clear
.Range("Z2").Clear
End With
Next
Set Rg = Nothing
End Sub
'----------------------------


Salutations!




"Nathalie" a écrit dans le message de
news:
Bonjour à tous !

Voici mon problème, j'ai une feuille de données sur laquelle il y a 12
colonnes, les colonnes critères sont : b, g, et i.

J'ai une feuille "données" et une feuille "recherches" qui contiennent
les mêmes données.

Sur la feuille "recherches", une macro permet de copier une ligne et
de l'envoyer dans un formulaire (encore une autre feuille), certaines
colonnes de la ligne sont ainsi complétées, mais pas forcément toutes.
(Ce fichier excel est partagé entre 10 personnes, aussi je ne peux pas
permettre de couper la ligne au lieu de copier car je fausse les
données pour les autres.)

La ligne est ensuite renvoyée (à l'aide d'une macro) dans les feuilles
"données" et "recherches" et se place à la suite de la dernière
entrée, mais elle devient un doublon (forcément la ligne qui a été
copiée au départ est toujours là mais il faut maintenant la supprimer
car elle n'est plus complète.

Ce que je souhaite faire c'est comparer à l'aide d'une macro (car cela
doit se faire systématiquement et automatiquement) les trois colonnes
b, g, et i pour retrouver les doublons et supprimer l'ancienne ligne
pour les deux feuilles.

J'ai bidouiller comme j'ai pu, mais je ne trouve pas de solutions,
quelqu'un peut-il m'aider ?

Par avance, merci !!!!!!

Nathalie
Avatar
nathphil.montion
Salut !

Merci pour ta réponse très rapide, J'ai fait ce que tu m'as dit mais
j'ai un message d'erreur qui se déclenche ici :

"Lig = .Cells.Find("*", , xlFormulas, , _
xlByRows, xlPrevious).Row"


et qui dit "Variable objet ou Variable de bloc With non définie "
erreur 91

Je ne maîtrise pas trop le language pour le corriger, peux-tu faire
quelque chose ?

Par avance, merci !!


"michdenis" wrote in message news:<#...
Bonjour Nathalie,

Voici ! J'ai utilisé le filtre élaboré.

J'utilise temporairement la colonne "X" et les cellules Z1:Z2 pour les critères. Si ces cellules ne sont pas
disponibles, il faut les remplaces dans la procédure, il en est de même pour la colonne X.

La ligne 1 doit avoir des étiquettes de colonnes.
J'ai supposé que les données débutaient en ligne 2

Copie ceci dans un module standard, et teste là.

'-----------------------
Sub MettreAJourLes2Feuilles()

Dim Lig As Long, Rg As Range
Dim Arr()
Arr = Array("Recherches", "Données")

For Each N In Arr
With Worksheets(N)
Lig = .Cells.Find("*", , xlFormulas, , _
xlByRows, xlPrevious).Row

'Zone de critère : Z1:Z2 'à adapter au besoin
.Range("Z1") = ""
.Range("Z2").Formula = "=countif(" & _
.Range("X1:X" & Lig).Address(0, 0) & ",X2)>1"

.Range("X1:X" & Lig).Formula = "±&G1&I1"

With .Range("X1:X" & Lig)
Set Rg = .Offset(1).Resize(.Rows.Count - 1)
.AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Worksheets(N).Range("Z1:Z2"), _
Unique:=True
On Error Resume Next
Set Rg = Rg.SpecialCells(xlCellTypeVisible)
Rg.EntireRow.Delete (xlUp)
End With
.ShowAllData
.Range("X1:X" & Lig).Clear
.Range("Z2").Clear
End With
Next
Set Rg = Nothing
End Sub
'----------------------------


Salutations!




"Nathalie" a écrit dans le message de
news:
Bonjour à tous !

Voici mon problème, j'ai une feuille de données sur laquelle il y a 12
colonnes, les colonnes critères sont : b, g, et i.

J'ai une feuille "données" et une feuille "recherches" qui contiennent
les mêmes données.

Sur la feuille "recherches", une macro permet de copier une ligne et
de l'envoyer dans un formulaire (encore une autre feuille), certaines
colonnes de la ligne sont ainsi complétées, mais pas forcément toutes.
(Ce fichier excel est partagé entre 10 personnes, aussi je ne peux pas
permettre de couper la ligne au lieu de copier car je fausse les
données pour les autres.)

La ligne est ensuite renvoyée (à l'aide d'une macro) dans les feuilles
"données" et "recherches" et se place à la suite de la dernière
entrée, mais elle devient un doublon (forcément la ligne qui a été
copiée au départ est toujours là mais il faut maintenant la supprimer
car elle n'est plus complète.

Ce que je souhaite faire c'est comparer à l'aide d'une macro (car cela
doit se faire systématiquement et automatiquement) les trois colonnes
b, g, et i pour retrouver les doublons et supprimer l'ancienne ligne
pour les deux feuilles.

J'ai bidouiller comme j'ai pu, mais je ne trouve pas de solutions,
quelqu'un peut-il m'aider ?

Par avance, merci !!!!!!

Nathalie


Avatar
michdenis
Bonsoir Natalie,

Tu obtiens cette erreur parce tu t'entêtes à faire fonctionner cette procédure sur une feuille totalement "blanche"
aucune données ... même pas une étiquette de colonne sur la feuille.

Essaie plutôt ce code :

'------------------------------
Sub MettreAJourLes2Feuilles()

Dim Lig As Long, Rg As Range
Dim Arr()
'Arr = Array("Recherches", "Données")

For Each N In Arr
With Worksheets(N)
On Error Resume Next
Lig = .Cells.Find("*", , xlFormulas, , _
xlByRows, xlPrevious).Row
If Err <> 0 Then
On Error GoTo 0
Exit Sub
End If

'Zone de critère : Z1:Z2 'à adapter au besoin
.Range("Z1") = ""
.Range("Z2").Formula = "=countif(" & _
.Range("X1:X" & Lig).Address(0, 0) & ",X2)>1"

.Range("X1:X" & Lig).Formula = "±&G1&I1"
.Range("X1:X" & Lig).Value = .Range("X1:X" & Lig).Value
With .Range("X1:X" & Lig)
Set Rg = .Offset(1).Resize(.Rows.Count - 1)
.AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Worksheets(N).Range("Z1:Z2"), _
Unique:=True
On Error Resume Next
Set Rg = Rg.SpecialCells(xlCellTypeVisible)
Rg.EntireRow.Delete (xlUp)
End With
.ShowAllData
.Range("X1:X" & Lig).Clear
.Range("Z2").Clear
End With
Next
Set Rg = Nothing
End Sub
'------------------------------


Salutations!





"Nathalie" a écrit dans le message de
news:
Salut !

Merci pour ta réponse très rapide, J'ai fait ce que tu m'as dit mais
j'ai un message d'erreur qui se déclenche ici :

"Lig = .Cells.Find("*", , xlFormulas, , _
xlByRows, xlPrevious).Row"


et qui dit "Variable objet ou Variable de bloc With non définie "
erreur 91

Je ne maîtrise pas trop le language pour le corriger, peux-tu faire
quelque chose ?

Par avance, merci !!


"michdenis" wrote in message news:<#...
Bonjour Nathalie,

Voici ! J'ai utilisé le filtre élaboré.

J'utilise temporairement la colonne "X" et les cellules Z1:Z2 pour les critères. Si ces cellules ne sont pas
disponibles, il faut les remplaces dans la procédure, il en est de même pour la colonne X.

La ligne 1 doit avoir des étiquettes de colonnes.
J'ai supposé que les données débutaient en ligne 2

Copie ceci dans un module standard, et teste là.

'-----------------------
Sub MettreAJourLes2Feuilles()

Dim Lig As Long, Rg As Range
Dim Arr()
Arr = Array("Recherches", "Données")

For Each N In Arr
With Worksheets(N)
Lig = .Cells.Find("*", , xlFormulas, , _
xlByRows, xlPrevious).Row

'Zone de critère : Z1:Z2 'à adapter au besoin
.Range("Z1") = ""
.Range("Z2").Formula = "=countif(" & _
.Range("X1:X" & Lig).Address(0, 0) & ",X2)>1"

.Range("X1:X" & Lig).Formula = "±&G1&I1"

With .Range("X1:X" & Lig)
Set Rg = .Offset(1).Resize(.Rows.Count - 1)
.AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Worksheets(N).Range("Z1:Z2"), _
Unique:=True
On Error Resume Next
Set Rg = Rg.SpecialCells(xlCellTypeVisible)
Rg.EntireRow.Delete (xlUp)
End With
.ShowAllData
.Range("X1:X" & Lig).Clear
.Range("Z2").Clear
End With
Next
Set Rg = Nothing
End Sub
'----------------------------


Salutations!




"Nathalie" a écrit dans le message de
news:
Bonjour à tous !

Voici mon problème, j'ai une feuille de données sur laquelle il y a 12
colonnes, les colonnes critères sont : b, g, et i.

J'ai une feuille "données" et une feuille "recherches" qui contiennent
les mêmes données.

Sur la feuille "recherches", une macro permet de copier une ligne et
de l'envoyer dans un formulaire (encore une autre feuille), certaines
colonnes de la ligne sont ainsi complétées, mais pas forcément toutes.
(Ce fichier excel est partagé entre 10 personnes, aussi je ne peux pas
permettre de couper la ligne au lieu de copier car je fausse les
données pour les autres.)

La ligne est ensuite renvoyée (à l'aide d'une macro) dans les feuilles
"données" et "recherches" et se place à la suite de la dernière
entrée, mais elle devient un doublon (forcément la ligne qui a été
copiée au départ est toujours là mais il faut maintenant la supprimer
car elle n'est plus complète.

Ce que je souhaite faire c'est comparer à l'aide d'une macro (car cela
doit se faire systématiquement et automatiquement) les trois colonnes
b, g, et i pour retrouver les doublons et supprimer l'ancienne ligne
pour les deux feuilles.

J'ai bidouiller comme j'ai pu, mais je ne trouve pas de solutions,
quelqu'un peut-il m'aider ?

Par avance, merci !!!!!!

Nathalie