Apparier des termes commençant par les mêmes lettres

Le
Annaïch
Bonjour à tous,

Aujourd’hui j’ai une autre question concernant les listes de termes ("voir
Intersection entre deux listes" 13-04-2007).

J’aimerais apparier des termes dont les premières lettres sont semblables.
Ces termes appartiennent à deux listes. Les mettre par ordre alphabétique ne
suffit pas (j’ai simplifié mon exemple, beaucoup de mots ne peuvent pas être
appariés comme : rapide et promptement), de plus les listes contiennent des
milliers de termes. Dans le lexique français, le mot le plus long possède 25
lettres soit anticonstitutionnellement (il existe des termes techniques plus
longs, mais c’est rare), par ailleurs il n’est pas utile d’apparier des
termes ayant moins de 4 premières lettres semblables, le nombre d’erreurs
deviendrait trop important. Voici un exemple de liste:

formidable calmement
institutionnalisation anticonstitutionnellement
éléphant électrisant
calme anticonstitutionnellement
électrique formidablement
anticonstitutionnel éléphantesque
rapide promptement

Donc, j’aimerais savoir si avec Excel on peut apparier des termes de la
façon suivante : en premier toutes les chaînes de caractères ayant les 24
premières lettres semblables, puis toutes celles ayant les 23 premières
lettres semblables et ainsi de suite jusqu’à celles possédant les 4 premières
lettres semblables afin d’obtenir une liste comme celle-ci :

anticonstitutionnel anticonstitutionnellement
institutionnalisation institutionnellement
formidable formidablement
éléphant éléphantesque
électrique électrisant
calme calmement

Merci d’avance pour vos réponses,

Annaïch
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
FFO
Le #4492261
Salut Annaich

Demande originale qui me permet de te proposer un code un peu lourd certes
mais compte tenu de la complexité du but à atteindre il a pas à rougir de son
état
Le tout c'est qu'il fonctionne tel que tu le souhaites
Soit donc la feuil2 colonne A et B à traiter
les noms appariés sont ramenés colonne C et D :

Range("C1").Select
For Each c In Worksheets("Feuil2").Range([A1], [A65535].End(xlUp))
For Each d In Worksheets("Feuil2").Range([B1], [B65535].End(xlUp))
For I = 1 To Len(d)
If Len(d) - I <= 3 Then
m1 = d
Else
m1 = Mid(d, 1, Len(d) - I)
End If
m2 = c
If m1 = m2 Then
ActiveCell = c
ActiveCell.Offset(0, 1) = d
ActiveCell.Offset(1, 0).Select
Exit For
End If
Next
For I = 1 To Len(c)
m1 = d
If Len(c) - I <= 3 Then
m2 = c
Else
m2 = Mid(c, 1, Len(c) - I)
End If
If m1 = m2 Then
ActiveCell = c
ActiveCell.Offset(0, 1) = d
ActiveCell.Offset(1, 0).Select
Exit For
End If
Next
Next
Next
Range("C65535").End(xlUp).Select
Range(ActiveCell, "D1").Select
Selection.Sort Key1:=Range("C1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
For Each e In Worksheets("Feuil2").Range([C1], [C65535].End(xlUp))
If e = e.Offset(1, 0) And e.Offset(0, 1) = e.Offset(1, 1) Then
Range(e, e.Offset(0, 1)).Clear
End If
Next
Range("C65535").End(xlUp).Select
Range(ActiveCell, "D1").Select
Selection.Sort Key1:=Range("C1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal

Sur une dizaine de lignes le code fonctionne trés bien
Sur 500 lignes le temps de traitement atteind plus de 2 minutes
Il faudra peut être s'armer de patience pour plus de 1000 lignes

Il faut comprendre que le traitement touche beaucoup de combinaison de
chaque mot de la colonne A vers B et vis versa

Ce qui explique ce délais

J'espère que tu pourras en tirer quand même quelque chose

Dit moi !!!




Bonjour à tous,

Aujourd’hui j’ai une autre question concernant les listes de termes ("voir
Intersection entre deux listes" 13-04-2007).

J’aimerais apparier des termes dont les premières lettres sont semblables.
Ces termes appartiennent à deux listes. Les mettre par ordre alphabétique ne
suffit pas (j’ai simplifié mon exemple, beaucoup de mots ne peuvent pas être
appariés comme : rapide et promptement), de plus les listes contiennent des
milliers de termes. Dans le lexique français, le mot le plus long possède 25
lettres soit anticonstitutionnellement (il existe des termes techniques plus
longs, mais c’est rare), par ailleurs il n’est pas utile d’apparier des
termes ayant moins de 4 premières lettres semblables, le nombre d’erreurs
deviendrait trop important. Voici un exemple de liste:

formidable calmement
institutionnalisation anticonstitutionnellement
éléphant électrisant
calme anticonstitutionnellement
électrique formidablement
anticonstitutionnel éléphantesque
rapide promptement

Donc, j’aimerais savoir si avec Excel on peut apparier des termes de la
façon suivante : en premier toutes les chaînes de caractères ayant les 24
premières lettres semblables, puis toutes celles ayant les 23 premières
lettres semblables et ainsi de suite jusqu’à celles possédant les 4 premières
lettres semblables afin d’obtenir une liste comme celle-ci :

anticonstitutionnel anticonstitutionnellement
institutionnalisation institutionnellement
formidable formidablement
éléphant éléphantesque
électrique électrisant
calme calmement

Merci d’avance pour vos réponses,

Annaïch



FFO
Le #4492151
Re bonjours
Solution en s'affranchissant des majuscules/minuscules :

Range("C1").Select
For Each c In Worksheets("Feuil2").Range([A1], [A65535].End(xlUp))
For Each d In Worksheets("Feuil2").Range([B1], [B65535].End(xlUp))
For I = 1 To Len(d)
If Len(d) - I <= 3 Then
m1 = d
Else
m1 = Mid(d, 1, Len(d) - I)
End If
m2 = c
If UCase(m1) = UCase(m2) Then
ActiveCell = c
ActiveCell.Offset(0, 1) = d
ActiveCell.Offset(1, 0).Select
Exit For
End If
Next
For I = 1 To Len(c)
m1 = d
If Len(c) - I <= 3 Then
m2 = c
Else
m2 = Mid(c, 1, Len(c) - I)
End If
If UCase(m1) = UCase(m2) Then
ActiveCell = c
ActiveCell.Offset(0, 1) = d
ActiveCell.Offset(1, 0).Select
Exit For
End If
Next
Next
Next
Range("C65535").End(xlUp).Select
Range(ActiveCell, "D1").Select
Selection.Sort Key1:=Range("C1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
For Each e In Worksheets("Feuil2").Range([C1], [C65535].End(xlUp))
If UCase(e) = UCase(e.Offset(1, 0)) And UCase(e.Offset(0, 1)) =
UCase(e.Offset(1, 1)) Then
Range(e, e.Offset(0, 1)).Clear
End If
Next
Range("C65535").End(xlUp).Select
Range(ActiveCell, "D1").Select
Selection.Sort Key1:=Range("C1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal


Bonjour à tous,

Aujourd’hui j’ai une autre question concernant les listes de termes ("voir
Intersection entre deux listes" 13-04-2007).

J’aimerais apparier des termes dont les premières lettres sont semblables.
Ces termes appartiennent à deux listes. Les mettre par ordre alphabétique ne
suffit pas (j’ai simplifié mon exemple, beaucoup de mots ne peuvent pas être
appariés comme : rapide et promptement), de plus les listes contiennent des
milliers de termes. Dans le lexique français, le mot le plus long possède 25
lettres soit anticonstitutionnellement (il existe des termes techniques plus
longs, mais c’est rare), par ailleurs il n’est pas utile d’apparier des
termes ayant moins de 4 premières lettres semblables, le nombre d’erreurs
deviendrait trop important. Voici un exemple de liste:

formidable calmement
institutionnalisation anticonstitutionnellement
éléphant électrisant
calme anticonstitutionnellement
électrique formidablement
anticonstitutionnel éléphantesque
rapide promptement

Donc, j’aimerais savoir si avec Excel on peut apparier des termes de la
façon suivante : en premier toutes les chaînes de caractères ayant les 24
premières lettres semblables, puis toutes celles ayant les 23 premières
lettres semblables et ainsi de suite jusqu’à celles possédant les 4 premières
lettres semblables afin d’obtenir une liste comme celle-ci :

anticonstitutionnel anticonstitutionnellement
institutionnalisation institutionnellement
formidable formidablement
éléphant éléphantesque
électrique électrisant
calme calmement

Merci d’avance pour vos réponses,

Annaïch



Annaïch
Le #4491061
Bonjour FFO,

Je suis vraiment contente du résultat, ça fonctionne à merveille!

Merci,

Annaïch
Publicité
Poster une réponse
Anonyme