Apparier des termes commençant par les mêmes lettres
3 réponses
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:
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 :
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
FFO
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:
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 :
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:
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 :
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:
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 :
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:
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 :
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:
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 :
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:
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 :