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

10 réponses

1 2
Avatar
jps
bonjour GGAL
peut-être peux-tu remplacer l'intervalle dans celui de NN par un tiret?
jps

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

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




Avatar
GGAL
Il n'y a pas d'intervalle : par exemple « arc-en-ciel » se transforme en «
arcenciel » dans le dictionnaire de Netscape, d'où l'artifice.
Ggal


bonjour GGAL
peut-être peux-tu remplacer l'intervalle dans celui de NN par un tiret?
jps

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

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









Avatar
GGAL
Il n'y a pas d'intervalle. Un mot comme " arc-en-ciel " est transformé en
"arcenciel", d'où l'artifice.
Ggal


bonjour GGAL
peut-être peux-tu remplacer l'intervalle dans celui de NN par un tiret?
jps

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

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









Avatar
jps
alors je ne sais pas...désolé
jps

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

Il n'y a pas d'intervalle. Un mot comme " arc-en-ciel " est transformé en
"arcenciel", d'où l'artifice.
Ggal


bonjour GGAL
peut-être peux-tu remplacer l'intervalle dans celui de NN par un tiret?
jps

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

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











Avatar
Garette
Bonjour,

J'ai regardé vite fait la macro.
A priori, tu gères bien les histoires de tirets donc les doublons sont bien
supprimés.
Ce qui prend du temps, c'est le "Delete".
J'utiliserai plutot "ClearContents".

Ca va supprimer les doublons et faire des trous dans la colonne.
Donc à la fin, il faut lancer un tri sur la zone traitée ;-)

Ca devrait aller plus vite.
Bonne journée.
Avatar
JpPradier
Bonjour GGAL

Il serait peut-etre plus judicieux de faire un Edition/rechercher - / remplacer "" puis
de lancer ta macro de comparaison ensuite ?

j-p
Avatar
GGAL
En fait j'ai déjà essayé de plusieurs façons.
Effectivement , dans la colonne B avec une formule un peu élaborée avec la
fonction Remplacer, et un Recopier vers le bas, et ensuite une macro toute
simple, ça marche. Mais si on a 10 000 mots, c'est un peu lourd.
Mais je cherchais une procédure complète pour ne rien oublier, et aider des
collègues.
Merci, ce n'est pas grave.
GGAL


Bonjour GGAL

Il serait peut-etre plus judicieux de faire un Edition/rechercher - / remplacer "" puis
de lancer ta macro de comparaison ensuite ?

j-p




Avatar
JpPradier
Re

Non, je parlais du Menu Edition/Rechercher/Remplacer ... ou Ctrl+H
Ca te remplace tous tes tirets par rien en beaucoup plus rapide.

j-p
Avatar
GGAL
Oui d'accord, mais les mots corrects sont avec traits d'union que je garde,
et je veux supprimer les mots sans traits d'union. Si on a par exemple en
colonne "A"
arcenciel
arc-en-ciel
c'est arc-en-ciel qui doit rester après tri.
d'où la difficulté...
GGAL


Re

Non, je parlais du Menu Edition/Rechercher/Remplacer ... ou Ctrl+H
Ca te remplace tous tes tirets par rien en beaucoup plus rapide.

j-p



Avatar
JpPradier
Ok, je n'avais pas compris. Tu peux utiliser dans ta boucle quelque chose comme :

If Replace(Range("a" & n).Value, "-" , "")=Range("a" & n+1).value then
Range("a" & n).Delete shift:=xlShiftUp

D'un autre coté, si tu pars par le bas du tableau, tu n'as pas besoin de gerer les numéros
de ligne qui sautent.

j-p
1 2