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

10 réponses

1 2 3 4
Avatar
michdenis
Bonjour Pascal,

Je croyais que tous les mots étaient dans une colonne...Je n'avais pas lu tout le fil ....

Il n'a qu'à refaire la même procédure 6 fois !!! ;-))


Salutations!



"Pascal Engelmajer" a écrit dans le message de
news:
Salut,
si ceci fonctionne c'est que j'ai pas compris la question !!!
.../... or je voudrais qu'il me sélectionne tous les mots contenant ces
lettres qqsoit l'ordre .

et non pas les lignes...
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
"michdenis" a écrit dans le message de news:
#
Bonjour grodep,

Une procédure qui devrait marcher !

A )Dans un module standard, tu copie la procédure suivante :

'-------------------------------
Function Check(rg As Range, Lettre As String) As Boolean

For A = 1 To Len(Lettre)
If InStr(1, rg, Mid(Lettre, A, 1), vbTextCompare) <> 0 Then
Check = True
Exit Function
End If
Next

End Function
'-------------------------------

B ) Tu appelle la commande "Filtre élaboré" (barre des menus / données /
filtre / filtre élaboré)


C ) tu choisis comme plage pour le filtre la colonne où est ta liste de
mots


D ) Tu définis ta zone de critère comme suit :
G1 : tu laisses la cellule vide
G2 : =Check(A2;"AsW")

Donc Zone de critère : G1:G2
A2 représente la première ligne de DONNÉES(EXCLUANT LA LIGNE DE
TITRE) de ta plage à filtrer

AsW représente les caractères que tu veux vérifier la présence,
cette procédure n'est pas sensible à la casse

des caractères.

E ) Observe le résultat !!!



Salutations!






"grodep" a écrit dans le message de
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
je me suis p'tetre gourré qqpart (surement ) mais le résultat me renvoie :
nom de champ introuvable ou incorrect dans la plage d'extraction



"michdenis" a écrit dans le message de
news:
Bonjour Pascal,

Je croyais que tous les mots étaient dans une colonne...Je n'avais pas lu
tout le fil ....


Il n'a qu'à refaire la même procédure 6 fois !!! ;-))


Salutations!



"Pascal Engelmajer" a écrit dans le
message de

news:
Salut,
si ceci fonctionne c'est que j'ai pas compris la question !!!
.../... or je voudrais qu'il me sélectionne tous les mots contenant ces
lettres qqsoit l'ordre .

et non pas les lignes...
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
"michdenis" a écrit dans le message de news:
#
Bonjour grodep,

Une procédure qui devrait marcher !

A )Dans un module standard, tu copie la procédure suivante :

'-------------------------------
Function Check(rg As Range, Lettre As String) As Boolean

For A = 1 To Len(Lettre)
If InStr(1, rg, Mid(Lettre, A, 1), vbTextCompare) <> 0 Then
Check = True
Exit Function
End If
Next

End Function
'-------------------------------

B ) Tu appelle la commande "Filtre élaboré" (barre des menus / données /
filtre / filtre élaboré)


C ) tu choisis comme plage pour le filtre la colonne où est ta liste de
mots


D ) Tu définis ta zone de critère comme suit :
G1 : tu laisses la cellule vide
G2 : =Check(A2;"AsW")

Donc Zone de critère : G1:G2
A2 représente la première ligne de DONNÉES(EXCLUANT LA LIGNE DE
TITRE) de ta plage à filtrer

AsW représente les caractères que tu veux vérifier la présence,
cette procédure n'est pas sensible à la casse

des caractères.

E ) Observe le résultat !!!



Salutations!






"grodep" a écrit dans le message de
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
docm
Bonjour grodep.

Voici une solution inspirée de la suggestion de michdenis.

Les mots du dictionnaire sont réputés se trouver dans les colonnes A à F.
Les mots de la rangée A ne font pas partie du dictionnaire. Ils seront
considérés comme Titres des colonnes.

Les colonnes H à M seront utilisées pour recevoir le résultat de la
recherche.

1. Peser sur ALT-F11 - Pour accéder à l'éditeur Microsoft Visual Basic
2. Menu Insertion/Module - Pour créer un nouveau module
3. Coller dans le module le code ci-dessous
'##################################### Début du code
'Copier Dans un module
Sub ChaineDeCaractere()
NomDeLaFeuille = ActiveSheet.Name

Sheets(NomDeLaFeuille).Select

Sheets(NomDeLaFeuille).Columns("H:M").Select
Selection.ClearContents
Sheets(NomDeLaFeuille).Range("G1").Select

Lettres = Trim(Sheets(NomDeLaFeuille).[G1])
Exact = Trim(UCase(Sheets(NomDeLaFeuille).[G2]))

Sheets(NomDeLaFeuille).Range("H2").Formula = _
"=Check(A2,""" & Lettres & """,""" & Exact & """)"

Sheets(NomDeLaFeuille).Range("H2").Select

Selection.AutoFill _
Destination:=Range("H2:M2"), Type:=xlFillDefault

Columns("A:A").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("H1:H2"), _
CopyToRange:=Range("H4"), Unique:úlse

Columns("B:B").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("I1:I2"), _
CopyToRange:=Range("I4"), Unique:úlse

Columns("C:C").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("J1:J2"), _
CopyToRange:=Range("J4"), Unique:úlse

Columns("D:D").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("K1:K2"), _
CopyToRange:=Range("K4"), Unique:úlse

Columns("E:E").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("L1:L2"), _
CopyToRange:=Range("L4"), Unique:úlse

Columns("F:F").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("M1:M2"), _
CopyToRange:=Range("M4"), Unique:úlse

End Sub


Function Check(rg As Range, Lettre As String, Exact As String) As Boolean

L = Lettre
While L <> ""

c = Mid(L, 1, 1)
L = Mid(L, 2)
NombreDeCetteLettre = 1
b = InStr(L, c)

While b > 0
L = Mid(L, 1, b - 1) & Mid(L, b + 1)
NombreDeCetteLettre = NombreDeCetteLettre + 1
b = InStr(L, c)
Wend

strNombreExactDeCetteLettre = "*"
For i = 1 To NombreDeCetteLettre
strNombreExactDeCetteLettre = strNombreExactDeCetteLettre & c & "*"
Next
strTropDeCetteLettre = strNombreExactDeCetteLettre & c & "*"

If Not (UCase(rg) Like UCase(strNombreExactDeCetteLettre)) Then
Exit Function
End If

If UCase(Exact) = "EXACT" Then
If UCase(rg) Like UCase(strTropDeCetteLettre) Then
Exit Function
End If
End If

Wend
Check = True

End Function



4. Entrer dans la cellule G1 les lettres que les mots doivent contenir.
Exemple: AEE

5. Entrer dans la case G2 le mot EXACT pour que les résultats contiennent le
même nombre de lettres que celles spécifiées en G1.

6. Menu Outils/Macros/Macros.
Sélectionner ChaineDeCaractere et cliquer sur le bouton Exécuter.



"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
michdenis
Bonjour grodep,

Je me suis permis de t'envoyer un fichier exemple dans ta Bal.

Salutations!


"grodep" a écrit dans le message de news:er$
je me suis p'tetre gourré qqpart (surement ) mais le résultat me renvoie :
nom de champ introuvable ou incorrect dans la plage d'extraction



"michdenis" a écrit dans le message de
news:
Bonjour Pascal,

Je croyais que tous les mots étaient dans une colonne...Je n'avais pas lu
tout le fil ....


Il n'a qu'à refaire la même procédure 6 fois !!! ;-))


Salutations!



"Pascal Engelmajer" a écrit dans le
message de

news:
Salut,
si ceci fonctionne c'est que j'ai pas compris la question !!!
.../... or je voudrais qu'il me sélectionne tous les mots contenant ces
lettres qqsoit l'ordre .

et non pas les lignes...
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
"michdenis" a écrit dans le message de news:
#
Bonjour grodep,

Une procédure qui devrait marcher !

A )Dans un module standard, tu copie la procédure suivante :

'-------------------------------
Function Check(rg As Range, Lettre As String) As Boolean

For A = 1 To Len(Lettre)
If InStr(1, rg, Mid(Lettre, A, 1), vbTextCompare) <> 0 Then
Check = True
Exit Function
End If
Next

End Function
'-------------------------------

B ) Tu appelle la commande "Filtre élaboré" (barre des menus / données /
filtre / filtre élaboré)


C ) tu choisis comme plage pour le filtre la colonne où est ta liste de
mots


D ) Tu définis ta zone de critère comme suit :
G1 : tu laisses la cellule vide
G2 : =Check(A2;"AsW")

Donc Zone de critère : G1:G2
A2 représente la première ligne de DONNÉES(EXCLUANT LA LIGNE DE
TITRE) de ta plage à filtrer

AsW représente les caractères que tu veux vérifier la présence,
cette procédure n'est pas sensible à la casse

des caractères.

E ) Observe le résultat !!!



Salutations!






"grodep" a écrit dans le message de
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
tout d'abord un grand merci à tous ceux qui se penchent sur ce probleme, je
dois dire que j'étais loin de penser qu'il s'agissait d'une question aussi
délicate.
Pour docm, j'ai tout bien fait pour une fois j'en suis sur car les
explications "pas a pas" m'ont évité les tatonnements , seulement au
résultat :
s'affiche immédiatement apres avoir lancé la macro la réponse FAUX dans les
cases H2 à M2, ensuite on sent bien que la macro turbine, mais à l'arrivée
....rien.
j'ai effectué deux trois tests pour affiner :
si je mets en G1 le mot exact ou l'anagramme d'un des mots de la premiere
rangée, il me renvoie le résultat VRAI dans la case H2:M2
correspondante(donc ça marche :p)
Si je mets juste certaines des lettres comprises dans les mots de cette
premiere rangée, il me renvoie le résultat FAUX. Je ne crois pas que ce soit
une coquille, tu as du concevoir le script pour qu'il trouve les mots
comprenant exactement les lettres entrées en case G1 , je me trompe ?
En revanche , des que j'essaie de mettre un des mots de la rangée suivante,
là je confirme il ne donne aucun résultat .
Je ne sais pas ou ça peche, comme je te disais, il semble qu'il scanne bien
tous les mots de chaque colonne mais il ne renvoie de résultat que pour la
premiere rangée.

Encore merci pour les efforts que vous déployez

"docm" a écrit dans le message de
news:
Bonjour grodep.

Voici une solution inspirée de la suggestion de michdenis.

Les mots du dictionnaire sont réputés se trouver dans les colonnes A à F.
Les mots de la rangée A ne font pas partie du dictionnaire. Ils seront
considérés comme Titres des colonnes.

Les colonnes H à M seront utilisées pour recevoir le résultat de la
recherche.

1. Peser sur ALT-F11 - Pour accéder à l'éditeur Microsoft Visual Basic
2. Menu Insertion/Module - Pour créer un nouveau module
3. Coller dans le module le code ci-dessous
'##################################### Début du code
'Copier Dans un module
Sub ChaineDeCaractere()
NomDeLaFeuille = ActiveSheet.Name

Sheets(NomDeLaFeuille).Select

Sheets(NomDeLaFeuille).Columns("H:M").Select
Selection.ClearContents
Sheets(NomDeLaFeuille).Range("G1").Select

Lettres = Trim(Sheets(NomDeLaFeuille).[G1])
Exact = Trim(UCase(Sheets(NomDeLaFeuille).[G2]))

Sheets(NomDeLaFeuille).Range("H2").Formula = _
"=Check(A2,""" & Lettres & """,""" & Exact & """)"

Sheets(NomDeLaFeuille).Range("H2").Select

Selection.AutoFill _
Destination:=Range("H2:M2"), Type:=xlFillDefault

Columns("A:A").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("H1:H2"), _
CopyToRange:=Range("H4"), Unique:úlse

Columns("B:B").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("I1:I2"), _
CopyToRange:=Range("I4"), Unique:úlse

Columns("C:C").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("J1:J2"), _
CopyToRange:=Range("J4"), Unique:úlse

Columns("D:D").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("K1:K2"), _
CopyToRange:=Range("K4"), Unique:úlse

Columns("E:E").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("L1:L2"), _
CopyToRange:=Range("L4"), Unique:úlse

Columns("F:F").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Range("M1:M2"), _
CopyToRange:=Range("M4"), Unique:úlse

End Sub


Function Check(rg As Range, Lettre As String, Exact As String) As Boolean

L = Lettre
While L <> ""

c = Mid(L, 1, 1)
L = Mid(L, 2)
NombreDeCetteLettre = 1
b = InStr(L, c)

While b > 0
L = Mid(L, 1, b - 1) & Mid(L, b + 1)
NombreDeCetteLettre = NombreDeCetteLettre + 1
b = InStr(L, c)
Wend

strNombreExactDeCetteLettre = "*"
For i = 1 To NombreDeCetteLettre
strNombreExactDeCetteLettre = strNombreExactDeCetteLettre & c & "*"
Next
strTropDeCetteLettre = strNombreExactDeCetteLettre & c & "*"

If Not (UCase(rg) Like UCase(strNombreExactDeCetteLettre)) Then
Exit Function
End If

If UCase(Exact) = "EXACT" Then
If UCase(rg) Like UCase(strTropDeCetteLettre) Then
Exit Function
End If
End If

Wend
Check = True

End Function



4. Entrer dans la cellule G1 les lettres que les mots doivent contenir.
Exemple: AEE

5. Entrer dans la case G2 le mot EXACT pour que les résultats contiennent
le

même nombre de lettres que celles spécifiées en G1.

6. Menu Outils/Macros/Macros.
Sélectionner ChaineDeCaractere et cliquer sur le bouton Exécuter.



"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
merci beaucoup malheureusement le fichier n'a semble t'il ps supporté le
voyage : Excel répare ton fichier lorsque je l'ouvre , je te mets en copie
le fichier repair qu'il crée : Journal de réparation de fichiers Microsoft
Excel

Des erreurs ont été détectées dans le fichier 'C:Documents and
SettingscédricMes documentsExemple Filtre.xls'
Liste des réparations :

Projet Visual Basic perdu.
Contrôles ActiveX perdus.

Si tu sais d'ou celà peut provenir ...

"michdenis" a écrit dans le message de
news:
Bonjour grodep,

Je me suis permis de t'envoyer un fichier exemple dans ta Bal.

Salutations!


"grodep" a écrit dans le message de
news:er$

je me suis p'tetre gourré qqpart (surement ) mais le résultat me renvoie :
nom de champ introuvable ou incorrect dans la plage d'extraction



"michdenis" a écrit dans le message de
news:
Bonjour Pascal,

Je croyais que tous les mots étaient dans une colonne...Je n'avais pas
lu


tout le fil ....

Il n'a qu'à refaire la même procédure 6 fois !!! ;-))


Salutations!



"Pascal Engelmajer" a écrit dans le
message de

news:
Salut,
si ceci fonctionne c'est que j'ai pas compris la question !!!
.../... or je voudrais qu'il me sélectionne tous les mots contenant
ces



lettres qqsoit l'ordre .
et non pas les lignes...
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
"michdenis" a écrit dans le message de news:
#
Bonjour grodep,

Une procédure qui devrait marcher !

A )Dans un module standard, tu copie la procédure suivante :

'-------------------------------
Function Check(rg As Range, Lettre As String) As Boolean

For A = 1 To Len(Lettre)
If InStr(1, rg, Mid(Lettre, A, 1), vbTextCompare) <> 0 Then
Check = True
Exit Function
End If
Next

End Function
'-------------------------------

B ) Tu appelle la commande "Filtre élaboré" (barre des menus / données
/



filtre / filtre élaboré)

C ) tu choisis comme plage pour le filtre la colonne où est ta liste
de



mots

D ) Tu définis ta zone de critère comme suit :
G1 : tu laisses la cellule vide
G2 : =Check(A2;"AsW")

Donc Zone de critère : G1:G2
A2 représente la première ligne de DONNÉES(EXCLUANT LA LIGNE
DE



TITRE) de ta plage à filtrer
AsW représente les caractères que tu veux vérifier la
présence,



cette procédure n'est pas sensible à la casse
des caractères.

E ) Observe le résultat !!!



Salutations!






"grodep" a écrit dans le message de
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
michdenis
Le fichier a été créé avec Excel 2002, tu travailles à partir de quelle version ?

à tout hasard, je te fais parvenir une autre copie !


Salutations!


"grodep" a écrit dans le message de news:
merci beaucoup malheureusement le fichier n'a semble t'il ps supporté le
voyage : Excel répare ton fichier lorsque je l'ouvre , je te mets en copie
le fichier repair qu'il crée : Journal de réparation de fichiers Microsoft
Excel

Des erreurs ont été détectées dans le fichier 'C:Documents and
SettingscédricMes documentsExemple Filtre.xls'
Liste des réparations :

Projet Visual Basic perdu.
Contrôles ActiveX perdus.

Si tu sais d'ou celà peut provenir ...

"michdenis" a écrit dans le message de
news:
Bonjour grodep,

Je me suis permis de t'envoyer un fichier exemple dans ta Bal.

Salutations!


"grodep" a écrit dans le message de
news:er$

je me suis p'tetre gourré qqpart (surement ) mais le résultat me renvoie :
nom de champ introuvable ou incorrect dans la plage d'extraction



"michdenis" a écrit dans le message de
news:
Bonjour Pascal,

Je croyais que tous les mots étaient dans une colonne...Je n'avais pas
lu


tout le fil ....

Il n'a qu'à refaire la même procédure 6 fois !!! ;-))


Salutations!



"Pascal Engelmajer" a écrit dans le
message de

news:
Salut,
si ceci fonctionne c'est que j'ai pas compris la question !!!
.../... or je voudrais qu'il me sélectionne tous les mots contenant
ces



lettres qqsoit l'ordre .
et non pas les lignes...
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
"michdenis" a écrit dans le message de news:
#
Bonjour grodep,

Une procédure qui devrait marcher !

A )Dans un module standard, tu copie la procédure suivante :

'-------------------------------
Function Check(rg As Range, Lettre As String) As Boolean

For A = 1 To Len(Lettre)
If InStr(1, rg, Mid(Lettre, A, 1), vbTextCompare) <> 0 Then
Check = True
Exit Function
End If
Next

End Function
'-------------------------------

B ) Tu appelle la commande "Filtre élaboré" (barre des menus / données
/



filtre / filtre élaboré)

C ) tu choisis comme plage pour le filtre la colonne où est ta liste
de



mots

D ) Tu définis ta zone de critère comme suit :
G1 : tu laisses la cellule vide
G2 : =Check(A2;"AsW")

Donc Zone de critère : G1:G2
A2 représente la première ligne de DONNÉES(EXCLUANT LA LIGNE
DE



TITRE) de ta plage à filtrer
AsW représente les caractères que tu veux vérifier la
présence,



cette procédure n'est pas sensible à la casse
des caractères.

E ) Observe le résultat !!!



Salutations!






"grodep" a écrit dans le message de
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
meme version .. :(

"michdenis" a écrit dans le message de
news:
Le fichier a été créé avec Excel 2002, tu travailles à partir de quelle
version ?


à tout hasard, je te fais parvenir une autre copie !


Salutations!


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

merci beaucoup malheureusement le fichier n'a semble t'il ps supporté le
voyage : Excel répare ton fichier lorsque je l'ouvre , je te mets en copie
le fichier repair qu'il crée : Journal de réparation de fichiers Microsoft
Excel

Des erreurs ont été détectées dans le fichier 'C:Documents and
SettingscédricMes documentsExemple Filtre.xls'
Liste des réparations :

Projet Visual Basic perdu.
Contrôles ActiveX perdus.

Si tu sais d'ou celà peut provenir ...

"michdenis" a écrit dans le message de
news:
Bonjour grodep,

Je me suis permis de t'envoyer un fichier exemple dans ta Bal.

Salutations!


"grodep" a écrit dans le message de
news:er$

je me suis p'tetre gourré qqpart (surement ) mais le résultat me renvoie
:


nom de champ introuvable ou incorrect dans la plage d'extraction



"michdenis" a écrit dans le message de
news:
Bonjour Pascal,

Je croyais que tous les mots étaient dans une colonne...Je n'avais pas
lu


tout le fil ....

Il n'a qu'à refaire la même procédure 6 fois !!! ;-))


Salutations!



"Pascal Engelmajer" a écrit dans
le



message de
news:
Salut,
si ceci fonctionne c'est que j'ai pas compris la question !!!
.../... or je voudrais qu'il me sélectionne tous les mots contenant
ces



lettres qqsoit l'ordre .
et non pas les lignes...
--
Amicalement.
Pascal
"il n'y a pas de vent favorable pour celui qui ne sait pas ou il va."
Sénèque.
http://www.ilyapa.net/excel
"michdenis" a écrit dans le message de news:
#
Bonjour grodep,

Une procédure qui devrait marcher !

A )Dans un module standard, tu copie la procédure suivante :

'-------------------------------
Function Check(rg As Range, Lettre As String) As Boolean

For A = 1 To Len(Lettre)
If InStr(1, rg, Mid(Lettre, A, 1), vbTextCompare) <> 0 Then
Check = True
Exit Function
End If
Next

End Function
'-------------------------------

B ) Tu appelle la commande "Filtre élaboré" (barre des menus /
données




/
filtre / filtre élaboré)

C ) tu choisis comme plage pour le filtre la colonne où est ta liste
de



mots

D ) Tu définis ta zone de critère comme suit :
G1 : tu laisses la cellule vide
G2 : =Check(A2;"AsW")

Donc Zone de critère : G1:G2
A2 représente la première ligne de DONNÉES(EXCLUANT LA LIGNE
DE



TITRE) de ta plage à filtrer
AsW représente les caractères que tu veux vérifier la
présence,



cette procédure n'est pas sensible à la casse
des caractères.

E ) Observe le résultat !!!



Salutations!






"grodep" a écrit dans le message de
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
Daniel.M
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
ça a l'air de parfaitement marcher BUT :
si je change le code pour avoir exactement les memes lettres et que donc je
change cette ligne :
If LesLettres(Asc(C)) > j - Len(Replace(S, C, "")) Then
en remplaçant > par <>, j'ai effectivement moins de résultats mais pour
autant j'ai toujours des mots qui ont plus de lettres que le mot clef : en
fait il me sort les mots qui ont toutes ces lettres une seule fois meme
s'ils ont d'autres lettres non citées dans le mot clef : si le mot clef est
" STOP" il me donnera "POSTE" mais pas "STOPPA" qui a deux "P"
mais le résultat est très satisfaisant anyway .

grand merci a toi.
.N.B : je reçois encore avec plaisir toutes les propositions qui me sont
fournies mais étant donné que l'aide requise a été donné, je comprendrais
parfaitement que les maitres ES excel se penchent sur d'autres problemes
soumis sur ce forum
Encore une fois grand merci a tous ceux qui m'ont dépanné

"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