bonjour je cherche une fonction qui permettrait en précisant des lettres de
me sortir tous les mots qui les contiennent parmi une liste donnée.
Merci de vos réponses
Derniere petite question : serait il possible de trier la colonne de résultat en fonction du nombre de lettres ?
"Daniel.M" a écrit dans le message de news:
Salut grodep,
Si tu es encore intéressé, voici un bout de code (à mettre dans un nouveau module) qui extrait en une colonne des mots choisis d'une plage bi-dimensionnelle. Ces mots "choisis" doivent contenir au moins autant des mêmes
lettres qui le motclef (celui mis en B1 dans l'exemple soumis).
Le code est très facile à adapter si tu veux qui les mots choisis aient EXACTEMENT les mêmes lettres (en même nombre) que celles du motclef (on change
">" pour "<>" dans le code).
Tu DOIS changer les plages pour y mettre celles à partir desquelles tu travailles (voir les lignes 'à adapter) dans la procédure TrouveChainesContenantToutesLesLettresDuMotClef().
Salutations,
Daniel M.
' Début du code Public MotClef As String Public nLP As Integer Public LesLettres(1 To 255) As Integer
Sub PrepareLettres(Optional Bidon As Boolean) Dim i As Integer, C As String * 1
Erase LesLettres ' on remet tout à zéro
nLP = Len(MotClef) MotClef = LCase(MotClef) ' mise en minuscule For i = 1 To nLP ' pour chacune des lettres du motclef C = Mid(MotClef, i, 1) LesLettres(Asc(C)) = nLP - Len(Replace(MotClef, C, "")) ' combien de lettre 'c' dans le motclef et reporter le ' résultat dans un tableau LesLettres() où l'indice ' correspond à Asc(c) Next i End Sub
Function Lettres(CeMot As String) As Boolean
Dim i As Integer, j As Integer Dim C As String * 1, S As String
Lettres = True j = Len(CeMot) S = LCase(CeMot) For i = 1 To nLP ' pour chacune des lettres du MotClef C = Mid(MotClef, i, 1) If LesLettres(Asc(C)) > j - Len(Replace(S, C, "")) Then ' on doit avoir au minimum le nombre de lettres Lettres = False: Exit For End If Next i End Function
Sub TrouveChainesContenantToutesLesLettresDuMotClef() Dim InPlage As Range, OutPlage As Range Dim nLi As Long, nCol As Integer Dim LesColsOut As Range Dim i As Long, j As Integer, k As Long
MotClef = Range("B1") ' ou MotClef = "aes", à adapter
Set InPlage = Range("A2:F65000") ' à adapter nLi = InPlage.Rows.Count nCol = InPlage.Columns.Count Set OutPlage = Range("H2") ' à adapter
PrepareLettres ' Appelée 1 seule fois. Accélère le traitement
For i = 1 To nLi For j = 1 To nCol If Lettres(InPlage(i, j)) Then k = k + 1: OutPlage(k) = InPlage(i, j) Next j Next i
End Sub
"grodep" wrote in message news:O8mAK3$
bonjour je cherche une fonction qui permettrait en précisant des lettres de
me sortir tous les mots qui les contiennent parmi une liste donnée. Merci de vos réponses
Derniere petite question :
serait il possible de trier la colonne de résultat en fonction du nombre de
lettres ?
"Daniel.M" <prenom.maher@bigfoot.inutil.com> a écrit dans le message de
news:Olv7rJHOEHA.556@tk2msftngp13.phx.gbl...
Salut grodep,
Si tu es encore intéressé, voici un bout de code (à mettre dans un nouveau
module) qui extrait en une colonne des mots choisis d'une plage
bi-dimensionnelle. Ces mots "choisis" doivent contenir au moins autant des
mêmes
lettres qui le motclef (celui mis en B1 dans l'exemple soumis).
Le code est très facile à adapter si tu veux qui les mots choisis aient
EXACTEMENT les mêmes lettres (en même nombre) que celles du motclef (on
change
">" pour "<>" dans le code).
Tu DOIS changer les plages pour y mettre celles à partir desquelles tu
travailles (voir les lignes 'à adapter) dans la procédure
TrouveChainesContenantToutesLesLettresDuMotClef().
Salutations,
Daniel M.
' Début du code
Public MotClef As String
Public nLP As Integer
Public LesLettres(1 To 255) As Integer
Sub PrepareLettres(Optional Bidon As Boolean)
Dim i As Integer, C As String * 1
Erase LesLettres ' on remet tout à zéro
nLP = Len(MotClef)
MotClef = LCase(MotClef) ' mise en minuscule
For i = 1 To nLP ' pour chacune des lettres du motclef
C = Mid(MotClef, i, 1)
LesLettres(Asc(C)) = nLP - Len(Replace(MotClef, C, ""))
' combien de lettre 'c' dans le motclef et reporter le
' résultat dans un tableau LesLettres() où l'indice
' correspond à Asc(c)
Next i
End Sub
Function Lettres(CeMot As String) As Boolean
Dim i As Integer, j As Integer
Dim C As String * 1, S As String
Lettres = True
j = Len(CeMot)
S = LCase(CeMot)
For i = 1 To nLP ' pour chacune des lettres du MotClef
C = Mid(MotClef, i, 1)
If LesLettres(Asc(C)) > j - Len(Replace(S, C, "")) Then
' on doit avoir au minimum le nombre de lettres
Lettres = False: Exit For
End If
Next i
End Function
Sub TrouveChainesContenantToutesLesLettresDuMotClef()
Dim InPlage As Range, OutPlage As Range
Dim nLi As Long, nCol As Integer
Dim LesColsOut As Range
Dim i As Long, j As Integer, k As Long
MotClef = Range("B1") ' ou MotClef = "aes", à adapter
Set InPlage = Range("A2:F65000") ' à adapter
nLi = InPlage.Rows.Count
nCol = InPlage.Columns.Count
Set OutPlage = Range("H2") ' à adapter
PrepareLettres ' Appelée 1 seule fois. Accélère le traitement
For i = 1 To nLi
For j = 1 To nCol
If Lettres(InPlage(i, j)) Then k = k + 1: OutPlage(k) = InPlage(i, j)
Next j
Next i
End Sub
"grodep" <grodep@hoOtmail.com> wrote in message
news:O8mAK3$NEHA.3712@TK2MSFTNGP10.phx.gbl...
bonjour je cherche une fonction qui permettrait en précisant des lettres
de
me sortir tous les mots qui les contiennent parmi une liste donnée.
Merci de vos réponses
Derniere petite question : serait il possible de trier la colonne de résultat en fonction du nombre de lettres ?
"Daniel.M" a écrit dans le message de news:
Salut grodep,
Si tu es encore intéressé, voici un bout de code (à mettre dans un nouveau module) qui extrait en une colonne des mots choisis d'une plage bi-dimensionnelle. Ces mots "choisis" doivent contenir au moins autant des mêmes
lettres qui le motclef (celui mis en B1 dans l'exemple soumis).
Le code est très facile à adapter si tu veux qui les mots choisis aient EXACTEMENT les mêmes lettres (en même nombre) que celles du motclef (on change
">" pour "<>" dans le code).
Tu DOIS changer les plages pour y mettre celles à partir desquelles tu travailles (voir les lignes 'à adapter) dans la procédure TrouveChainesContenantToutesLesLettresDuMotClef().
Salutations,
Daniel M.
' Début du code Public MotClef As String Public nLP As Integer Public LesLettres(1 To 255) As Integer
Sub PrepareLettres(Optional Bidon As Boolean) Dim i As Integer, C As String * 1
Erase LesLettres ' on remet tout à zéro
nLP = Len(MotClef) MotClef = LCase(MotClef) ' mise en minuscule For i = 1 To nLP ' pour chacune des lettres du motclef C = Mid(MotClef, i, 1) LesLettres(Asc(C)) = nLP - Len(Replace(MotClef, C, "")) ' combien de lettre 'c' dans le motclef et reporter le ' résultat dans un tableau LesLettres() où l'indice ' correspond à Asc(c) Next i End Sub
Function Lettres(CeMot As String) As Boolean
Dim i As Integer, j As Integer Dim C As String * 1, S As String
Lettres = True j = Len(CeMot) S = LCase(CeMot) For i = 1 To nLP ' pour chacune des lettres du MotClef C = Mid(MotClef, i, 1) If LesLettres(Asc(C)) > j - Len(Replace(S, C, "")) Then ' on doit avoir au minimum le nombre de lettres Lettres = False: Exit For End If Next i End Function
Sub TrouveChainesContenantToutesLesLettresDuMotClef() Dim InPlage As Range, OutPlage As Range Dim nLi As Long, nCol As Integer Dim LesColsOut As Range Dim i As Long, j As Integer, k As Long
MotClef = Range("B1") ' ou MotClef = "aes", à adapter
Set InPlage = Range("A2:F65000") ' à adapter nLi = InPlage.Rows.Count nCol = InPlage.Columns.Count Set OutPlage = Range("H2") ' à adapter
PrepareLettres ' Appelée 1 seule fois. Accélère le traitement
For i = 1 To nLi For j = 1 To nCol If Lettres(InPlage(i, j)) Then k = k + 1: OutPlage(k) = InPlage(i, j) Next j Next i
End Sub
"grodep" wrote in message news:O8mAK3$
bonjour je cherche une fonction qui permettrait en précisant des lettres de
me sortir tous les mots qui les contiennent parmi une liste donnée. Merci de vos réponses
grodep
j'ai parlé un peu vite, j'ai trouvé tout seul ... je grandis :D "grodep" a écrit dans le message de news:uet4S$
Derniere petite question : serait il possible de trier la colonne de résultat en fonction du nombre de
lettres ?
"Daniel.M" a écrit dans le message de news:
Salut grodep,
Si tu es encore intéressé, voici un bout de code (à mettre dans un nouveau
module) qui extrait en une colonne des mots choisis d'une plage bi-dimensionnelle. Ces mots "choisis" doivent contenir au moins autant des
mêmes
lettres qui le motclef (celui mis en B1 dans l'exemple soumis).
Le code est très facile à adapter si tu veux qui les mots choisis aient EXACTEMENT les mêmes lettres (en même nombre) que celles du motclef (on change
">" pour "<>" dans le code).
Tu DOIS changer les plages pour y mettre celles à partir desquelles tu travailles (voir les lignes 'à adapter) dans la procédure TrouveChainesContenantToutesLesLettresDuMotClef().
Salutations,
Daniel M.
' Début du code Public MotClef As String Public nLP As Integer Public LesLettres(1 To 255) As Integer
Sub PrepareLettres(Optional Bidon As Boolean) Dim i As Integer, C As String * 1
Erase LesLettres ' on remet tout à zéro
nLP = Len(MotClef) MotClef = LCase(MotClef) ' mise en minuscule For i = 1 To nLP ' pour chacune des lettres du motclef C = Mid(MotClef, i, 1) LesLettres(Asc(C)) = nLP - Len(Replace(MotClef, C, "")) ' combien de lettre 'c' dans le motclef et reporter le ' résultat dans un tableau LesLettres() où l'indice ' correspond à Asc(c) Next i End Sub
Function Lettres(CeMot As String) As Boolean
Dim i As Integer, j As Integer Dim C As String * 1, S As String
Lettres = True j = Len(CeMot) S = LCase(CeMot) For i = 1 To nLP ' pour chacune des lettres du MotClef C = Mid(MotClef, i, 1) If LesLettres(Asc(C)) > j - Len(Replace(S, C, "")) Then ' on doit avoir au minimum le nombre de lettres Lettres = False: Exit For End If Next i End Function
Sub TrouveChainesContenantToutesLesLettresDuMotClef() Dim InPlage As Range, OutPlage As Range Dim nLi As Long, nCol As Integer Dim LesColsOut As Range Dim i As Long, j As Integer, k As Long
MotClef = Range("B1") ' ou MotClef = "aes", à adapter
Set InPlage = Range("A2:F65000") ' à adapter nLi = InPlage.Rows.Count nCol = InPlage.Columns.Count Set OutPlage = Range("H2") ' à adapter
PrepareLettres ' Appelée 1 seule fois. Accélère le traitement
For i = 1 To nLi For j = 1 To nCol If Lettres(InPlage(i, j)) Then k = k + 1: OutPlage(k) = InPlage(i, j) Next j Next i
End Sub
"grodep" wrote in message news:O8mAK3$
bonjour je cherche une fonction qui permettrait en précisant des lettres
de
me sortir tous les mots qui les contiennent parmi une liste donnée. Merci de vos réponses
j'ai parlé un peu vite, j'ai trouvé tout seul ... je grandis :D
"grodep" <grodep@hoOtmail.com> a écrit dans le message de
news:uet4S$LOEHA.3712@TK2MSFTNGP10.phx.gbl...
Derniere petite question :
serait il possible de trier la colonne de résultat en fonction du nombre
de
lettres ?
"Daniel.M" <prenom.maher@bigfoot.inutil.com> a écrit dans le message de
news:Olv7rJHOEHA.556@tk2msftngp13.phx.gbl...
Salut grodep,
Si tu es encore intéressé, voici un bout de code (à mettre dans un
nouveau
module) qui extrait en une colonne des mots choisis d'une plage
bi-dimensionnelle. Ces mots "choisis" doivent contenir au moins autant
des
mêmes
lettres qui le motclef (celui mis en B1 dans l'exemple soumis).
Le code est très facile à adapter si tu veux qui les mots choisis aient
EXACTEMENT les mêmes lettres (en même nombre) que celles du motclef (on
change
">" pour "<>" dans le code).
Tu DOIS changer les plages pour y mettre celles à partir desquelles tu
travailles (voir les lignes 'à adapter) dans la procédure
TrouveChainesContenantToutesLesLettresDuMotClef().
Salutations,
Daniel M.
' Début du code
Public MotClef As String
Public nLP As Integer
Public LesLettres(1 To 255) As Integer
Sub PrepareLettres(Optional Bidon As Boolean)
Dim i As Integer, C As String * 1
Erase LesLettres ' on remet tout à zéro
nLP = Len(MotClef)
MotClef = LCase(MotClef) ' mise en minuscule
For i = 1 To nLP ' pour chacune des lettres du motclef
C = Mid(MotClef, i, 1)
LesLettres(Asc(C)) = nLP - Len(Replace(MotClef, C, ""))
' combien de lettre 'c' dans le motclef et reporter le
' résultat dans un tableau LesLettres() où l'indice
' correspond à Asc(c)
Next i
End Sub
Function Lettres(CeMot As String) As Boolean
Dim i As Integer, j As Integer
Dim C As String * 1, S As String
Lettres = True
j = Len(CeMot)
S = LCase(CeMot)
For i = 1 To nLP ' pour chacune des lettres du MotClef
C = Mid(MotClef, i, 1)
If LesLettres(Asc(C)) > j - Len(Replace(S, C, "")) Then
' on doit avoir au minimum le nombre de lettres
Lettres = False: Exit For
End If
Next i
End Function
Sub TrouveChainesContenantToutesLesLettresDuMotClef()
Dim InPlage As Range, OutPlage As Range
Dim nLi As Long, nCol As Integer
Dim LesColsOut As Range
Dim i As Long, j As Integer, k As Long
MotClef = Range("B1") ' ou MotClef = "aes", à adapter
Set InPlage = Range("A2:F65000") ' à adapter
nLi = InPlage.Rows.Count
nCol = InPlage.Columns.Count
Set OutPlage = Range("H2") ' à adapter
PrepareLettres ' Appelée 1 seule fois. Accélère le traitement
For i = 1 To nLi
For j = 1 To nCol
If Lettres(InPlage(i, j)) Then k = k + 1: OutPlage(k) = InPlage(i, j)
Next j
Next i
End Sub
"grodep" <grodep@hoOtmail.com> wrote in message
news:O8mAK3$NEHA.3712@TK2MSFTNGP10.phx.gbl...
bonjour je cherche une fonction qui permettrait en précisant des
lettres
de
me sortir tous les mots qui les contiennent parmi une liste donnée.
Merci de vos réponses
j'ai parlé un peu vite, j'ai trouvé tout seul ... je grandis :D "grodep" a écrit dans le message de news:uet4S$
Derniere petite question : serait il possible de trier la colonne de résultat en fonction du nombre de
lettres ?
"Daniel.M" a écrit dans le message de news:
Salut grodep,
Si tu es encore intéressé, voici un bout de code (à mettre dans un nouveau
module) qui extrait en une colonne des mots choisis d'une plage bi-dimensionnelle. Ces mots "choisis" doivent contenir au moins autant des
mêmes
lettres qui le motclef (celui mis en B1 dans l'exemple soumis).
Le code est très facile à adapter si tu veux qui les mots choisis aient EXACTEMENT les mêmes lettres (en même nombre) que celles du motclef (on change
">" pour "<>" dans le code).
Tu DOIS changer les plages pour y mettre celles à partir desquelles tu travailles (voir les lignes 'à adapter) dans la procédure TrouveChainesContenantToutesLesLettresDuMotClef().
Salutations,
Daniel M.
' Début du code Public MotClef As String Public nLP As Integer Public LesLettres(1 To 255) As Integer
Sub PrepareLettres(Optional Bidon As Boolean) Dim i As Integer, C As String * 1
Erase LesLettres ' on remet tout à zéro
nLP = Len(MotClef) MotClef = LCase(MotClef) ' mise en minuscule For i = 1 To nLP ' pour chacune des lettres du motclef C = Mid(MotClef, i, 1) LesLettres(Asc(C)) = nLP - Len(Replace(MotClef, C, "")) ' combien de lettre 'c' dans le motclef et reporter le ' résultat dans un tableau LesLettres() où l'indice ' correspond à Asc(c) Next i End Sub
Function Lettres(CeMot As String) As Boolean
Dim i As Integer, j As Integer Dim C As String * 1, S As String
Lettres = True j = Len(CeMot) S = LCase(CeMot) For i = 1 To nLP ' pour chacune des lettres du MotClef C = Mid(MotClef, i, 1) If LesLettres(Asc(C)) > j - Len(Replace(S, C, "")) Then ' on doit avoir au minimum le nombre de lettres Lettres = False: Exit For End If Next i End Function
Sub TrouveChainesContenantToutesLesLettresDuMotClef() Dim InPlage As Range, OutPlage As Range Dim nLi As Long, nCol As Integer Dim LesColsOut As Range Dim i As Long, j As Integer, k As Long
MotClef = Range("B1") ' ou MotClef = "aes", à adapter
Set InPlage = Range("A2:F65000") ' à adapter nLi = InPlage.Rows.Count nCol = InPlage.Columns.Count Set OutPlage = Range("H2") ' à adapter
PrepareLettres ' Appelée 1 seule fois. Accélère le traitement
For i = 1 To nLi For j = 1 To nCol If Lettres(InPlage(i, j)) Then k = k + 1: OutPlage(k) = InPlage(i, j) Next j Next i
End Sub
"grodep" wrote in message news:O8mAK3$
bonjour je cherche une fonction qui permettrait en précisant des lettres
de
me sortir tous les mots qui les contiennent parmi une liste donnée. Merci de vos réponses