OVH Cloud OVH Cloud

chaine de caractere

32 réponses
Avatar
grodep
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

2 réponses

1 2 3 4
Avatar
grodep
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








Avatar
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












1 2 3 4