OVH Cloud OVH Cloud

Suppression de doublons sur une sélection et ...

21 réponses
Avatar
garnote
Bonjour,

Je sélectionne une plage simple contenant (exemple ) :

1 2 3 _ _

8 7 9 1 _

4 5 6 7 8

Les _ représentant des cellules vides.

Par macro, je veux éliminer tous les doublons
et obtenir comme nouvelle plage :

2 3 _ _ _

9 _ _ _ _

4 5 6 _ _

Doit pouvoir se généraliser pour une plage quelconque
dont chaque ligne commence par une série de nombres
suivi de cellules vides.La dernière ligne ne contient
jamais de cellules vides.

Serge

10 réponses

1 2 3
Avatar
garnote
Avec coder(Texte, Clé)
Mais j''ai l'impression que certains caractères sont
dénaturés suite à un copier-coller
o?¾ÌÍyźyɾ˿¾¼ÍÂÈÇyÆCƾyz

Serge


"isabelle" a écrit dans le message de news: %
tu l'as codée avec =coder(Texte, Clé) ou bien celle de Thierry William ou autre ?
isabelle

garnote a écrit :
Merci Isabelle,

o?¾ÌÍyźyɾ˿¾¼ÍÂÈÇyÆCƾyz

clé: 89

A--

Serge




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

salut Serge,

Sub Isa1()
Application.ScreenUpdating = False
Set ici = Selection
NL = ici.Rows.Count
For Each c In ici
If Application.CountIf(ici, c) > 1 Then
c.Offset(NL + 1, 0) = ""
Else
c1 = ici.Item(1).Column
c2 = ici.Item(ici.Count).Column
x = Application.CountA(Range(Cells(c.Row + NL + 1, c1), Cells(c.Row + NL + 1, c2)))
Cells(c.Row + NL + 1, c1 + x) = c
End If
Next c
Application.ScreenUpdating = False
End Sub

isabelle

garnote a écrit :

Bonjour,

J'ai modifié un tipeu la macro d'Isabelle et j'obtiens ce que je veux
à partir d'une sélection simple située n'importe où sur la feuille :

Sub Isa1()
Application.ScreenUpdating = False
Set ici = Selection
NL = ici.Rows.Count
For Each c In ici
If Application.CountIf(ici, c) > 1 Then
c.Offset(NL + 1, 0) = ""
Else
c.Offset(NL + 1, 0) = c
End If
Next c
ici.Offset(NL + 1, 0).Select
Set ici = Selection
For i = 1 To ici.Rows.Count
ici.Rows(i).Sort key1:=ici(i, 1), order1:=xlAscending
Next i
Application.ScreenUpdating = True
End Sub

Les données de chaque ligne de la nouvelle plage sont
triées en ordre croissant et c'est bien ainsi.
Maintenant, je voudrais obtenir la même disposition avec
les données dans le même ordre que la plage de départ.
Et là je bloque lamentablement ;-(
Vous avez des idées ?
Voici un exemple :
http://www.cijoint.fr/cjlink.php?file=cj200902/cijPFVG3m0.xls

A--
Serge


Sub Macro1()
Set plage = Selection
Plgn = plage.Item(1).Row
Nlgn = plage.Rows.Count
Dlgn = Plgn + Nlgn - 1

For Each c In plage
If Application.CountIf(plage, c) > 1 Then plage.Replace What:=c,
Replacement:=""
Next c

For i = Plgn To Dlgn
If Application.CountA(Rows(i)) >= 1 Then
Rows(i).Sort Key1:=Range("A" & i), Order1:=xlAscending,
Header:=xlNoGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight, _
DataOption1:=xlSortNormal
End If
Next i
End Sub

Isabelle

.






























"isabelle" a écrit dans le message de news: %


salut Serge,

voilà,

Sub Macro1()
Set plage = Selection
Plgn = plage.Item(1).Row
Nlgn = plage.Rows.Count
Dlgn = Plgn + Nlgn - 1

For Each c In plage
If Application.CountIf(plage, c) > 1 Then plage.Replace What:=c, Replacement:=""
Next c

For i = Plgn To Dlgn
If Application.CountA(Rows(i)) >= 1 Then
Rows(i).Sort Key1:=Range("A" & i), Order1:=xlAscending, Header:=xlNoGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight, _
DataOption1:=xlSortNormal
End If
Next i
End Sub

isabelle

garnote a écrit :


Bonsoir et merci Isabelle,

Mais ça ne fonctionne pas ;-(
Et moi aussi j'avais tâté du CountIf !
Par mise en forme conditionnelle, je peux
jaunir les doublons, mais je voudrais plus.
Voici un autre exemple :
http://www.cijoint.fr/cjlink.php?file=cj200902/cij7l1rE88.xls

Bonsoir, Bonne nuit,
Serge


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



salut Serge,

Sub Macro1()
Set plage = Selection
lgn = plage.Rows.Count
For Each c In plage
If Application.CountIf(plage, c) > 1 Then plage.Replace What:=c, Replacement:=""
Next
For i = 1 To lgn
If Application.CountA(plage.Rows(i)) >= 1 Then
plg = plage.Rows(i).SpecialCells(xlCellTypeConstants, 1).Address
Range(plg).Cut
Range("A" & i).Select
ActiveSheet.Paste
End If
Next
End Sub

isabelle

garnote a écrit :



Bonjour,

Je sélectionne une plage simple contenant (exemple ) :

1 2 3 _ _

8 7 9 1 _

4 5 6 7 8

Les _ représentant des cellules vides.

Par macro, je veux éliminer tous les doublons
et obtenir comme nouvelle plage :

2 3 _ _ _

9 _ _ _ _

4 5 6 _ _

Doit pouvoir se généraliser pour une plage quelconque
dont chaque ligne commence par une série de nombres
suivi de cellules vides.La dernière ligne ne contient
jamais de cellules vides.

Serge





























Avatar
isabelle
garnote a écrit :
Avec coder(Texte, Clé)
Mais j''ai l'impression que certains caractères sont
dénaturés suite à un copier-coller
o?¾ÌÍyźyɾ˿¾¼ÍÂÈÇyÆCƾyz



ouais c'est illisible,

celle-ci passe mieux ?
0.996@ì>B2ì05BìA.;;¶ì1ó9.ì;2642

isabelle
Avatar
garnote
En effet, les deux premiers caractères que je vois
ici sont différents des caractères que je voyais
dans ma cellule.


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

Avec coder(Texte, Clé)
Mais j''ai l'impression que certains caractères sont
dénaturés suite à un copier-coller
o?¾ÌÍyźyɾ˿¾¼ÍÂÈÇyÆCƾyz

Serge


"isabelle" a écrit dans le message de news: %
tu l'as codée avec =coder(Texte, Clé) ou bien celle de Thierry William ou autre ?
isabelle

garnote a écrit :
Merci Isabelle,

o?¾ÌÍyźyɾ˿¾¼ÍÂÈÇyÆCƾyz

clé: 89

A--

Serge




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

salut Serge,

Sub Isa1()
Application.ScreenUpdating = False
Set ici = Selection
NL = ici.Rows.Count
For Each c In ici
If Application.CountIf(ici, c) > 1 Then
c.Offset(NL + 1, 0) = ""
Else
c1 = ici.Item(1).Column
c2 = ici.Item(ici.Count).Column
x = Application.CountA(Range(Cells(c.Row + NL + 1, c1), Cells(c.Row + NL + 1, c2)))
Cells(c.Row + NL + 1, c1 + x) = c
End If
Next c
Application.ScreenUpdating = False
End Sub

isabelle

garnote a écrit :

Bonjour,

J'ai modifié un tipeu la macro d'Isabelle et j'obtiens ce que je veux
à partir d'une sélection simple située n'importe où sur la feuille :

Sub Isa1()
Application.ScreenUpdating = False
Set ici = Selection
NL = ici.Rows.Count
For Each c In ici
If Application.CountIf(ici, c) > 1 Then
c.Offset(NL + 1, 0) = ""
Else
c.Offset(NL + 1, 0) = c
End If
Next c
ici.Offset(NL + 1, 0).Select
Set ici = Selection
For i = 1 To ici.Rows.Count
ici.Rows(i).Sort key1:=ici(i, 1), order1:=xlAscending
Next i
Application.ScreenUpdating = True
End Sub

Les données de chaque ligne de la nouvelle plage sont
triées en ordre croissant et c'est bien ainsi.
Maintenant, je voudrais obtenir la même disposition avec
les données dans le même ordre que la plage de départ.
Et là je bloque lamentablement ;-(
Vous avez des idées ?
Voici un exemple :
http://www.cijoint.fr/cjlink.php?file=cj200902/cijPFVG3m0.xls

A--
Serge


Sub Macro1()
Set plage = Selection
Plgn = plage.Item(1).Row
Nlgn = plage.Rows.Count
Dlgn = Plgn + Nlgn - 1

For Each c In plage
If Application.CountIf(plage, c) > 1 Then plage.Replace What:=c,
Replacement:=""
Next c

For i = Plgn To Dlgn
If Application.CountA(Rows(i)) >= 1 Then
Rows(i).Sort Key1:=Range("A" & i), Order1:=xlAscending,
Header:=xlNoGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight, _
DataOption1:=xlSortNormal
End If
Next i
End Sub

Isabelle

.






























"isabelle" a écrit dans le message de news: %


salut Serge,

voilà,

Sub Macro1()
Set plage = Selection
Plgn = plage.Item(1).Row
Nlgn = plage.Rows.Count
Dlgn = Plgn + Nlgn - 1

For Each c In plage
If Application.CountIf(plage, c) > 1 Then plage.Replace What:=c, Replacement:=""
Next c

For i = Plgn To Dlgn
If Application.CountA(Rows(i)) >= 1 Then
Rows(i).Sort Key1:=Range("A" & i), Order1:=xlAscending, Header:=xlNoGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight, _
DataOption1:=xlSortNormal
End If
Next i
End Sub

isabelle

garnote a écrit :


Bonsoir et merci Isabelle,

Mais ça ne fonctionne pas ;-(
Et moi aussi j'avais tâté du CountIf !
Par mise en forme conditionnelle, je peux
jaunir les doublons, mais je voudrais plus.
Voici un autre exemple :
http://www.cijoint.fr/cjlink.php?file=cj200902/cij7l1rE88.xls

Bonsoir, Bonne nuit,
Serge


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



salut Serge,

Sub Macro1()
Set plage = Selection
lgn = plage.Rows.Count
For Each c In plage
If Application.CountIf(plage, c) > 1 Then plage.Replace What:=c, Replacement:=""
Next
For i = 1 To lgn
If Application.CountA(plage.Rows(i)) >= 1 Then
plg = plage.Rows(i).SpecialCells(xlCellTypeConstants, 1).Address
Range(plg).Cut
Range("A" & i).Select
ActiveSheet.Paste
End If
Next
End Sub

isabelle

garnote a écrit :



Bonjour,

Je sélectionne une plage simple contenant (exemple ) :

1 2 3 _ _

8 7 9 1 _

4 5 6 7 8

Les _ représentant des cellules vides.

Par macro, je veux éliminer tous les doublons
et obtenir comme nouvelle plage :

2 3 _ _ _

9 _ _ _ _

4 5 6 _ _

Doit pouvoir se généraliser pour une plage quelconque
dont chaque ligne commence par une série de nombres
suivi de cellules vides.La dernière ligne ne contient
jamais de cellules vides.

Serge

































Avatar
isabelle
tu poste en texte ou en html ?
isabelle

garnote a écrit :
En effet, les deux premiers caractères que je vois
ici sont différents des caractères que je voyais
dans ma cellule.


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

Avec coder(Texte, Clé)
Mais j''ai l'impression que certains caractères sont
dénaturés suite à un copier-coller
o?¾ÌÍyźyɾ˿¾¼ÍÂÈÇyÆCƾyz

Serge


"isabelle" a écrit dans le message de news: %

tu l'as codée avec =coder(Texte, Clé) ou bien celle de Thierry William ou autre ?
isabelle

garnote a écrit :

Merci Isabelle,

o?¾ÌÍyźyɾ˿¾¼ÍÂÈÇyÆCƾyz

clé: 89

A--

Serge




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


salut Serge,

Sub Isa1()
Application.ScreenUpdating = False
Set ici = Selection
NL = ici.Rows.Count
For Each c In ici
If Application.CountIf(ici, c) > 1 Then
c.Offset(NL + 1, 0) = ""
Else
c1 = ici.Item(1).Column
c2 = ici.Item(ici.Count).Column
x = Application.CountA(Range(Cells(c.Row + NL + 1, c1), Cells(c.Row + NL + 1, c2)))
Cells(c.Row + NL + 1, c1 + x) = c
End If
Next c
Application.ScreenUpdating = False
End Sub

isabelle

garnote a écrit :


Bonjour,

J'ai modifié un tipeu la macro d'Isabelle et j'obtiens ce que je veux
à partir d'une sélection simple située n'importe où sur la feuille :

Sub Isa1()
Application.ScreenUpdating = False
Set ici = Selection
NL = ici.Rows.Count
For Each c In ici
If Application.CountIf(ici, c) > 1 Then
c.Offset(NL + 1, 0) = ""
Else
c.Offset(NL + 1, 0) = c
End If
Next c
ici.Offset(NL + 1, 0).Select
Set ici = Selection
For i = 1 To ici.Rows.Count
ici.Rows(i).Sort key1:=ici(i, 1), order1:=xlAscending
Next i
Application.ScreenUpdating = True
End Sub

Les données de chaque ligne de la nouvelle plage sont
triées en ordre croissant et c'est bien ainsi.
Maintenant, je voudrais obtenir la même disposition avec
les données dans le même ordre que la plage de départ.
Et là je bloque lamentablement ;-(
Vous avez des idées ?
Voici un exemple :
http://www.cijoint.fr/cjlink.php?file=cj200902/cijPFVG3m0.xls

A--
Serge


Sub Macro1()
Set plage = Selection
Plgn = plage.Item(1).Row
Nlgn = plage.Rows.Count
Dlgn = Plgn + Nlgn - 1

For Each c In plage
If Application.CountIf(plage, c) > 1 Then plage.Replace What:=c,
Replacement:=""
Next c

For i = Plgn To Dlgn
If Application.CountA(Rows(i)) >= 1 Then
Rows(i).Sort Key1:=Range("A" & i), Order1:=xlAscending,
Header:=xlNoGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight, _
DataOption1:=xlSortNormal
End If
Next i
End Sub

Isabelle

.






























"isabelle" a écrit dans le message de news: %



salut Serge,

voilà,

Sub Macro1()
Set plage = Selection
Plgn = plage.Item(1).Row
Nlgn = plage.Rows.Count
Dlgn = Plgn + Nlgn - 1

For Each c In plage
If Application.CountIf(plage, c) > 1 Then plage.Replace What:=c, Replacement:=""
Next c

For i = Plgn To Dlgn
If Application.CountA(Rows(i)) >= 1 Then
Rows(i).Sort Key1:=Range("A" & i), Order1:=xlAscending, Header:=xlNoGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlLeftToRight, _
DataOption1:=xlSortNormal
End If
Next i
End Sub

isabelle

garnote a écrit :



Bonsoir et merci Isabelle,

Mais ça ne fonctionne pas ;-(
Et moi aussi j'avais tâté du CountIf !
Par mise en forme conditionnelle, je peux
jaunir les doublons, mais je voudrais plus.
Voici un autre exemple :
http://www.cijoint.fr/cjlink.php?file=cj200902/cij7l1rE88.xls

Bonsoir, Bonne nuit,
Serge


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




salut Serge,

Sub Macro1()
Set plage = Selection
lgn = plage.Rows.Count
For Each c In plage
If Application.CountIf(plage, c) > 1 Then plage.Replace What:=c, Replacement:=""
Next
For i = 1 To lgn
If Application.CountA(plage.Rows(i)) >= 1 Then
plg = plage.Rows(i).SpecialCells(xlCellTypeConstants, 1).Address
Range(plg).Cut
Range("A" & i).Select
ActiveSheet.Paste
End If
Next
End Sub

isabelle

garnote a écrit :




Bonjour,

Je sélectionne une plage simple contenant (exemple ) :

1 2 3 _ _

8 7 9 1 _

4 5 6 7 8

Les _ représentant des cellules vides.

Par macro, je veux éliminer tous les doublons
et obtenir comme nouvelle plage :

2 3 _ _ _

9 _ _ _ _

4 5 6 _ _

Doit pouvoir se généraliser pour une plage quelconque
dont chaque ligne commence par une série de nombres
suivi de cellules vides.La dernière ligne ne contient
jamais de cellules vides.

Serge



































Avatar
isabelle
y'a toujours rien de lisible,
envoie moi ton fichier
mon adresse : http://cjoint.com/?czsuFH0ZGQ.

isabelle


garnote a écrit :
Voici le même en html :
œ€¾ÌÍyźyɾ˿¾¼ÍÂÈÇyÆCƾyz

¬¾ËÀ¾



"isabelle" <mailto: a écrit dans le message de news:

<mailto:...
> tu poste en texte ou en html ?
> isabelle
>
> garnote a écrit :
>> En effet, les deux premiers caractères que je vois
>> ici sont différents des caractères que je voyais
>> dans ma cellule.
>>
>>
>> "garnote"
<mailto: a écrit dans le message de news:

<mailto:...
>>
>>> Avec coder(Texte, Clé)
>>> Mais j''ai l'impression que certains caractères sont
>>> dénaturés suite à un copier-coller
>>> o?¾ÌÍyźyɾ˿¾¼ÍÂÈÇyÆCƾyz
>>>
>>> Serge
>>>
>>>
>>> "isabelle" <mailto: a écrit dans le message de news:
%
<mailto:%...
>>>
>>>> tu l'as codée avec =coder(Texte, Clé) ou bien celle de Thierry
William ou autre ?
>>>> isabelle
>>>>
>>>> garnote a écrit :
>>>>
>>>>> Merci Isabelle,
>>>>>
>>>>> o?¾ÌÍyźyɾ˿¾¼ÍÂÈÇyÆCƾyz
>>>>>
>>>>> clé: 89
>>>>>
>>>>> A--
>>>>>
>>>>> Serge
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> "isabelle" <mailto: a écrit dans le message de news:

<mailto:...
>>>>>
>>>>>
>>>>>> salut Serge,
>>>>>>
>>>>>> Sub Isa1()
>>>>>> Application.ScreenUpdating = False
>>>>>> Set ici = Selection
>>>>>> NL = ici.Rows.Count
>>>>>> For Each c In ici
>>>>>> If Application.CountIf(ici, c) > 1 Then
>>>>>> c.Offset(NL + 1, 0) = ""
>>>>>> Else
>>>>>> c1 = ici.Item(1).Column
>>>>>> c2 = ici.Item(ici.Count).Column
>>>>>> x = Application.CountA(Range(Cells(c.Row + NL + 1, c1),
Cells(c.Row + NL + 1, c2)))
>>>>>> Cells(c.Row + NL + 1, c1 + x) = c
>>>>>> End If
>>>>>> Next c
>>>>>> Application.ScreenUpdating = False
>>>>>> End Sub
>>>>>>
>>>>>> isabelle
>>>>>>
>>>>>> garnote a écrit :
>>>>>>
>>>>>>
>>>>>>> Bonjour,
>>>>>>>
>>>>>>> J'ai modifié un tipeu la macro d'Isabelle et j'obtiens ce que
je veux
>>>>>>> à partir d'une sélection simple située n'importe où sur la
feuille :
>>>>>>>
>>>>>>> Sub Isa1()
>>>>>>> Application.ScreenUpdating = False
>>>>>>> Set ici = Selection
>>>>>>> NL = ici.Rows.Count
>>>>>>> For Each c In ici
>>>>>>> If Application.CountIf(ici, c) > 1 Then
>>>>>>> c.Offset(NL + 1, 0) = ""
>>>>>>> Else
>>>>>>> c.Offset(NL + 1, 0) = c
>>>>>>> End If
>>>>>>> Next c
>>>>>>> ici.Offset(NL + 1, 0).Select
>>>>>>> Set ici = Selection
>>>>>>> For i = 1 To ici.Rows.Count
>>>>>>> ici.Rows(i).Sort key1:=ici(i, 1),
order1:=xlAscending
>>>>>>> Next i
>>>>>>> Application.ScreenUpdating = True
>>>>>>> End Sub
>>>>>>>
>>>>>>> Les données de chaque ligne de la nouvelle plage sont
>>>>>>> triées en ordre croissant et c'est bien ainsi.
>>>>>>> Maintenant, je voudrais obtenir la même disposition avec
>>>>>>> les données dans le même ordre que la plage de départ.
>>>>>>> Et là je bloque lamentablement ;-(
>>>>>>> Vous avez des idées ?
>>>>>>> Voici un exemple :
>>>>>>> http://www.cijoint.fr/cjlink.php?file=cj200902/cijPFVG3m0.xls
>>>>>>>
>>>>>>> A--
>>>>>>> Serge
>>>>>>>
>>>>>>>
>>>>>>> Sub Macro1()
>>>>>>> Set plage = Selection
>>>>>>> Plgn = plage.Item(1).Row
>>>>>>> Nlgn = plage.Rows.Count
>>>>>>> Dlgn = Plgn + Nlgn - 1
>>>>>>>
>>>>>>> For Each c In plage
>>>>>>> If Application.CountIf(plage, c) > 1 Then plage.Replace
What:=c,
>>>>>>> Replacement:=""
>>>>>>> Next c
>>>>>>>
>>>>>>> For i = Plgn To Dlgn
>>>>>>> If Application.CountA(Rows(i)) >= 1 Then
>>>>>>> Rows(i).Sort Key1:=Range("A" & i), Order1:=xlAscending,
>>>>>>> Header:=xlNoGuess, _
>>>>>>> OrderCustom:=1, MatchCase:úlse,
Orientation:=xlLeftToRight, _
>>>>>>> DataOption1:=xlSortNormal
>>>>>>> End If
>>>>>>> Next i
>>>>>>> End Sub
>>>>>>>
>>>>>>> Isabelle
>>>>>>>
>>>>>>> .
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> "isabelle" <mailto: a écrit dans le message de news:
%
<mailto:%...
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>> salut Serge,
>>>>>>>>
>>>>>>>> voilà,
>>>>>>>>
>>>>>>>> Sub Macro1()
>>>>>>>> Set plage = Selection
>>>>>>>> Plgn = plage.Item(1).Row
>>>>>>>> Nlgn = plage.Rows.Count
>>>>>>>> Dlgn = Plgn + Nlgn - 1
>>>>>>>>
>>>>>>>> For Each c In plage
>>>>>>>> If Application.CountIf(plage, c) > 1 Then plage.Replace
What:=c, Replacement:=""
>>>>>>>> Next c
>>>>>>>>
>>>>>>>> For i = Plgn To Dlgn
>>>>>>>> If Application.CountA(Rows(i)) >= 1 Then
>>>>>>>> Rows(i).Sort Key1:=Range("A" & i), Order1:=xlAscending,
Header:=xlNoGuess, _
>>>>>>>> OrderCustom:=1, MatchCase:úlse,
Orientation:=xlLeftToRight, _
>>>>>>>> DataOption1:=xlSortNormal
>>>>>>>> End If
>>>>>>>> Next i
>>>>>>>> End Sub
>>>>>>>>
>>>>>>>> isabelle
>>>>>>>>
>>>>>>>> garnote a écrit :
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>> Bonsoir et merci Isabelle,
>>>>>>>>>
>>>>>>>>> Mais ça ne fonctionne pas ;-(
>>>>>>>>> Et moi aussi j'avais tâté du CountIf !
>>>>>>>>> Par mise en forme conditionnelle, je peux
>>>>>>>>> jaunir les doublons, mais je voudrais plus.
>>>>>>>>> Voici un autre exemple :
>>>>>>>>> http://www.cijoint.fr/cjlink.php?file=cj200902/cij7l1rE88.xls
>>>>>>>>>
>>>>>>>>> Bonsoir, Bonne nuit,
>>>>>>>>> Serge
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> "isabelle" <mailto: a écrit dans le message de
news:
<mailto:...
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>> salut Serge,
>>>>>>>>>>
>>>>>>>>>> Sub Macro1()
>>>>>>>>>> Set plage = Selection
>>>>>>>>>> lgn = plage.Rows.Count
>>>>>>>>>> For Each c In plage
>>>>>>>>>> If Application.CountIf(plage, c) > 1 Then plage.Replace
What:=c, Replacement:=""
>>>>>>>>>> Next
>>>>>>>>>> For i = 1 To lgn
>>>>>>>>>> If Application.CountA(plage.Rows(i)) >= 1 Then
>>>>>>>>>> plg = plage.Rows(i).SpecialCells(xlCellTypeConstants,
1).Address
>>>>>>>>>> Range(plg).Cut
>>>>>>>>>> Range("A" & i).Select
>>>>>>>>>> ActiveSheet.Paste
>>>>>>>>>> End If
>>>>>>>>>> Next
>>>>>>>>>> End Sub
>>>>>>>>>>
>>>>>>>>>> isabelle
>>>>>>>>>>
>>>>>>>>>> garnote a écrit :
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>> Bonjour,
>>>>>>>>>>>
>>>>>>>>>>> Je sélectionne une plage simple contenant (exemple ) :
>>>>>>>>>>>
>>>>>>>>>>> 1 2 3 _ _
>>>>>>>>>>>
>>>>>>>>>>> 8 7 9 1 _
>>>>>>>>>>>
>>>>>>>>>>> 4 5 6 7 8
>>>>>>>>>>>
>>>>>>>>>>> Les _ représentant des cellules vides.
>>>>>>>>>>>
>>>>>>>>>>> Par macro, je veux éliminer tous les doublons
>>>>>>>>>>> et obtenir comme nouvelle plage :
>>>>>>>>>>>
>>>>>>>>>>> 2 3 _ _ _
>>>>>>>>>>>
>>>>>>>>>>> 9 _ _ _ _
>>>>>>>>>>>
>>>>>>>>>>> 4 5 6 _ _
>>>>>>>>>>>
>>>>>>>>>>> Doit pouvoir se généraliser pour une plage quelconque
>>>>>>>>>>> dont chaque ligne commence par une série de nombres
>>>>>>>>>>> suivi de cellules vides.La dernière ligne ne contient
>>>>>>>>>>> jamais de cellules vides.
>>>>>>>>>>>
>>>>>>>>>>> Serge
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>
>>>>>
>>>>>
>>>
>>
>>
>>


Avatar
garnote
Le voici :
http://www.cijoint.fr/cjlink.php?file=cj200902/cijVP1kuT5.xls

Serge



"isabelle" a écrit dans le message de news:
y'a toujours rien de lisible,
envoie moi ton fichier
mon adresse : http://cjoint.com/?czsuFH0ZGQ.

isabelle


garnote a écrit :
Voici le même en html :
o?¾ÌÍyźyɾ˿¾¼ÍÂÈÇyÆCƾyz
¬¾ËÀ¾
"isabelle" <mailto: a écrit dans le message de news:
<mailto:...
> tu poste en texte ou en html ?
> isabelle
>
> garnote a écrit :
>> En effet, les deux premiers caractères que je vois
>> ici sont différents des caractères que je voyais
>> dans ma cellule.
>>
>>
>> "garnote"
<mailto: a écrit dans le message de news:
<mailto:...
>>
>>> Avec coder(Texte, Clé)
>>> Mais j''ai l'impression que certains caractères sont
>>> dénaturés suite à un copier-coller
>>> o?¾ÌÍyźyɾ˿¾¼ÍÂÈÇyÆCƾyz
>>>
>>> Serge
>>>
>>>
>>> "isabelle" <mailto: a écrit dans le message de news:
% <mailto:%...
>>>
>>>> tu l'as codée avec =coder(Texte, Clé) ou bien celle de Thierry
William ou autre ?
>>>> isabelle
>>>>
>>>> garnote a écrit :
>>>>
>>>>> Merci Isabelle,
>>>>>
>>>>> o?¾ÌÍyźyɾ˿¾¼ÍÂÈÇyÆCƾyz
>>>>>
>>>>> clé: 89
>>>>>
>>>>> A--
>>>>>
>>>>> Serge
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> "isabelle" <mailto: a écrit dans le message de news:
<mailto:...
>>>>>
>>>>>
>>>>>> salut Serge,
>>>>>>
>>>>>> Sub Isa1()
>>>>>> Application.ScreenUpdating = False
>>>>>> Set ici = Selection
>>>>>> NL = ici.Rows.Count
>>>>>> For Each c In ici
>>>>>> If Application.CountIf(ici, c) > 1 Then
>>>>>> c.Offset(NL + 1, 0) = ""
>>>>>> Else
>>>>>> c1 = ici.Item(1).Column
>>>>>> c2 = ici.Item(ici.Count).Column
>>>>>> x = Application.CountA(Range(Cells(c.Row + NL + 1, c1),
Cells(c.Row + NL + 1, c2)))
>>>>>> Cells(c.Row + NL + 1, c1 + x) = c
>>>>>> End If
>>>>>> Next c
>>>>>> Application.ScreenUpdating = False
>>>>>> End Sub
>>>>>>
>>>>>> isabelle
>>>>>>
>>>>>> garnote a écrit :
>>>>>>
>>>>>>
>>>>>>> Bonjour,
>>>>>>>
>>>>>>> J'ai modifié un tipeu la macro d'Isabelle et j'obtiens ce que
je veux
>>>>>>> à partir d'une sélection simple située n'importe où sur la
feuille :
>>>>>>>
>>>>>>> Sub Isa1()
>>>>>>> Application.ScreenUpdating = False
>>>>>>> Set ici = Selection
>>>>>>> NL = ici.Rows.Count
>>>>>>> For Each c In ici
>>>>>>> If Application.CountIf(ici, c) > 1 Then
>>>>>>> c.Offset(NL + 1, 0) = ""
>>>>>>> Else
>>>>>>> c.Offset(NL + 1, 0) = c
>>>>>>> End If
>>>>>>> Next c
>>>>>>> ici.Offset(NL + 1, 0).Select
>>>>>>> Set ici = Selection
>>>>>>> For i = 1 To ici.Rows.Count
>>>>>>> ici.Rows(i).Sort key1:=ici(i, 1),
order1:=xlAscending
>>>>>>> Next i
>>>>>>> Application.ScreenUpdating = True
>>>>>>> End Sub
>>>>>>>
>>>>>>> Les données de chaque ligne de la nouvelle plage sont
>>>>>>> triées en ordre croissant et c'est bien ainsi.
>>>>>>> Maintenant, je voudrais obtenir la même disposition avec
>>>>>>> les données dans le même ordre que la plage de départ.
>>>>>>> Et là je bloque lamentablement ;-(
>>>>>>> Vous avez des idées ?
>>>>>>> Voici un exemple :
>>>>>>> http://www.cijoint.fr/cjlink.php?file=cj200902/cijPFVG3m0.xls
>>>>>>>
>>>>>>> A--
>>>>>>> Serge
>>>>>>>
>>>>>>>
>>>>>>> Sub Macro1()
>>>>>>> Set plage = Selection
>>>>>>> Plgn = plage.Item(1).Row
>>>>>>> Nlgn = plage.Rows.Count
>>>>>>> Dlgn = Plgn + Nlgn - 1
>>>>>>>
>>>>>>> For Each c In plage
>>>>>>> If Application.CountIf(plage, c) > 1 Then plage.Replace
What:=c,
>>>>>>> Replacement:=""
>>>>>>> Next c
>>>>>>>
>>>>>>> For i = Plgn To Dlgn
>>>>>>> If Application.CountA(Rows(i)) >= 1 Then
>>>>>>> Rows(i).Sort Key1:=Range("A" & i), Order1:=xlAscending,
>>>>>>> Header:=xlNoGuess, _
>>>>>>> OrderCustom:=1, MatchCase:úlse,
Orientation:=xlLeftToRight, _
>>>>>>> DataOption1:=xlSortNormal
>>>>>>> End If
>>>>>>> Next i
>>>>>>> End Sub
>>>>>>>
>>>>>>> Isabelle
>>>>>>>
>>>>>>> .
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> "isabelle" <mailto: a écrit dans le message de news:
% <mailto:%...
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>> salut Serge,
>>>>>>>>
>>>>>>>> voilà,
>>>>>>>>
>>>>>>>> Sub Macro1()
>>>>>>>> Set plage = Selection
>>>>>>>> Plgn = plage.Item(1).Row
>>>>>>>> Nlgn = plage.Rows.Count
>>>>>>>> Dlgn = Plgn + Nlgn - 1
>>>>>>>>
>>>>>>>> For Each c In plage
>>>>>>>> If Application.CountIf(plage, c) > 1 Then plage.Replace
What:=c, Replacement:=""
>>>>>>>> Next c
>>>>>>>>
>>>>>>>> For i = Plgn To Dlgn
>>>>>>>> If Application.CountA(Rows(i)) >= 1 Then
>>>>>>>> Rows(i).Sort Key1:=Range("A" & i), Order1:=xlAscending,
Header:=xlNoGuess, _
>>>>>>>> OrderCustom:=1, MatchCase:úlse,
Orientation:=xlLeftToRight, _
>>>>>>>> DataOption1:=xlSortNormal
>>>>>>>> End If
>>>>>>>> Next i
>>>>>>>> End Sub
>>>>>>>>
>>>>>>>> isabelle
>>>>>>>>
>>>>>>>> garnote a écrit :
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>> Bonsoir et merci Isabelle,
>>>>>>>>>
>>>>>>>>> Mais ça ne fonctionne pas ;-(
>>>>>>>>> Et moi aussi j'avais tâté du CountIf !
>>>>>>>>> Par mise en forme conditionnelle, je peux
>>>>>>>>> jaunir les doublons, mais je voudrais plus.
>>>>>>>>> Voici un autre exemple :
>>>>>>>>> http://www.cijoint.fr/cjlink.php?file=cj200902/cij7l1rE88.xls
>>>>>>>>>
>>>>>>>>> Bonsoir, Bonne nuit,
>>>>>>>>> Serge
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> "isabelle" <mailto: a écrit dans le message de
news: <mailto:...
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>> salut Serge,
>>>>>>>>>>
>>>>>>>>>> Sub Macro1()
>>>>>>>>>> Set plage = Selection
>>>>>>>>>> lgn = plage.Rows.Count
>>>>>>>>>> For Each c In plage
>>>>>>>>>> If Application.CountIf(plage, c) > 1 Then plage.Replace
What:=c, Replacement:=""
>>>>>>>>>> Next
>>>>>>>>>> For i = 1 To lgn
>>>>>>>>>> If Application.CountA(plage.Rows(i)) >= 1 Then
>>>>>>>>>> plg = plage.Rows(i).SpecialCells(xlCellTypeConstants,
1).Address
>>>>>>>>>> Range(plg).Cut
>>>>>>>>>> Range("A" & i).Select
>>>>>>>>>> ActiveSheet.Paste
>>>>>>>>>> End If
>>>>>>>>>> Next
>>>>>>>>>> End Sub
>>>>>>>>>>
>>>>>>>>>> isabelle
>>>>>>>>>>
>>>>>>>>>> garnote a écrit :
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>> Bonjour,
>>>>>>>>>>>
>>>>>>>>>>> Je sélectionne une plage simple contenant (exemple ) :
>>>>>>>>>>>
>>>>>>>>>>> 1 2 3 _ _
>>>>>>>>>>>
>>>>>>>>>>> 8 7 9 1 _
>>>>>>>>>>>
>>>>>>>>>>> 4 5 6 7 8
>>>>>>>>>>>
>>>>>>>>>>> Les _ représentant des cellules vides.
>>>>>>>>>>>
>>>>>>>>>>> Par macro, je veux éliminer tous les doublons
>>>>>>>>>>> et obtenir comme nouvelle plage :
>>>>>>>>>>>
>>>>>>>>>>> 2 3 _ _ _
>>>>>>>>>>>
>>>>>>>>>>> 9 _ _ _ _
>>>>>>>>>>>
>>>>>>>>>>> 4 5 6 _ _
>>>>>>>>>>>
>>>>>>>>>>> Doit pouvoir se généraliser pour une plage quelconque
>>>>>>>>>>> dont chaque ligne commence par une série de nombres
>>>>>>>>>>> suivi de cellules vides.La dernière ligne ne contient
>>>>>>>>>>> jamais de cellules vides.
>>>>>>>>>>>
>>>>>>>>>>> Serge
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>
>>>>>
>>>>>
>>>
>>
>>
>>




Avatar
isabelle
ha! c'est une nouvelle version, ça pouvait ben ne pas fonctionner,
isabelle

garnote a écrit :
Le voici :
http://www.cijoint.fr/cjlink.php?file=cj200902/cijVP1kuT5.xls

Serge



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

y'a toujours rien de lisible,
envoie moi ton fichier
mon adresse : http://cjoint.com/?czsuFH0ZGQ.

isabelle


garnote a écrit :

Voici le même en html :
o?¾ÌÍyźyɾ˿¾¼ÍÂÈÇyÆCƾyz
¬¾ËÀ¾
"isabelle" <mailto: a écrit dans le message de news:
<mailto:...

tu poste en texte ou en html ?
isabelle

garnote a écrit :

En effet, les deux premiers caractères que je vois
ici sont différents des caractères que je voyais
dans ma cellule.


"garnote"





<mailto: a écrit dans le message de news:
<mailto:...

Avec coder(Texte, Clé)
Mais j''ai l'impression que certains caractères sont
dénaturés suite à un copier-coller
o?¾ÌÍyźyɾ˿¾¼ÍÂÈÇyÆCƾyz

Serge


"isabelle" <mailto: a écrit dans le message de news:







% <mailto:%...

tu l'as codée avec =coder(Texte, Clé) ou bien celle de Thierry









William ou autre ?

isabelle

garnote a écrit :


Merci Isabelle,

o?¾ÌÍyźyɾ˿¾¼ÍÂÈÇyÆCƾyz

clé: 89

A--

Serge




"isabelle" <mailto: a écrit dans le message de news:











<mailto:...


salut Serge,

Sub Isa1()
Application.ScreenUpdating = False
Set ici = Selection
NL = ici.Rows.Count
For Each c In ici
If Application.CountIf(ici, c) > 1 Then
c.Offset(NL + 1, 0) = ""
Else
c1 = ici.Item(1).Column
c2 = ici.Item(ici.Count).Column
x = Application.CountA(Range(Cells(c.Row + NL + 1, c1),













Cells(c.Row + NL + 1, c2)))

Cells(c.Row + NL + 1, c1 + x) = c
End If
Next c
Application.ScreenUpdating = False
End Sub

isabelle

garnote a écrit :



Bonjour,

J'ai modifié un tipeu la macro d'Isabelle et j'obtiens ce que















je veux

à partir d'une sélection simple située n'importe où sur la















feuille :

Sub Isa1()
Application.ScreenUpdating = False
Set ici = Selection
NL = ici.Rows.Count
For Each c In ici
If Application.CountIf(ici, c) > 1 Then
c.Offset(NL + 1, 0) = ""
Else
c.Offset(NL + 1, 0) = c
End If
Next c
ici.Offset(NL + 1, 0).Select
Set ici = Selection
For i = 1 To ici.Rows.Count
ici.Rows(i).Sort key1:=ici(i, 1),















order1:=xlAscending

Next i
Application.ScreenUpdating = True
End Sub

Les données de chaque ligne de la nouvelle plage sont
triées en ordre croissant et c'est bien ainsi.
Maintenant, je voudrais obtenir la même disposition avec
les données dans le même ordre que la plage de départ.
Et là je bloque lamentablement ;-(
Vous avez des idées ?
Voici un exemple :
http://www.cijoint.fr/cjlink.php?file=cj200902/cijPFVG3m0.xls

A--
Serge


Sub Macro1()
Set plage = Selection
Plgn = plage.Item(1).Row
Nlgn = plage.Rows.Count
Dlgn = Plgn + Nlgn - 1

For Each c In plage
If Application.CountIf(plage, c) > 1 Then plage.Replace















What:=c,

Replacement:=""
Next c

For i = Plgn To Dlgn
If Application.CountA(Rows(i)) >= 1 Then
Rows(i).Sort Key1:=Range("A" & i), Order1:=xlAscending,
Header:=xlNoGuess, _
OrderCustom:=1, MatchCase:úlse,















Orientation:=xlLeftToRight, _

DataOption1:=xlSortNormal
End If
Next i
End Sub

Isabelle

.






























"isabelle" <mailto: a écrit dans le message de news:















% <mailto:%...



salut Serge,

voilà,

Sub Macro1()
Set plage = Selection
Plgn = plage.Item(1).Row
Nlgn = plage.Rows.Count
Dlgn = Plgn + Nlgn - 1

For Each c In plage
If Application.CountIf(plage, c) > 1 Then plage.Replace

















What:=c, Replacement:=""

Next c

For i = Plgn To Dlgn
If Application.CountA(Rows(i)) >= 1 Then
Rows(i).Sort Key1:=Range("A" & i), Order1:=xlAscending,

















Header:=xlNoGuess, _

OrderCustom:=1, MatchCase:úlse,

















Orientation:=xlLeftToRight, _

DataOption1:=xlSortNormal
End If
Next i
End Sub

isabelle

garnote a écrit :




Bonsoir et merci Isabelle,

Mais ça ne fonctionne pas ;-(
Et moi aussi j'avais tâté du CountIf !
Par mise en forme conditionnelle, je peux
jaunir les doublons, mais je voudrais plus.
Voici un autre exemple :
http://www.cijoint.fr/cjlink.php?file=cj200902/cij7l1rE88.xls

Bonsoir, Bonne nuit,
Serge


"isabelle" <mailto: a écrit dans le message de



















news: <mailto:...




salut Serge,

Sub Macro1()
Set plage = Selection
lgn = plage.Rows.Count
For Each c In plage
If Application.CountIf(plage, c) > 1 Then plage.Replace





















What:=c, Replacement:=""

Next
For i = 1 To lgn
If Application.CountA(plage.Rows(i)) >= 1 Then
plg = plage.Rows(i).SpecialCells(xlCellTypeConstants,





















1).Address

Range(plg).Cut
Range("A" & i).Select
ActiveSheet.Paste
End If
Next
End Sub

isabelle

garnote a écrit :





Bonjour,

Je sélectionne une plage simple contenant (exemple ) :

1 2 3 _ _

8 7 9 1 _

4 5 6 7 8

Les _ représentant des cellules vides.

Par macro, je veux éliminer tous les doublons
et obtenir comme nouvelle plage :

2 3 _ _ _

9 _ _ _ _

4 5 6 _ _

Doit pouvoir se généraliser pour une plage quelconque
dont chaque ligne commence par une série de nombres
suivi de cellules vides.La dernière ligne ne contient
jamais de cellules vides.

Serge











































Avatar
garnote
Toutes ces questions pour en arriver à finaliser
ma laborieuse tentative pour résoudre
le terrible problème de Freudenthal !
Voici le problème et ma version gros bêta
de sa solution ;-)

http://www.cijoint.fr/cjlink.php?file=cj200902/cijnY5QXcw.doc


Serge





"isabelle" a écrit dans le message de news: etO$
ha! c'est une nouvelle version, ça pouvait ben ne pas fonctionner,
isabelle

garnote a écrit :
Le voici :
http://www.cijoint.fr/cjlink.php?file=cj200902/cijVP1kuT5.xls

Serge



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

y'a toujours rien de lisible,
envoie moi ton fichier
mon adresse : http://cjoint.com/?czsuFH0ZGQ.

isabelle


garnote a écrit :

Voici le même en html :
o?¾ÌÍyźyɾ˿¾¼ÍÂÈÇyÆCƾyz
¬¾ËÀ¾
"isabelle" <mailto: a écrit dans le message de news:
<mailto:...

tu poste en texte ou en html ?
isabelle

garnote a écrit :

En effet, les deux premiers caractères que je vois
ici sont différents des caractères que je voyais
dans ma cellule.


"garnote"





<mailto: a écrit dans le message de news:
<mailto:...

Avec coder(Texte, Clé)
Mais j''ai l'impression que certains caractères sont
dénaturés suite à un copier-coller
o?¾ÌÍyźyɾ˿¾¼ÍÂÈÇyÆCƾyz

Serge


"isabelle" <mailto: a écrit dans le message de news:







% <mailto:%...

tu l'as codée avec =coder(Texte, Clé) ou bien celle de Thierry









William ou autre ?

isabelle

garnote a écrit :


Merci Isabelle,

o?¾ÌÍyźyɾ˿¾¼ÍÂÈÇyÆCƾyz

clé: 89

A--

Serge




"isabelle" <mailto: a écrit dans le message de news:











<mailto:...


salut Serge,

Sub Isa1()
Application.ScreenUpdating = False
Set ici = Selection
NL = ici.Rows.Count
For Each c In ici
If Application.CountIf(ici, c) > 1 Then
c.Offset(NL + 1, 0) = ""
Else
c1 = ici.Item(1).Column
c2 = ici.Item(ici.Count).Column
x = Application.CountA(Range(Cells(c.Row + NL + 1, c1),













Cells(c.Row + NL + 1, c2)))

Cells(c.Row + NL + 1, c1 + x) = c
End If
Next c
Application.ScreenUpdating = False
End Sub

isabelle

garnote a écrit :



Bonjour,

J'ai modifié un tipeu la macro d'Isabelle et j'obtiens ce que















je veux

à partir d'une sélection simple située n'importe où sur la















feuille :

Sub Isa1()
Application.ScreenUpdating = False
Set ici = Selection
NL = ici.Rows.Count
For Each c In ici
If Application.CountIf(ici, c) > 1 Then
c.Offset(NL + 1, 0) = ""
Else
c.Offset(NL + 1, 0) = c
End If
Next c
ici.Offset(NL + 1, 0).Select
Set ici = Selection
For i = 1 To ici.Rows.Count
ici.Rows(i).Sort key1:=ici(i, 1),















order1:=xlAscending

Next i
Application.ScreenUpdating = True
End Sub

Les données de chaque ligne de la nouvelle plage sont
triées en ordre croissant et c'est bien ainsi.
Maintenant, je voudrais obtenir la même disposition avec
les données dans le même ordre que la plage de départ.
Et là je bloque lamentablement ;-(
Vous avez des idées ?
Voici un exemple :
http://www.cijoint.fr/cjlink.php?file=cj200902/cijPFVG3m0.xls

A--
Serge


Sub Macro1()
Set plage = Selection
Plgn = plage.Item(1).Row
Nlgn = plage.Rows.Count
Dlgn = Plgn + Nlgn - 1

For Each c In plage
If Application.CountIf(plage, c) > 1 Then plage.Replace















What:=c,

Replacement:=""
Next c

For i = Plgn To Dlgn
If Application.CountA(Rows(i)) >= 1 Then
Rows(i).Sort Key1:=Range("A" & i), Order1:=xlAscending,
Header:=xlNoGuess, _
OrderCustom:=1, MatchCase:úlse,















Orientation:=xlLeftToRight, _

DataOption1:=xlSortNormal
End If
Next i
End Sub

Isabelle

.






























"isabelle" <mailto: a écrit dans le message de news:















% <mailto:%...



salut Serge,

voilà,

Sub Macro1()
Set plage = Selection
Plgn = plage.Item(1).Row
Nlgn = plage.Rows.Count
Dlgn = Plgn + Nlgn - 1

For Each c In plage
If Application.CountIf(plage, c) > 1 Then plage.Replace

















What:=c, Replacement:=""

Next c

For i = Plgn To Dlgn
If Application.CountA(Rows(i)) >= 1 Then
Rows(i).Sort Key1:=Range("A" & i), Order1:=xlAscending,

















Header:=xlNoGuess, _

OrderCustom:=1, MatchCase:úlse,

















Orientation:=xlLeftToRight, _

DataOption1:=xlSortNormal
End If
Next i
End Sub

isabelle

garnote a écrit :




Bonsoir et merci Isabelle,

Mais ça ne fonctionne pas ;-(
Et moi aussi j'avais tâté du CountIf !
Par mise en forme conditionnelle, je peux
jaunir les doublons, mais je voudrais plus.
Voici un autre exemple :
http://www.cijoint.fr/cjlink.php?file=cj200902/cij7l1rE88.xls

Bonsoir, Bonne nuit,
Serge


"isabelle" <mailto: a écrit dans le message de



















news: <mailto:...




salut Serge,

Sub Macro1()
Set plage = Selection
lgn = plage.Rows.Count
For Each c In plage
If Application.CountIf(plage, c) > 1 Then plage.Replace





















What:=c, Replacement:=""

Next
For i = 1 To lgn
If Application.CountA(plage.Rows(i)) >= 1 Then
plg = plage.Rows(i).SpecialCells(xlCellTypeConstants,





















1).Address

Range(plg).Cut
Range("A" & i).Select
ActiveSheet.Paste
End If
Next
End Sub

isabelle

garnote a écrit :





Bonjour,

Je sélectionne une plage simple contenant (exemple ) :

1 2 3 _ _

8 7 9 1 _

4 5 6 7 8

Les _ représentant des cellules vides.

Par macro, je veux éliminer tous les doublons
et obtenir comme nouvelle plage :

2 3 _ _ _

9 _ _ _ _

4 5 6 _ _

Doit pouvoir se généraliser pour une plage quelconque
dont chaque ligne commence par une série de nombres
suivi de cellules vides.La dernière ligne ne contient
jamais de cellules vides.

Serge













































Avatar
garnote
Oups, m'ai trompé de document !
Voici le bon :
http://www.cijoint.fr/cjlink.php?file=cj200902/cij9BW6psP.xls

Serge,
qui a les deux yeux dans le même trou ä force
de piocher sur ce problème de malade mental ;-)



"garnote" a écrit dans le message de news:
Toutes ces questions pour en arriver à finaliser
ma laborieuse tentative pour résoudre
le terrible problème de Freudenthal !
Voici le problème et ma version gros bêta
de sa solution ;-)

http://www.cijoint.fr/cjlink.php?file=cj200902/cijnY5QXcw.doc


Serge





"isabelle" a écrit dans le message de news: etO$
ha! c'est une nouvelle version, ça pouvait ben ne pas fonctionner,
isabelle

garnote a écrit :
Le voici :
http://www.cijoint.fr/cjlink.php?file=cj200902/cijVP1kuT5.xls

Serge



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

y'a toujours rien de lisible,
envoie moi ton fichier
mon adresse : http://cjoint.com/?czsuFH0ZGQ.

isabelle


garnote a écrit :

Voici le même en html :
o?¾ÌÍyźyɾ˿¾¼ÍÂÈÇyÆCƾyz
¬¾ËÀ¾
"isabelle" <mailto: a écrit dans le message de news:
<mailto:...

tu poste en texte ou en html ?
isabelle

garnote a écrit :

En effet, les deux premiers caractères que je vois
ici sont différents des caractères que je voyais
dans ma cellule.


"garnote"





<mailto: a écrit dans le message de news:
<mailto:...

Avec coder(Texte, Clé)
Mais j''ai l'impression que certains caractères sont
dénaturés suite à un copier-coller
o?¾ÌÍyźyɾ˿¾¼ÍÂÈÇyÆCƾyz

Serge


"isabelle" <mailto: a écrit dans le message de news:







% <mailto:%...

tu l'as codée avec =coder(Texte, Clé) ou bien celle de Thierry









William ou autre ?

isabelle

garnote a écrit :


Merci Isabelle,

o?¾ÌÍyźyɾ˿¾¼ÍÂÈÇyÆCƾyz

clé: 89

A--

Serge




"isabelle" <mailto: a écrit dans le message de news:











<mailto:...


salut Serge,

Sub Isa1()
Application.ScreenUpdating = False
Set ici = Selection
NL = ici.Rows.Count
For Each c In ici
If Application.CountIf(ici, c) > 1 Then
c.Offset(NL + 1, 0) = ""
Else
c1 = ici.Item(1).Column
c2 = ici.Item(ici.Count).Column
x = Application.CountA(Range(Cells(c.Row + NL + 1, c1),













Cells(c.Row + NL + 1, c2)))

Cells(c.Row + NL + 1, c1 + x) = c
End If
Next c
Application.ScreenUpdating = False
End Sub

isabelle

garnote a écrit :



Bonjour,

J'ai modifié un tipeu la macro d'Isabelle et j'obtiens ce que















je veux

à partir d'une sélection simple située n'importe où sur la















feuille :

Sub Isa1()
Application.ScreenUpdating = False
Set ici = Selection
NL = ici.Rows.Count
For Each c In ici
If Application.CountIf(ici, c) > 1 Then
c.Offset(NL + 1, 0) = ""
Else
c.Offset(NL + 1, 0) = c
End If
Next c
ici.Offset(NL + 1, 0).Select
Set ici = Selection
For i = 1 To ici.Rows.Count
ici.Rows(i).Sort key1:=ici(i, 1),















order1:=xlAscending

Next i
Application.ScreenUpdating = True
End Sub

Les données de chaque ligne de la nouvelle plage sont
triées en ordre croissant et c'est bien ainsi.
Maintenant, je voudrais obtenir la même disposition avec
les données dans le même ordre que la plage de départ.
Et là je bloque lamentablement ;-(
Vous avez des idées ?
Voici un exemple :
http://www.cijoint.fr/cjlink.php?file=cj200902/cijPFVG3m0.xls

A--
Serge


Sub Macro1()
Set plage = Selection
Plgn = plage.Item(1).Row
Nlgn = plage.Rows.Count
Dlgn = Plgn + Nlgn - 1

For Each c In plage
If Application.CountIf(plage, c) > 1 Then plage.Replace















What:=c,

Replacement:=""
Next c

For i = Plgn To Dlgn
If Application.CountA(Rows(i)) >= 1 Then
Rows(i).Sort Key1:=Range("A" & i), Order1:=xlAscending,
Header:=xlNoGuess, _
OrderCustom:=1, MatchCase:úlse,















Orientation:=xlLeftToRight, _

DataOption1:=xlSortNormal
End If
Next i
End Sub

Isabelle

.






























"isabelle" <mailto: a écrit dans le message de news:















% <mailto:%...



salut Serge,

voilà,

Sub Macro1()
Set plage = Selection
Plgn = plage.Item(1).Row
Nlgn = plage.Rows.Count
Dlgn = Plgn + Nlgn - 1

For Each c In plage
If Application.CountIf(plage, c) > 1 Then plage.Replace

















What:=c, Replacement:=""

Next c

For i = Plgn To Dlgn
If Application.CountA(Rows(i)) >= 1 Then
Rows(i).Sort Key1:=Range("A" & i), Order1:=xlAscending,

















Header:=xlNoGuess, _

OrderCustom:=1, MatchCase:úlse,

















Orientation:=xlLeftToRight, _

DataOption1:=xlSortNormal
End If
Next i
End Sub

isabelle

garnote a écrit :




Bonsoir et merci Isabelle,

Mais ça ne fonctionne pas ;-(
Et moi aussi j'avais tâté du CountIf !
Par mise en forme conditionnelle, je peux
jaunir les doublons, mais je voudrais plus.
Voici un autre exemple :
http://www.cijoint.fr/cjlink.php?file=cj200902/cij7l1rE88.xls

Bonsoir, Bonne nuit,
Serge


"isabelle" <mailto: a écrit dans le message de



















news: <mailto:...




salut Serge,

Sub Macro1()
Set plage = Selection
lgn = plage.Rows.Count
For Each c In plage
If Application.CountIf(plage, c) > 1 Then plage.Replace





















What:=c, Replacement:=""

Next
For i = 1 To lgn
If Application.CountA(plage.Rows(i)) >= 1 Then
plg = plage.Rows(i).SpecialCells(xlCellTypeConstants,





















1).Address

Range(plg).Cut
Range("A" & i).Select
ActiveSheet.Paste
End If
Next
End Sub

isabelle

garnote a écrit :





Bonjour,

Je sélectionne une plage simple contenant (exemple ) :

1 2 3 _ _

8 7 9 1 _

4 5 6 7 8

Les _ représentant des cellules vides.

Par macro, je veux éliminer tous les doublons
et obtenir comme nouvelle plage :

2 3 _ _ _

9 _ _ _ _

4 5 6 _ _

Doit pouvoir se généraliser pour une plage quelconque
dont chaque ligne commence par une série de nombres
suivi de cellules vides.La dernière ligne ne contient
jamais de cellules vides.

Serge

















































Avatar
isabelle
j'ai pas très bien compris pourquoi il faut choisir l'unique alors que
les autres résultats sont aussi possible ?
isabelle

garnote a écrit :
Oups, m'ai trompé de document !
Voici le bon :
http://www.cijoint.fr/cjlink.php?file=cj200902/cij9BW6psP.xls

Serge,
qui a les deux yeux dans le même trou ä force
de piocher sur ce problème de malade mental ;-)



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

Toutes ces questions pour en arriver à finaliser
ma laborieuse tentative pour résoudre
le terrible problème de Freudenthal !
Voici le problème et ma version gros bêta
de sa solution ;-)

http://www.cijoint.fr/cjlink.php?file=cj200902/cijnY5QXcw.doc


Serge





"isabelle" a écrit dans le message de news: etO$

ha! c'est une nouvelle version, ça pouvait ben ne pas fonctionner,
isabelle

garnote a écrit :

Le voici :
http://www.cijoint.fr/cjlink.php?file=cj200902/cijVP1kuT5.xls

Serge



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


y'a toujours rien de lisible,
envoie moi ton fichier
mon adresse : http://cjoint.com/?czsuFH0ZGQ.

isabelle


garnote a écrit :


Voici le même en html :
o?¾ÌÍyźyɾ˿¾¼ÍÂÈÇyÆCƾyz
¬¾ËÀ¾
"isabelle" <mailto: a écrit dans le message de news:
<mailto:...


tu poste en texte ou en html ?
isabelle

garnote a écrit :


En effet, les deux premiers caractères que je vois
ici sont différents des caractères que je voyais
dans ma cellule.


"garnote"






<mailto: a écrit dans le message de news:
<mailto:...


Avec coder(Texte, Clé)
Mais j''ai l'impression que certains caractères sont
dénaturés suite à un copier-coller
o?¾ÌÍyźyɾ˿¾¼ÍÂÈÇyÆCƾyz

Serge


"isabelle" <mailto: a écrit dans le message de news:








% <mailto:%...


tu l'as codée avec =coder(Texte, Clé) ou bien celle de Thierry










William ou autre ?


isabelle

garnote a écrit :



Merci Isabelle,

o?¾ÌÍyźyɾ˿¾¼ÍÂÈÇyÆCƾyz

clé: 89

A--

Serge




"isabelle" <mailto: a écrit dans le message de news:












<mailto:...


salut Serge,

Sub Isa1()
Application.ScreenUpdating = False
Set ici = Selection
NL = ici.Rows.Count
For Each c In ici
If Application.CountIf(ici, c) > 1 Then
c.Offset(NL + 1, 0) = ""
Else
c1 = ici.Item(1).Column
c2 = ici.Item(ici.Count).Column
x = Application.CountA(Range(Cells(c.Row + NL + 1, c1),














Cells(c.Row + NL + 1, c2)))


Cells(c.Row + NL + 1, c1 + x) = c
End If
Next c
Application.ScreenUpdating = False
End Sub

isabelle

garnote a écrit :




Bonjour,

J'ai modifié un tipeu la macro d'Isabelle et j'obtiens ce que
















je veux


à partir d'une sélection simple située n'importe où sur la
















feuille :


Sub Isa1()
Application.ScreenUpdating = False
Set ici = Selection
NL = ici.Rows.Count
For Each c In ici
If Application.CountIf(ici, c) > 1 Then
c.Offset(NL + 1, 0) = ""
Else
c.Offset(NL + 1, 0) = c
End If
Next c
ici.Offset(NL + 1, 0).Select
Set ici = Selection
For i = 1 To ici.Rows.Count
ici.Rows(i).Sort key1:=ici(i, 1),
















order1:=xlAscending


Next i
Application.ScreenUpdating = True
End Sub

Les données de chaque ligne de la nouvelle plage sont
triées en ordre croissant et c'est bien ainsi.
Maintenant, je voudrais obtenir la même disposition avec
les données dans le même ordre que la plage de départ.
Et là je bloque lamentablement ;-(
Vous avez des idées ?
Voici un exemple :
http://www.cijoint.fr/cjlink.php?file=cj200902/cijPFVG3m0.xls

A--
Serge


Sub Macro1()
Set plage = Selection
Plgn = plage.Item(1).Row
Nlgn = plage.Rows.Count
Dlgn = Plgn + Nlgn - 1

For Each c In plage
If Application.CountIf(plage, c) > 1 Then plage.Replace
















What:=c,


Replacement:=""
Next c

For i = Plgn To Dlgn
If Application.CountA(Rows(i)) >= 1 Then
Rows(i).Sort Key1:=Range("A" & i), Order1:=xlAscending,
Header:=xlNoGuess, _
OrderCustom:=1, MatchCase:úlse,
















Orientation:=xlLeftToRight, _


DataOption1:=xlSortNormal
End If
Next i
End Sub

Isabelle

.






























"isabelle" <mailto: a écrit dans le message de news:
















% <mailto:%...



salut Serge,

voilà,

Sub Macro1()
Set plage = Selection
Plgn = plage.Item(1).Row
Nlgn = plage.Rows.Count
Dlgn = Plgn + Nlgn - 1

For Each c In plage
If Application.CountIf(plage, c) > 1 Then plage.Replace


















What:=c, Replacement:=""


Next c

For i = Plgn To Dlgn
If Application.CountA(Rows(i)) >= 1 Then
Rows(i).Sort Key1:=Range("A" & i), Order1:=xlAscending,


















Header:=xlNoGuess, _


OrderCustom:=1, MatchCase:úlse,


















Orientation:=xlLeftToRight, _


DataOption1:=xlSortNormal
End If
Next i
End Sub

isabelle

garnote a écrit :





Bonsoir et merci Isabelle,

Mais ça ne fonctionne pas ;-(
Et moi aussi j'avais tâté du CountIf !
Par mise en forme conditionnelle, je peux
jaunir les doublons, mais je voudrais plus.
Voici un autre exemple :
http://www.cijoint.fr/cjlink.php?file=cj200902/cij7l1rE88.xls

Bonsoir, Bonne nuit,
Serge


"isabelle" <mailto: a écrit dans le message de




















news: <mailto:...




salut Serge,

Sub Macro1()
Set plage = Selection
lgn = plage.Rows.Count
For Each c In plage
If Application.CountIf(plage, c) > 1 Then plage.Replace






















What:=c, Replacement:=""


Next
For i = 1 To lgn
If Application.CountA(plage.Rows(i)) >= 1 Then
plg = plage.Rows(i).SpecialCells(xlCellTypeConstants,






















1).Address


Range(plg).Cut
Range("A" & i).Select
ActiveSheet.Paste
End If
Next
End Sub

isabelle

garnote a écrit :






Bonjour,

Je sélectionne une plage simple contenant (exemple ) :

1 2 3 _ _

8 7 9 1 _

4 5 6 7 8

Les _ représentant des cellules vides.

Par macro, je veux éliminer tous les doublons
et obtenir comme nouvelle plage :

2 3 _ _ _

9 _ _ _ _

4 5 6 _ _

Doit pouvoir se généraliser pour une plage quelconque
dont chaque ligne commence par une série de nombres
suivi de cellules vides.La dernière ligne ne contient
jamais de cellules vides.

Serge



















































1 2 3