OVH Cloud OVH Cloud

doublons dur dur dur!

8 réponses
Avatar
chris
Bonjour,
Voici mon pb.


11/01/2004 G4455 11A
11/01/2004 G4455 11B
11/01/2004 G4455 11C
11/01/2004 G4455 11A


dans une macro( Private Sub Workbook_BeforeSave)
je ne trouve pas comment dire : Pour une meme année et pour un meme N°
(ex:G4455), je ne peux pas avoir le meme N°(ex:11A) et j'ai 3000 lignes. A
l'enregistrement, qu'il me dise:"attention doublon lignes 4 par exemple.

Merci
--
Cordialement,

8 réponses

Avatar
poy-poy
Bonjour Chris,

Commence par faire un rangement sur tes colonnes en mettant la colonne date,
la colonne numéro et la colonne "11A" comme champs de tri. Puis tu supprimes
les doublons.
je suppose que tes colonnes sont en A, B et C arrange si ce n'est pas cela
Je supprime les lignes entières des donnes concernées, si tu veux juste les
3 colonnes vire le entirerow

Sub doublon()

Dim i As Integer, tablx As Variant, rge As Range, p As Integer

Columns("A:C").Select
Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Key2:=Range("B1") _
, Order2:=xlAscending, Key3:=Range("C1"), Order3:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:= _
xlSortNormal
tablx = Range("A1:C3000")
p = 0

For i = 3000 To 2 Step -1

If tablx(i, 1) = tablx(i - 1, 1) And tablx(i, 2) = tablx(i - 1, 2) And
tablx(i, 3) = tablx(i - 1, 3) Then
If p = 0 Then
Set rge = Cells(i, 1).EntireRow
p = 1
Else
Set rge = Union(rge, Cells(i, 1).EntireRow)
End If
End If
Next i
rge.Delete
End Sub


Cordialement
Benjamin


Bonjour,
Voici mon pb.


11/01/2004 G4455 11A
11/01/2004 G4455 11B
11/01/2004 G4455 11C
11/01/2004 G4455 11A


dans une macro( Private Sub Workbook_BeforeSave)
je ne trouve pas comment dire : Pour une meme année et pour un meme N°
(ex:G4455), je ne peux pas avoir le meme N°(ex:11A) et j'ai 3000 lignes. A
l'enregistrement, qu'il me dise:"attention doublon lignes 4 par exemple.

Merci
--
Cordialement,





Avatar
papou
Bonjour
Un petit tour par ici s'impose :
http://www.excelabo.net/xl/comparer.php
Cordialement
Pascal

"chris" a écrit dans le message de
news:
Bonjour,
Voici mon pb.


11/01/2004 G4455 11A
11/01/2004 G4455 11B
11/01/2004 G4455 11C
11/01/2004 G4455 11A


dans une macro( Private Sub Workbook_BeforeSave)
je ne trouve pas comment dire : Pour une meme année et pour un meme N°
(ex:G4455), je ne peux pas avoir le meme N°(ex:11A) et j'ai 3000 lignes. A
l'enregistrement, qu'il me dise:"attention doublon lignes 4 par exemple.

Merci
--
Cordialement,




Avatar
AV
Pour la plage A2:Cx (A1:C1 = étiquettes de colonnes)

Sub zzz_Sup_L_Doubl()
derL = [A:C].Find("*", , 1, , 1, 2).Row
Range("A1:C" & derL).AdvancedFilter Action:=xlFilterInPlace, Unique:=True
For x = 1 To derL
If Rows(x).EntireRow.Hidden = True Then _
chain = chain & "A" & x & ":" & "C" & x & ","
Next
If chain = "" Then Exit Sub
'mettre ce que l'on veut en lieu et place de ....Select
Range(Left(chain, Len(chain) - 1)).Select
ActiveSheet.ShowAllData
End Sub

AV
Avatar
chris
Merci mais il faut absolument garder cet ordre (sens de la saisie) dons ne
marche pas. De plus je ne connais pas le VBA
Par avance et encore merci

--
Cordialement,

Christophe REINA
Coordonnateur Pôle Tertaire - FOIX
tél:05 61 02 12 22
"AV" a écrit dans le message de
news:uQN$
Pour la plage A2:Cx (A1:C1 = étiquettes de colonnes)

Sub zzz_Sup_L_Doubl()
derL = [A:C].Find("*", , 1, , 1, 2).Row
Range("A1:C" & derL).AdvancedFilter Action:=xlFilterInPlace, Unique:=True
For x = 1 To derL
If Rows(x).EntireRow.Hidden = True Then _
chain = chain & "A" & x & ":" & "C" & x & ","
Next
If chain = "" Then Exit Sub
'mettre ce que l'on veut en lieu et place de ....Select
Range(Left(chain, Len(chain) - 1)).Select
ActiveSheet.ShowAllData
End Sub

AV




Avatar
AV
Merci mais il faut absolument garder cet ordre (sens de la saisie) dons ne
marche pas.


?? je comprends pas vraiment la remarque !
Ce qui t'est proposé est la sélection des doublons donc ça ne modifie
strictement rien
Ca met simplement en valeur !

De plus je ne connais pas le VBA
Ben pour ce type de problème va falloir "y aller" pourtant !


Tu pourrais plus implement faire appel à un format conditionnel qui te
"visualiserait" les doublons !
Regarde un exemple là :

http://cjoint.com/?mdqiDnmelQ

AV

Avatar
michdenis
Bonjour AV,

J'espère que le monsieur n'a pas trop de doublons !

Chain ne peut prendre une valeur plus grande de 255 caractères dans la ligne suivante:

Range(Left(chain, Len(chain) - 1)).Select


Salutations!



"AV" a écrit dans le message de news: uQN$
Pour la plage A2:Cx (A1:C1 = étiquettes de colonnes)

Sub zzz_Sup_L_Doubl()
derL = [A:C].Find("*", , 1, , 1, 2).Row
Range("A1:C" & derL).AdvancedFilter Action:=xlFilterInPlace, Unique:=True
For x = 1 To derL
If Rows(x).EntireRow.Hidden = True Then _
chain = chain & "A" & x & ":" & "C" & x & ","
Next
If chain = "" Then Exit Sub
'mettre ce que l'on veut en lieu et place de ....Select
Range(Left(chain, Len(chain) - 1)).Select
ActiveSheet.ShowAllData
End Sub

AV
Avatar
...patrick
salut,
par un format conditionnel (si données dans colonne A):
en A1:
= nb.si($A$1:$A$3000) > 1 dans la condition 1 et tu mets une couleur qui te
montreras les doublons au fur et à mesure de l'encodage.
et tu copie ce format vers le bas avec le pinceau .

Ciao


...Patrick

"chris" a écrit dans le message de
news:
Bonjour,
Voici mon pb.


11/01/2004 G4455 11A
11/01/2004 G4455 11B
11/01/2004 G4455 11C
11/01/2004 G4455 11A


dans une macro( Private Sub Workbook_BeforeSave)
je ne trouve pas comment dire : Pour une meme année et pour un meme N°
(ex:G4455), je ne peux pas avoir le meme N°(ex:11A) et j'ai 3000 lignes. A
l'enregistrement, qu'il me dise:"attention doublon lignes 4 par exemple.

Merci
--
Cordialement,




Avatar
AV
Chain ne peut prendre une valeur plus grande de 255 caractères dans la ligne
suivante:


Certes, certes mais ça laisse quand même de la marge....d'autant que le
questionneur semble assez muet !
Alors pour supprimer les (très nombreux) doublons de la plage A1:Cx :

Sub zz2()
[A:C].Insert
derL = [D:F].Find("*", , 1, , 1, 2).Row
With Range("D1:F" & derL)
.AdvancedFilter Action:=xlFilterInPlace, Unique:=True
.SpecialCells(xlCellTypeVisible).Copy ([A1])
End With
ActiveSheet.ShowAllData
[D:F].Delete: [A1].Select
End Sub

PS : Mes amitiés à Jean TESTOU
;-)
AV