OVH Cloud OVH Cloud

Doublons et dictionnaires *.dic

18 réponses
Avatar
GGAL
bonjour,
Bonjour,
Je possède plusieurs dictionnaires *.dic, et je veux n'en faire qu'un. Sous
Excel, je les ai mis à la suite dans la colonne A. Celui issu de Netscape
présente des mots sans les traits d'union pour les noms composés. J'ai donc
bricolé une macro, mais pas très rapide. Quelqu'un aurait-il quelque chose de
plus efficace ?
Merci d'avance.

Ggal

Sub tri()
Columns(1).Sort key1:=Range("a1")
n = 1
k = Range("a65536").End(xlUp).Row
For i = 1 To k
If Range("a" & n) = Range("a" & n + 1) Then
Range("a" & n).Delete shift:=xlShiftUp
k = k - 1
n = n - 1
End If
n = n + 1
Next i

t = 2

For j = 2 To k
tmp_1 = Range("a" & t)
For i = 1 To Len(tmp_1)
If Mid(tmp_1, i, 1) = "-" Then
tmp_1 = Left(tmp_1, i - 1) & Mid(tmp_1, i + 1)
End If
Next i
If tmp_1 = Range("a" & t - 1) Then
Range("a" & t - 1).Delete shift:=xlShiftUp
k = k - 1
t = t - 1
End If
t = t + 1
Next j
End Sub

8 réponses

1 2
Avatar
JpPradier
au final, ca donnerait :

Sub tri()
Columns(1).Sort key1:=Range("a1")

k = Range("a65536").End(xlUp).Row
For i = k To 2 Step -1
If Replace(Range("a" & i).Value, "-", "") = Range("a" & i - 1).Value Then
Range("a" & i - 1).Delete shift:=xlShiftUp
End If
Next i

End Sub

j-p
Avatar
GGAL
OK, ça marche, je vais tester la vitesse.
GGAL


au final, ca donnerait :

Sub tri()
Columns(1).Sort key1:=Range("a1")

k = Range("a65536").End(xlUp).Row
For i = k To 2 Step -1
If Replace(Range("a" & i).Value, "-", "") = Range("a" & i - 1).Value Then
Range("a" & i - 1).Delete shift:=xlShiftUp
End If
Next i

End Sub

j-p



Avatar
jps
on dit OK, ça marche, MERCI
jps

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

OK, ça marche, je vais tester la vitesse.
GGAL


au final, ca donnerait :

Sub tri()
Columns(1).Sort key1:=Range("a1")

k = Range("a65536").End(xlUp).Row
For i = k To 2 Step -1
If Replace(Range("a" & i).Value, "-", "") = Range("a" & i - 1).Value
Then
Range("a" & i - 1).Delete shift:=xlShiftUp
End If
Next i

End Sub

j-p





Avatar
Garette
Bonsoir,

Voici un petit bout de code qui nettoie les doublons et qui enlève les mots
qui n'ont pas de tiret (et qui devraient en avoir).
On doit pouvoir optimiser un peu le code.
Ca gere bien qd il y a plusieurs tirets .
Tiens moi au courant si ça marche chez toi. Je n'ai fait le test que sur une
petite zone.


Sub Nettoyeur Dictionnaire()

'Définition de la zone à traiter + tri
k = Range("a65536").End(xlUp).Row
Set MaZone = Range(Cells(1, 1), Cells(k, 1))
MaZone.Sort key1:Îlls(1, 1)

'Suppression des doublons
For Each CellTest In MaZone
If CellTest = CellTest.Offset(1, 0).Resize(1, 1) Then CellTest.ClearContents
Next

'Définition de la nouvelle zone à traiter + tri (supprime les vides)
MaZone.Sort key1:Îlls(1, 1)
k = Range("a65536").End(xlUp).Row
Set MaZone = Range(Cells(1, 1), Cells(k, 1))

'Suppression des mots sans tirets
For Each CellTest In MaZone
Select Case InStr(1, CellTest, "-") <> 0
Case CellTest.Row = 1 'Ne fait rien s'il y a un mot avec tiret dans la
1ere ligne
Case Replace(CellTest, "-", "") = CellTest.Offset(-1, 0).Resize(1, 1)
CellTest.Offset(-1, 0).Resize(1, 1).ClearContents
End Select
Next
MaZone.Sort key1:Îlls(1, 1)

End Sub
Avatar
GGAL
Bonsoir Garette

La suppression de tous les doublons se fait bien, mais pas les mots sans
traits d'union.
Une erreur d'exécution 1004 est renvoyée à ce stade.
Il reste par exemple :
arcenciel
arc-en-ciel
mer
tireauflanc
tire-au-flanc

D'autre part, si à la maison j'ai Excel 2003, au travail c'est Excel 97, qui
n'intègre pas la fonction Replace. Une procédure «universelle» m'arrangerait.
merci
GGAL
Avatar
Garette
Bonsoir GGAL,

Effectivement, c'est bizarre que ça ait pu fonctionner ...
Laà c'est mieux :
Sub Dictionnaire2()
'Définition de la zone à traiter
k = Range("a65536").End(xlUp).Row
Set MaZone = Range(Cells(1, 1), Cells(k, 1))
MaZone.Sort key1:Îlls(1, 1)

'Suppression des doublons
For Each CellTest In MaZone
If CellTest = CellTest.Offset(1, 0).Resize(1, 1) Then CellTest.ClearContents
Next

'Définition de la nouvelle zone à traiter (supprime les vides)
MaZone.Sort key1:Îlls(1, 1)
k = Range("a65536").End(xlUp).Row
Set MaZone = Range(Cells(1, 1), Cells(k, 1))

'Suppression des mots sans tirets
For Each CellTest In MaZone
If CellTest.Row <> 1 And InStr(1, CellTest, "-") <> 0 Then
If Replace(CellTest, "-", "") = CellTest.Offset(-1, 0).Resize(1, 1) Then
CellTest.Offset(-1, 0).Resize(1, 1).ClearContents
End If
End If
Next
MaZone.Sort key1:Îlls(1, 1)
End Sub

C'est bizarre que Replace ne fonctionne pas sous XL97.
C'est issue du menu REchercher/Remplacer qui existe depuis longtemps dans
Excel.
Il faut inclure une petite procédure qui enlève les tirets ...
Avatar
Garette
Hello,

Une version sans Replace ... on doit pouvoir faire plus simple ....

Sub Dictionnaire3()
'Définition de la zone à traiter
k = Range("a65536").End(xlUp).Row
Set MaZone = Range(Cells(1, 1), Cells(k, 1))
MaZone.Sort key1:Îlls(1, 1)

'Suppression des doublons
For Each CellTest In MaZone
If CellTest = CellTest.Offset(1, 0).Resize(1, 1) Then CellTest.ClearContents
Next

'Définition de la nouvelle zone à traiter (supprime les vides)
MaZone.Sort key1:Îlls(1, 1)
k = Range("a65536").End(xlUp).Row
Set MaZone = Range(Cells(1, 1), Cells(k, 1))

'Suppression des mots sans tirets
For Each CellTest In MaZone
If CellTest.Row <> 1 And InStr(1, CellTest, "-") <> 0 Then
'-----------------------------------------------------
mavar = CellTest
X = 1
While X <> 0
X = InStr(1, mavar, "-", 0)
mavar = Left(mavar, X - 1) & Right(mavar, Len(mavar) - X)
X = InStr(1, mavar, "-", 0)
Wend
'-----------------------------------------------------
If mavar = CellTest.Offset(-1, 0).Resize(1, 1) Then
CellTest.Offset(-1, 0).Resize(1, 1).ClearContents
End If
End If
Next
MaZone.Sort key1:Îlls(1, 1)
End Sub
Avatar
GGAL
Re]
Les deux versions fonctionnent bien chez moi sous XL2003, reste à voir sous
XL97, et la rapidité.
Si l'on en croit la littérature, d'autres fonctions ne figurent pas dans
XL97 et les versions antérieures : CallByName, FormatCurrency,
FormatDateTime, FormatNumber, FormatPercent, InStrRev, Join, Replace, Split,
StrReverse.
Merci.
GGAL
1 2