Extraction d'un caractère après comparaison de chaines
Résolu/Fermé
mousaillon
Messages postés
55
Date d'inscription
jeudi 30 octobre 2014
Statut
Membre
Dernière intervention
3 mars 2016
-
31 déc. 2015 à 13:57
mousaillon Messages postés 55 Date d'inscription jeudi 30 octobre 2014 Statut Membre Dernière intervention 3 mars 2016 - 5 févr. 2016 à 08:50
mousaillon Messages postés 55 Date d'inscription jeudi 30 octobre 2014 Statut Membre Dernière intervention 3 mars 2016 - 5 févr. 2016 à 08:50
A voir également:
- Extraction d'un caractère après comparaison de chaines
- Caractère ascii - Guide
- Caractere speciaux - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Caractère spéciaux - Guide
- Caractere speciaux mac - Guide
16 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
4 janv. 2016 à 10:29
4 janv. 2016 à 10:29
Bonjour,
Sujet très intéressant.
Pour la liste des scrabble ou scrabble+, voici un exemple :
Source de la Sub Combiner : https://www.commentcamarche.net/faq/41042-vba-excel-initiation-a-la-recursivite#combinaisons-d-une-chaine-de-caracteres
Nota : pour visualiser les résultats des Debug.Print, tapez Ctrl+G dans l'interface VBA
La procédure de création en mémoire de l'objet Dictionary n'est à faire qu'une seule fois, à l'ouverture du classeur par exemple. L'avantage est de garder, en mémoire, tous les mots de la feuille dico sans avoir à y accéder.
Pour gagner encore du temps dans la recherche des mots et dans la création d'un dictionnaire, j'avais eu une conversation à ce sujet. La méthode retenue à l'époque avait été de créer un arbre dans un module de classe.
La discussion ici : https://codes-sources.commentcamarche.net/forum/oldest/10019292-vba-excel-recursivite-jeu-du-boggle
Le résultat ici : https://www.commentcamarche.net/faq/34606-jeu-sous-excel-vba-le-boogle-tactile-souris
Sujet très intéressant.
Pour la liste des scrabble ou scrabble+, voici un exemple :
Source de la Sub Combiner : https://www.commentcamarche.net/faq/41042-vba-excel-initiation-a-la-recursivite#combinaisons-d-une-chaine-de-caracteres
Nota : pour visualiser les résultats des Debug.Print, tapez Ctrl+G dans l'interface VBA
Public T_Out(), IndTab As Long, Dico As Object Sub Vazy() 'appel de la procédure 'CAISSIE ==> correspond aux 7 lettres du rack 'Array("A", "R", "T", "U", "I", "O", "P") ==> Liste des 8èmes lettres possibles 'True ou False selon si l'on souhaite un Scrabble (False) ou un scrabble + (True) 'exemple d'appel : Scrabble "CAISSIE", Array("A", "R", "T", "U", "I", "O", "P"), True End Sub Sub Scrabble(Chaine As String, Lettres_Sup As Variant, Plus As Boolean) Dim t As Single, i As Integer, test As Long t = Timer On Error Resume Next test = Dico.Count If Err <> 0 Then Creation_Dico Erase T_Out: IndTab = 0 On Error GoTo 0 Combiner Chaine, "" If Plus Then 'si le choix = Scrabble+ For i = LBound(Lettres_Sup) To UBound(Lettres_Sup) 'alors on combine avec toutes les lettres supplémentaires possibles Combiner Chaine & Lettres_Sup(i), "" Next i End If Debug.Print "procédure complète en : " & Timer - t & " nombre de mots trouvés : " & UBound(T_Out) End Sub Sub Combiner(strText As String, debut As String) 'Combiner établit la liste des combinaisons possibles 'avec la chaîne strText Dim i As Integer If Len(strText) = 1 Then 'si la combinaison existe dans le Dico ==> mot trouvé If Dico.Exists(debut & strText) Then 'on stocke ici le mot trouvé dans la variable T_Out ReDim Preserve T_Out(IndTab) T_Out(IndTab) = debut & strText IndTab = IndTab + 1 End If Else For i = 1 To Len(strText) Combiner Mid(strText, 2, Len(strText) - 1), debut & Mid(strText, 1, 1) strText = Mid(strText, 2, Len(strText) - 1) & Mid(strText, 1, 1) Next End If End Sub Sub Creation_Dico() 'création du dictionnaire en mémoire à partir de la feuille dico Dim Lig As Long, DL As Long, Col As Integer, Tbl, tbis As Single tbis = Timer Set Dico = CreateObject("Scripting.Dictionary") Tbl = Sheets("dico").Range("A6:Z" & Sheets("dico").Cells.SpecialCells(xlCellTypeLastCell).Row) For Lig = LBound(Tbl, 1) To UBound(Tbl, 1) For Col = LBound(Tbl, 2) To UBound(Tbl, 2) Dico(Tbl(Lig, Col)) = "" Next Col Next Lig Debug.Print "création du dictionnaire en : " & Timer - tbis & " pour : " & Dico.Count & " mots" End Sub
La procédure de création en mémoire de l'objet Dictionary n'est à faire qu'une seule fois, à l'ouverture du classeur par exemple. L'avantage est de garder, en mémoire, tous les mots de la feuille dico sans avoir à y accéder.
Pour gagner encore du temps dans la recherche des mots et dans la création d'un dictionnaire, j'avais eu une conversation à ce sujet. La méthode retenue à l'époque avait été de créer un arbre dans un module de classe.
La discussion ici : https://codes-sources.commentcamarche.net/forum/oldest/10019292-vba-excel-recursivite-jeu-du-boggle
Le résultat ici : https://www.commentcamarche.net/faq/34606-jeu-sous-excel-vba-le-boogle-tactile-souris
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
28 janv. 2016 à 09:47
28 janv. 2016 à 09:47
En complément, il faudra revenir après pour ton dictionnaire. Il n'est pas très pratique de traiter un classeur Excel de 7Mo. Le plus aisé est de placer le dictionnaire dans un fichier txt à côté est de le charger en mémoire lors de l'ouverture du classeur.
ccm81
Messages postés
10900
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 novembre 2024
2 425
31 déc. 2015 à 16:38
31 déc. 2015 à 16:38
Bonjour
Pour la question 1
http://www.cjoint.com/c/ELFpLPEw0Pk
Cdlmnt
Pour la question 1
http://www.cjoint.com/c/ELFpLPEw0Pk
Cdlmnt
mousaillon
Messages postés
55
Date d'inscription
jeudi 30 octobre 2014
Statut
Membre
Dernière intervention
3 mars 2016
1
31 déc. 2015 à 17:48
31 déc. 2015 à 17:48
Merci ccm81. Ca marche bien en effet. Je ne voyais pas une macro aussi compliquée pour moi à décortiquer. J'en comprends une bonne partie. Après les fêtes je vais creuser pour tout comprendre car c'est cela qui m'intéresse le plus. Merci à toi et bonne année .....
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 31/12/2015 à 18:00
Modifié par michel_m le 31/12/2015 à 18:00
Bonjour Moussaillon
Salut CCM81 ca va ?
Pour la question 2
"dummy" (modèle) correspond à A1
Texto à A2
donc écrire
=extrait_intrus(A1, A2)
EDIT:
si tu avais en A2:
"RNDEEAVUWA"
la fonction te retournerait DAWA
Michel
Salut CCM81 ca va ?
Pour la question 2
Function extrait_intrus(dummy As String, texto As String) As String
Dim reg As Object
Dim extraction As Object
Set reg = CreateObject("vbscript.regexp")
reg.Global = True
reg.Pattern = "([^" & dummy & "])"
Set extraction = reg.Execute(texto)
For Each digit In extraction
extrait_lettres = extrait_lettres & (digit.Value)
Next digit
Set extraction = Nothing
Set reg = Nothing
End Function
"dummy" (modèle) correspond à A1
Texto à A2
donc écrire
=extrait_intrus(A1, A2)
EDIT:
si tu avais en A2:
"RNDEEAVUWA"
la fonction te retournerait DAWA
Michel
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
31 déc. 2015 à 18:16
31 déc. 2015 à 18:16
j'avais pas tout lu !
pour colorier D en rouge (tiré de mon grenier)
pour colorier D en rouge (tiré de mon grenier)
Function colorier_mot(mot As String, cellule As Range)
Dim depart As Byte
On Error GoTo inconnu
depart = Application.Search(mot, cellule)
With cellule
colorier_mot = .Characters(start:=depart, Length:=Len(mot)).Font.ColorIndex = 3
End With
Exit Function
inconnu:
MsgBox "mot inconnu dansla cellule"
End Function
ccm81
Messages postés
10900
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 novembre 2024
2 425
31 déc. 2015 à 18:33
31 déc. 2015 à 18:33
Pour la question 2, essaies ceci
http://www.cjoint.com/c/ELFrHm2hOpk
Cdlmnt
http://www.cjoint.com/c/ELFrHm2hOpk
Cdlmnt
mousaillon
Messages postés
55
Date d'inscription
jeudi 30 octobre 2014
Statut
Membre
Dernière intervention
3 mars 2016
1
31 déc. 2015 à 19:52
31 déc. 2015 à 19:52
Pour ccm81
Merci pour ces réponses aussi rapides. Je me suis peu être lancé un défi trop haut pour moi car quand je vois vos macros, je trouve beaucoup de termes utilisés que je connais pas. Mais ça, ça se travaille avec le temps je pense.
De plus je pensais qu'en vous donnant des exemples simples (une seule colonne), je pourrai retranscrire ces écritures dans d'autres proportions comme utiliser une liste à plusieurs colonnes(je travaille sur 26 colonnes et 40000 lignes environ parfois plus selon la colonne). J'ai déjà essayé de faire des tests mais la réponse à la question 1 est toujours "mot non trouvé"... c'est balo !!!
Pour la 2eme questions ce n'est pas vraiment cela que j'ai demandé. C'est uniquement le delta dans le deuxième mot (cellule B1) qui doit être en rouge gras après sa comparaison avec le 1er mot (cellule A1) et non le delta en rouge dans chaque cellule en ne gardant en noir que les lettres communes. Regarde bien ma question 2, je me suis peut être mal exprimé ??
Mais je garde la macro pour y travailler et essayer de la comprendre.
Pour michel_m
Tout d'abord merci pour ta réponse aussi rapide.
Je sais que je ne suis pas un as de la macro mais néanmoins j'ai vraiment du mal à comprendre tes réponses . Pourrais tu expliquer un peu plus ? Quand tu auras du temps libre. Il n'y as pas d'urgence.
Encore merci à vous deux et bon réveillon - bonne année
Merci pour ces réponses aussi rapides. Je me suis peu être lancé un défi trop haut pour moi car quand je vois vos macros, je trouve beaucoup de termes utilisés que je connais pas. Mais ça, ça se travaille avec le temps je pense.
De plus je pensais qu'en vous donnant des exemples simples (une seule colonne), je pourrai retranscrire ces écritures dans d'autres proportions comme utiliser une liste à plusieurs colonnes(je travaille sur 26 colonnes et 40000 lignes environ parfois plus selon la colonne). J'ai déjà essayé de faire des tests mais la réponse à la question 1 est toujours "mot non trouvé"... c'est balo !!!
Pour la 2eme questions ce n'est pas vraiment cela que j'ai demandé. C'est uniquement le delta dans le deuxième mot (cellule B1) qui doit être en rouge gras après sa comparaison avec le 1er mot (cellule A1) et non le delta en rouge dans chaque cellule en ne gardant en noir que les lettres communes. Regarde bien ma question 2, je me suis peut être mal exprimé ??
Mais je garde la macro pour y travailler et essayer de la comprendre.
Pour michel_m
Tout d'abord merci pour ta réponse aussi rapide.
Je sais que je ne suis pas un as de la macro mais néanmoins j'ai vraiment du mal à comprendre tes réponses . Pourrais tu expliquer un peu plus ? Quand tu auras du temps libre. Il n'y as pas d'urgence.
Encore merci à vous deux et bon réveillon - bonne année
ccm81
Messages postés
10900
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
2 novembre 2024
2 425
31 déc. 2015 à 20:05
31 déc. 2015 à 20:05
De plus je pensais qu'en vous donnant des exemples simples (une seule colonne), je pourrai retranscrire ces écritures ....
Eh oui, si tu ne dis pas tout ... !
Pour la 2eme questions ce n'est pas vraiment cela que j'ai demandé. C'est uniquement le delta dans le deuxième mot (cellule B1)
Pour une ffois qu'on t'en donne deux pour le prix d'un ... ;-)
Il te suffit de mettre un apostrophe devant les 12 lignes concernant le delta S1-S2, pour les passer en commentaire, ou carrément les supprimer
'd = delta(s1, s2)
'............
'End If
Bon réveillon, bonne année et bon courage
Cdlmnt
Eh oui, si tu ne dis pas tout ... !
Pour la 2eme questions ce n'est pas vraiment cela que j'ai demandé. C'est uniquement le delta dans le deuxième mot (cellule B1)
Pour une ffois qu'on t'en donne deux pour le prix d'un ... ;-)
Il te suffit de mettre un apostrophe devant les 12 lignes concernant le delta S1-S2, pour les passer en commentaire, ou carrément les supprimer
'd = delta(s1, s2)
'............
'End If
Bon réveillon, bonne année et bon courage
Cdlmnt
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 1/01/2016 à 09:42
Modifié par michel_m le 1/01/2016 à 09:42
Bonjour à tous et meilleurs vœux
Moussaillon, tu écris:
je pensais qu'en vous donnant des exemples simples (une seule colonne), je pourrai retranscrire ces écritures dans d'autres proportions comme utiliser une liste à plusieurs colonnes(je travaille sur 26 colonnes et 40000 lignes environ parfois plus selon la colonne)
Excuse le terme abrupt mais c'est une grosse bétise.
En te disant" je vais faire simple et puis après je verrai..." tu résonnes à l'inverse : en info,on commence par poser le contexte en entier et on le décompose les problèmes en fonction du contexte. notamment, on procède tout à fait différemment suivant la grandeur du tableau
Donc, on ne peut pas te répondre pour l'instant; pour la deuxième question:
Quel est(sont) le(s) modèle(s) et où les trouve(nt) t'on: dans le tableau où a l'extérieur du tableau ?
avec quelles cellules faut il(s) le(s) comparer ?
au besoin et avec des explications détaillées et complètes:
Dans l’attente
--
Michel
Moussaillon, tu écris:
je pensais qu'en vous donnant des exemples simples (une seule colonne), je pourrai retranscrire ces écritures dans d'autres proportions comme utiliser une liste à plusieurs colonnes(je travaille sur 26 colonnes et 40000 lignes environ parfois plus selon la colonne)
Excuse le terme abrupt mais c'est une grosse bétise.
En te disant" je vais faire simple et puis après je verrai..." tu résonnes à l'inverse : en info,on commence par poser le contexte en entier et on le décompose les problèmes en fonction du contexte. notamment, on procède tout à fait différemment suivant la grandeur du tableau
Donc, on ne peut pas te répondre pour l'instant; pour la deuxième question:
Quel est(sont) le(s) modèle(s) et où les trouve(nt) t'on: dans le tableau où a l'extérieur du tableau ?
avec quelles cellules faut il(s) le(s) comparer ?
au besoin et avec des explications détaillées et complètes:
Mettre un extrait du classeur env. 1000 lignes, 10 colonnes) sans données confidentielles en pièce jointe sur https://www.cjoint.com/
et coller le raccourci proposé (clic droit) dans le message de réponse
Dans l’attente
--
Michel
mousaillon
Messages postés
55
Date d'inscription
jeudi 30 octobre 2014
Statut
Membre
Dernière intervention
3 mars 2016
1
1 janv. 2016 à 11:44
1 janv. 2016 à 11:44
Bonjour Michel et ccm81,
Je vous l'avais dit que je n'étais pas un pro de la macro .... ! Apprendre tout seul, n'est pas aussi simple. Je vais préparer un fichier avec mon besoin en essayant d'être plus précis et plus clair dans ma demande. En même temps je vous montrerai ce que j'ai déjà fait. Vous verrez ainsi mon niveau (mais ne rigolez pas trop ....) et si vous le voulez bien vous me direz très objectivement ce que vous en pensez. Merci à vous deux
Bonne journée
Je vous l'avais dit que je n'étais pas un pro de la macro .... ! Apprendre tout seul, n'est pas aussi simple. Je vais préparer un fichier avec mon besoin en essayant d'être plus précis et plus clair dans ma demande. En même temps je vous montrerai ce que j'ai déjà fait. Vous verrez ainsi mon niveau (mais ne rigolez pas trop ....) et si vous le voulez bien vous me direz très objectivement ce que vous en pensez. Merci à vous deux
Bonne journée
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
1 janv. 2016 à 13:40
1 janv. 2016 à 13:40
Vous verrez ainsi mon niveau (mais ne rigolez pas trop ....)
Arrête de pleurnicher, on a tous débuté et on continue toujours à tomber sur des os...
Arrête de pleurnicher, on a tous débuté et on continue toujours à tomber sur des os...
mousaillon
Messages postés
55
Date d'inscription
jeudi 30 octobre 2014
Statut
Membre
Dernière intervention
3 mars 2016
1
2 janv. 2016 à 13:33
2 janv. 2016 à 13:33
Bonjour Michel et ccm81
Tu sais Michel, je suis retraité et à mon âge on ne pleurniche plus depuis longtemps. Le VBA est un de mes passe-temps. Si ça ne marche pas comme je veux, je ne m'en fais pas une montagne et / ou je passe à autre chose.
En dehors de cela, comme j'aime beaucoup jouer avec les lettres, voici le fichier sur lequel je m'amuse.
J'ai mis dans l'onglet Notice, la vue que j'ai sur ce fichier avec les différentes actions que j'essaie de faire fonctionner.... avec mes connaissances !!
J'espère avoir été assez clair et explicite pour vous montrer mes problèmes.
Si vous avez des solutions pour améliorer les performances, je suis preneur.
Merci à vous
Bon WE
Voici le lien pour le fichier
http://www.cjoint.com/c/FAcmy3SxsQK
Tu sais Michel, je suis retraité et à mon âge on ne pleurniche plus depuis longtemps. Le VBA est un de mes passe-temps. Si ça ne marche pas comme je veux, je ne m'en fais pas une montagne et / ou je passe à autre chose.
En dehors de cela, comme j'aime beaucoup jouer avec les lettres, voici le fichier sur lequel je m'amuse.
J'ai mis dans l'onglet Notice, la vue que j'ai sur ce fichier avec les différentes actions que j'essaie de faire fonctionner.... avec mes connaissances !!
J'espère avoir été assez clair et explicite pour vous montrer mes problèmes.
Si vous avez des solutions pour améliorer les performances, je suis preneur.
Merci à vous
Bon WE
Voici le lien pour le fichier
http://www.cjoint.com/c/FAcmy3SxsQK
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 3/01/2016 à 09:07
Modifié par michel_m le 3/01/2016 à 09:07
bonjour
Ta demande initiale:
Dans la cellule A1 la chaine est : "VRENEU".
Dans la cellule B1 la chaine est : "RNDEEVU".
Après action par bouton de commande, le delta de comparaison est le "D".
Dans la cellule B1 et je veux que ce "D" (donc le delta entre les deux chaines) passe en rouge gras.
Maintenant:
Dans les mots de 8 lettres, n'afficher que la 8eme lettre en rouge gras
http://www.commentcamarche.net/forum/affich-32973816-extraction-d-un-caractere-apres-comparaison-de-chaines#
???? pas sympa !
Mais sacré boulot que tu as pondu avec quelques trouvailles, bravo !!!
Au bout de > 1 heure pour piger ce que tu voudrais:
Si par exemple j'ai trouvé "ABAISSE" donc 1 scrabble
il faut que je cherche dans "dico" colonne AJ (8 lettres) les mots possibles avec "ABAISSE"
(abaissee, abaisser, rabaisse....) les mettre dans H6:H26 (feuille contrôle) avec la lettre supplémentaire en rouge (pour placer mon scrabble en m'accrochant sur la lettre rouge)
Questions
On cherche = 8 lettres ou >=8 lettres ?
Mot avec anagramme ABAiSSE + N lettres ?
Tu parles de 7 lettres mais est ce valable pour des mots plus petits?
Ta demande initiale:
Dans la cellule A1 la chaine est : "VRENEU".
Dans la cellule B1 la chaine est : "RNDEEVU".
Après action par bouton de commande, le delta de comparaison est le "D".
Dans la cellule B1 et je veux que ce "D" (donc le delta entre les deux chaines) passe en rouge gras.
Maintenant:
Dans les mots de 8 lettres, n'afficher que la 8eme lettre en rouge gras
http://www.commentcamarche.net/forum/affich-32973816-extraction-d-un-caractere-apres-comparaison-de-chaines#
???? pas sympa !
Mais sacré boulot que tu as pondu avec quelques trouvailles, bravo !!!
Au bout de > 1 heure pour piger ce que tu voudrais:
Si par exemple j'ai trouvé "ABAISSE" donc 1 scrabble
il faut que je cherche dans "dico" colonne AJ (8 lettres) les mots possibles avec "ABAISSE"
(abaissee, abaisser, rabaisse....) les mettre dans H6:H26 (feuille contrôle) avec la lettre supplémentaire en rouge (pour placer mon scrabble en m'accrochant sur la lettre rouge)
Questions
On cherche = 8 lettres ou >=8 lettres ?
Mot avec anagramme ABAiSSE + N lettres ?
Tu parles de 7 lettres mais est ce valable pour des mots plus petits?
mousaillon
Messages postés
55
Date d'inscription
jeudi 30 octobre 2014
Statut
Membre
Dernière intervention
3 mars 2016
1
>
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 janv. 2016 à 11:00
3 janv. 2016 à 11:00
Bonjour Michel
Il faut dire qu'au départ de notre discussion j'ai voulu vous donner un exemple de travail pour que je puisse avoir une idée et la réintégrer dans une de mes macros en la mettant conforme à tous les paramètres de ma macro. Manque de bol je n'y suis pas arrivé. Je n'aime pas avoir du "maché" et l'utiliser sans comprendre. J'aime bien m'appuyer sur des exemples et retravailler la macro et la mettre à ma sauce. C'est comme cela que j'arrive à progresser.
Pour le bouton "Trouver le Scrabble" (car je joue beaucoup de Scrabble) on part uniquement et obligatoirement sur un groupe de 7 lettres (pas forcément un mot de 7 lettres). Pour la 8ème lettre je m'explique. Quand tu joues au Scrabble tu as un rack de 7 lettres avec lesquelles tu essaies de faire ton Scrabble. Mais tu peux aussi faire un Scrabble ( que j'appelle Scrabble + ) de 8 lettres en utilisant une lettre déjà posée sur le plateau de jeu. Ce que je recherche c'est donc une 8ème lettre qui pourrait me servir à poser mes 7 lettres du rack. Tu peux avoir 7 lettres sans pouvoir faire un Scrabble mais avec une 8ème lettre pouvoir tout poser sur le plateau. Suis-je assez explicite ?
Dans la plage H6:H26 on ne doit voir que des mots de 7 lettres (donc tous les Scrabbles directs) ou de 8 lettres avec la 8ème lettre qui ne fait pas partie de la cellule C6 et qui sera mise en rouge gras.
exemple: dans mon rack j'ai "CAISSIE" Je ne peux pas faire de Scrabble. Par contre si j'ai un "R" sur le plateau que je peux jouer, je peux poser tout mon rack et mettre CAISSIER.
Je continue de travailler sur ce fichier bien sûr et j'ai réglé le problème des minuscules. J'ai réglé aussi je pense le problème des anagrammes mais je n'ai peut être pas fait tout le tour de la question.
Merci pour ton aide. Bon dimanche.
Il faut dire qu'au départ de notre discussion j'ai voulu vous donner un exemple de travail pour que je puisse avoir une idée et la réintégrer dans une de mes macros en la mettant conforme à tous les paramètres de ma macro. Manque de bol je n'y suis pas arrivé. Je n'aime pas avoir du "maché" et l'utiliser sans comprendre. J'aime bien m'appuyer sur des exemples et retravailler la macro et la mettre à ma sauce. C'est comme cela que j'arrive à progresser.
Pour le bouton "Trouver le Scrabble" (car je joue beaucoup de Scrabble) on part uniquement et obligatoirement sur un groupe de 7 lettres (pas forcément un mot de 7 lettres). Pour la 8ème lettre je m'explique. Quand tu joues au Scrabble tu as un rack de 7 lettres avec lesquelles tu essaies de faire ton Scrabble. Mais tu peux aussi faire un Scrabble ( que j'appelle Scrabble + ) de 8 lettres en utilisant une lettre déjà posée sur le plateau de jeu. Ce que je recherche c'est donc une 8ème lettre qui pourrait me servir à poser mes 7 lettres du rack. Tu peux avoir 7 lettres sans pouvoir faire un Scrabble mais avec une 8ème lettre pouvoir tout poser sur le plateau. Suis-je assez explicite ?
Dans la plage H6:H26 on ne doit voir que des mots de 7 lettres (donc tous les Scrabbles directs) ou de 8 lettres avec la 8ème lettre qui ne fait pas partie de la cellule C6 et qui sera mise en rouge gras.
exemple: dans mon rack j'ai "CAISSIE" Je ne peux pas faire de Scrabble. Par contre si j'ai un "R" sur le plateau que je peux jouer, je peux poser tout mon rack et mettre CAISSIER.
Je continue de travailler sur ce fichier bien sûr et j'ai réglé le problème des minuscules. J'ai réglé aussi je pense le problème des anagrammes mais je n'ai peut être pas fait tout le tour de la question.
Merci pour ton aide. Bon dimanche.
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 3/01/2016 à 11:39
Modifié par michel_m le 3/01/2016 à 11:39
Ok, je laisse macérer un peu mes neurones...
la liste des scrabble+ s'insérera dans la colonne H
Michel
la liste des scrabble+ s'insérera dans la colonne H
Michel
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 3/01/2016 à 11:41
Modifié par michel_m le 3/01/2016 à 11:41
oups !
Avant, donne moi un ou deux mots de 7 lettres ayant plusieurs Anagrammes : ce me fera gagner pas mal de temps !
Avant, donne moi un ou deux mots de 7 lettres ayant plusieurs Anagrammes : ce me fera gagner pas mal de temps !
mousaillon
Messages postés
55
Date d'inscription
jeudi 30 octobre 2014
Statut
Membre
Dernière intervention
3 mars 2016
1
>
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
4 janv. 2016 à 10:38
4 janv. 2016 à 10:38
1ER Groupe de 7 lettres : EAEMRIN
Anagrammes : ANEMIER MANIERE MARINEE MENERAI RANIMEE REANIME
2EME Groupe de 7 lettres : RRAPAEI
Anagrammes : PARERAI RAPERAI REPAIRA REPARAI
Anagrammes : ANEMIER MANIERE MARINEE MENERAI RANIMEE REANIME
2EME Groupe de 7 lettres : RRAPAEI
Anagrammes : PARERAI RAPERAI REPAIRA REPARAI
mousaillon
Messages postés
55
Date d'inscription
jeudi 30 octobre 2014
Statut
Membre
Dernière intervention
3 mars 2016
1
>
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
24 janv. 2016 à 10:05
24 janv. 2016 à 10:05
Bonjour,
Je sais que c'est moi le demandeur mais ....
Je ne sais quelle réflexion dois je tenir :
Je dois encore attendre un peu pour une aide
ou
Le dico que j'ai mis dans mon fichier est plus intéressant et l'aide je peux m'asseoir dessus ????
ou
tout simplement, manque de temps ....?
Des nouvelles ? Merci
Je sais que c'est moi le demandeur mais ....
Je ne sais quelle réflexion dois je tenir :
Je dois encore attendre un peu pour une aide
ou
Le dico que j'ai mis dans mon fichier est plus intéressant et l'aide je peux m'asseoir dessus ????
ou
tout simplement, manque de temps ....?
Des nouvelles ? Merci
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 24/01/2016 à 10:37
Modifié par michel_m le 24/01/2016 à 10:37
Bonjour
Frank (Pijaku) a fourni une réponse intéressante le 4 janvier, non?
l'as tu regardée car tu n'as pas réagi depuis cette date?
voir post 16
Michel
Frank (Pijaku) a fourni une réponse intéressante le 4 janvier, non?
l'as tu regardée car tu n'as pas réagi depuis cette date?
voir post 16
Michel
mousaillon
Messages postés
55
Date d'inscription
jeudi 30 octobre 2014
Statut
Membre
Dernière intervention
3 mars 2016
1
25 janv. 2016 à 10:51
25 janv. 2016 à 10:51
Bonjour,
J'ai complément zappé ce passage. J'ai du ouvrir la discussion beaucoup plus loin et je ne suis pas remonté assez haut pour lire ce qui précédait. Mea Culpa. En fait j'attendais et j'étais resté sur le dialogue avec michel car tu me demandais de te donner 2 exemples que je t'ai fournis. J'en avais déduit que tu allais me donner une réponse ... ? non ?. Bon ce n'est pas grave. Je vais regarder ce que me propose Frank (merci à Toi). De prime à bord je n'ai pas tout compris mais je vais tester dès que je pourrai et essayer de comprendre. Mais ce qui m'intéresse pour répondre à ta question Franck, c'est uniquement le Scrabble et le Scrabble + (7 ou 8 lettres pas plus).
Bonne semaine
J'ai complément zappé ce passage. J'ai du ouvrir la discussion beaucoup plus loin et je ne suis pas remonté assez haut pour lire ce qui précédait. Mea Culpa. En fait j'attendais et j'étais resté sur le dialogue avec michel car tu me demandais de te donner 2 exemples que je t'ai fournis. J'en avais déduit que tu allais me donner une réponse ... ? non ?. Bon ce n'est pas grave. Je vais regarder ce que me propose Frank (merci à Toi). De prime à bord je n'ai pas tout compris mais je vais tester dès que je pourrai et essayer de comprendre. Mais ce qui m'intéresse pour répondre à ta question Franck, c'est uniquement le Scrabble et le Scrabble + (7 ou 8 lettres pas plus).
Bonne semaine
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
26 janv. 2016 à 07:32
26 janv. 2016 à 07:32
Bonjour,
J'ai complément zappé ce passage
Tu as, pour cela, la possibilité, sous ta question, de faire un tri par date (ou date décroissante) ou par vote. Le tri par date reconstituera ta discussion dans l'ordre des dates de réponses.
J'en avais déduit que tu allais me donner une réponse ... ? non ?
Ben en fait, il a aussi répondu plus haut :
Donc, à mon tour...
De prime à bord je n'ai pas tout compris mais je vais tester dès que je pourrai et essayer de comprendre.
N'hésite surtout pas à poser toutes tes questions sur ce fil.
J'ai complément zappé ce passage
Tu as, pour cela, la possibilité, sous ta question, de faire un tri par date (ou date décroissante) ou par vote. Le tri par date reconstituera ta discussion dans l'ordre des dates de réponses.
J'en avais déduit que tu allais me donner une réponse ... ? non ?
Ben en fait, il a aussi répondu plus haut :
Bonjour
Chapeau Frank !
je te plussoie et te laisse le bébé ! ;o)
Donc, à mon tour...
De prime à bord je n'ai pas tout compris mais je vais tester dès que je pourrai et essayer de comprendre.
N'hésite surtout pas à poser toutes tes questions sur ce fil.
mousaillon
Messages postés
55
Date d'inscription
jeudi 30 octobre 2014
Statut
Membre
Dernière intervention
3 mars 2016
1
>
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
27 janv. 2016 à 17:19
27 janv. 2016 à 17:19
Bonjour Frank et Michel
Tout d'abord, je remercie Michel pour ses réponses en espérant que je ne lui ai pas fait perdre du temps.
Frank, j'ai travaillé sur la macro que tu as donnée le 4 janvier. Je l'ai décortiquée avec mes connaissances et j'ai réalisé des essais en l'adaptant un peu. Dans le fichier dont l'adresse est la suivante :
http://www.cjoint.com/c/FABpRWETSJ7
J'ai réalisé 6 tests. Les explications, les résultats et mes questions sont mentionnés dans la Feuil1 du fichier. Des erreurs se sont glissées. Peut être parce que mes lignes de code sont mal placées ou mal formulées ... ou pour tout autre raison que je ne vois pas ??
Très important pour moi :
J'attends surtout des réponses (si possible bien sûr ...) aux questions que j'ai mises dans la zone de texte en vert pour que je puisse continuer à comprendre la macro et voir les résultats escomptés.
Je pars d'une chaine de caractères de 7 lettres max (range("I6")).
Pour une chaine de caractères allant de 3 à 6 lettres :
Je veux tirer de cette chaine, tous les mots possibles présents dans le dico ayant le même nombre de lettres et qui seront affichés dans la colonne A par exemple.
J'ai fait des essais avec 5 lettres et cela fonctionne hormis les doublons.
Pour une chaine de caractères de 7 lettres max uniquement :
Je veux tirer de cette chaine, tous les mots possibles présents dans le dico ayant le même nombre de lettres qui seront affichés dans la colonne A par exemple.
mais aussi
Avoir la possibilité de trouver des mots dans le dico supportant ces 7 lettres de départ avec une possibilité d'en ajouter une et qui passerait en rouge dans la liste d'affichage.
Pourquoi ? :
Sur un plateau de jeu de lettres tu peux poser tes 7 lettres formant un mot existant en le collant à une lettre déjà placée sur le plateau de jeu.
Ce principe d'une lettre supplémentaire pour une chaine de caractères inférieure à 7 ne m'intéresse pas.
Grâce à Toi, je ne suis plus très loin du but final. Je pense qu'il reste à corriger ces histoires de doublons et cette différence de comptage du nombre de mots trouvés par rapport à ceux affichés.
Je pense que le travail doit être fait uniquement sur ce fichier qui est très proche, fonctionnellement parlant, de ce que j'ai envie d'en faire. Le reste n'est qu'une question d'adaptation, de design, d'ergonomie et d'options.
Par avance, merci et bonne soirée.
Tout d'abord, je remercie Michel pour ses réponses en espérant que je ne lui ai pas fait perdre du temps.
Frank, j'ai travaillé sur la macro que tu as donnée le 4 janvier. Je l'ai décortiquée avec mes connaissances et j'ai réalisé des essais en l'adaptant un peu. Dans le fichier dont l'adresse est la suivante :
http://www.cjoint.com/c/FABpRWETSJ7
J'ai réalisé 6 tests. Les explications, les résultats et mes questions sont mentionnés dans la Feuil1 du fichier. Des erreurs se sont glissées. Peut être parce que mes lignes de code sont mal placées ou mal formulées ... ou pour tout autre raison que je ne vois pas ??
Très important pour moi :
J'attends surtout des réponses (si possible bien sûr ...) aux questions que j'ai mises dans la zone de texte en vert pour que je puisse continuer à comprendre la macro et voir les résultats escomptés.
Je pars d'une chaine de caractères de 7 lettres max (range("I6")).
Pour une chaine de caractères allant de 3 à 6 lettres :
Je veux tirer de cette chaine, tous les mots possibles présents dans le dico ayant le même nombre de lettres et qui seront affichés dans la colonne A par exemple.
J'ai fait des essais avec 5 lettres et cela fonctionne hormis les doublons.
Pour une chaine de caractères de 7 lettres max uniquement :
Je veux tirer de cette chaine, tous les mots possibles présents dans le dico ayant le même nombre de lettres qui seront affichés dans la colonne A par exemple.
mais aussi
Avoir la possibilité de trouver des mots dans le dico supportant ces 7 lettres de départ avec une possibilité d'en ajouter une et qui passerait en rouge dans la liste d'affichage.
Pourquoi ? :
Sur un plateau de jeu de lettres tu peux poser tes 7 lettres formant un mot existant en le collant à une lettre déjà placée sur le plateau de jeu.
Ce principe d'une lettre supplémentaire pour une chaine de caractères inférieure à 7 ne m'intéresse pas.
Grâce à Toi, je ne suis plus très loin du but final. Je pense qu'il reste à corriger ces histoires de doublons et cette différence de comptage du nombre de mots trouvés par rapport à ceux affichés.
Je pense que le travail doit être fait uniquement sur ce fichier qui est très proche, fonctionnellement parlant, de ce que j'ai envie d'en faire. Le reste n'est qu'une question d'adaptation, de design, d'ergonomie et d'options.
Par avance, merci et bonne soirée.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
Modifié par pijaku le 28/01/2016 à 09:45
Modifié par pijaku le 28/01/2016 à 09:45
Bonjour,
Pour ce qui concerne les doublons, je ne suis pas encore certain d'avoir trouvé le pourquoi.
J'ai remplacé le T_Out par un Dico_Out, viré les variables obsolètes indTab et fin, enlevé le paramètre Plus (remplacé par la variable Plus dans la Sub Scrabble) et ajouté un paramètre String. C'est l'adresse de la première cellule de restitution des données (+ simple pendant les tests).
Ainsi, un exemple d'appel :
restituera la liste à partir de la cellule A4
En tout état de cause, voici le nouveau code qui corrige les bugs.
Et la réponse à tes questions :
Question 1
Le pourquoi des doublons ? Pour ma part, je pense peut être à un mauvais placement de ma ligne de code pour l'affichage des résultats ? Mais ça n'explique pas, que pour une chaine de 7 lettres on ait un doublon à chaque mot et non sur une chaine de 5 lettres.
Question 2
Dans la macro Sub Vazy
Je suppose que les lettres dans le Array dans l'exemple donné (Array("A", "R", "T", "U", "I", "O", "P")) ont été mises au hasard pour traiter l'exemple ?
Si je veux que le test se fasse sur tout l'alphabet, il faut indiquer toutes les lettres dans le Array ?
Question 3
Pourquoi une différence entre le nombre d'affichage de résultats et le nombre donné par la macro ?
Question 4
Comment mettre La procédure de création en mémoire de l'objet Dictionary à l'ouverture du classeur pour ne l'utiliser qu'une seule fois ?
Et voici ton FICHIER EXEMPLE
Avant, j'arrivais jamais à finir mes phrases... mais maintenant je
Pour ce qui concerne les doublons, je ne suis pas encore certain d'avoir trouvé le pourquoi.
J'ai remplacé le T_Out par un Dico_Out, viré les variables obsolètes indTab et fin, enlevé le paramètre Plus (remplacé par la variable Plus dans la Sub Scrabble) et ajouté un paramètre String. C'est l'adresse de la première cellule de restitution des données (+ simple pendant les tests).
Ainsi, un exemple d'appel :
Scrabble lettres_cherchees, Array("A", "R", "T", "U", "I", "O", "P"), "A4"
restituera la liste à partir de la cellule A4
En tout état de cause, voici le nouveau code qui corrige les bugs.
Public Dico_Out As Object, Dico As Object Sub Vazy() Dim lettres_cherchees As String 'appel de la procédure 'CAISSIE ==> correspond aux 7 lettres du rack 'Array("A", "R", "T", "U", "I", "O", "P") ==> Liste des 8èmes lettres possibles 'Si pas de lettres supp exemple Array() ==> pas de recherche supplémentaire '"C4" ==> String correspondant à la première cellule ou l'on veut restituer les mots trouvés 'exemples d'appels 'Scrabble "CAISSIE", Array("A", "R", "T", "U", "I", "O", "P"), "A4" ==> Scrabble + 'Scrabble "CAISSIE", Array(), "A4" ==> Scrabble '======================================================================== lettres_cherchees = UCase(Sheets("Feuil1").Range("I6").Value) Scrabble lettres_cherchees, Array("A", "R", "T", "U", "I", "O", "P"), "C4" End Sub Sub Scrabble(Chaine As String, Lettres_Sup As Variant, Cell_Restit As String) Dim t As Single, i As Integer, test As Long, Plus As Boolean Dim start Dim finish Dim duree 'départ chrono start = Time On Error Resume Next test = Dico.Count If Err <> 0 Then Creation_Dico On Error GoTo 0 'création du dictionary pour stocker les résultats Set Dico_Out = CreateObject("Scripting.Dictionary") Combiner Chaine, "" 'analyse si pas de valeur dans Lettres_Sup alors Scrabble simple sinon Scrabble + Plus = (UBound(Lettres_Sup) > -1) If Plus Then 'si le choix = Scrabble+ For i = LBound(Lettres_Sup) To UBound(Lettres_Sup) 'alors on combine avec toutes les lettres supplémentaires possibles Combiner Chaine & Lettres_Sup(i), "" Next i End If 'fin chrono finish = Time '======================================================================== AFFICHAGES 'affiche le timer de départ Sheets("Feuil1").Range("I1").Value = start 'affiche le timer de fin Sheets("Feuil1").Range("I2").Value = finish duree = finish - start 'affiche le temps mis pour la recherche Sheets("Feuil1").Range("I3").Value = duree 'affiche le nombre de mots trouvés Sheets("Feuil1").Range("I4").Value = Dico_Out.Count 'affiche la liste des mots trouvés Sheets("Feuil1").Range(Cell_Restit).Resize(Dico_Out.Count, 1) = Application.Transpose(Dico_Out.keys) '======================================================================== Debug.Print "procédure complète en : " & Timer - t & " nombre de mots trouvés : " & Dico_Out.Count End Sub Sub Combiner(strText As String, debut As String) 'Combiner établit la liste des combinaisons possibles 'avec la chaîne strText Dim i As Integer, l As Integer If Len(strText) = 1 Then 'si la combinaison existe dans le Dico ==> mot trouvé If Dico.Exists(debut & strText) Then 'on stocke ici le mot trouvé dans la variable Dico_Out Dico_Out(debut & strText) = "" End If Else For i = 1 To Len(strText) Combiner Mid(strText, 2, Len(strText) - 1), debut & Mid(strText, 1, 1) strText = Mid(strText, 2, Len(strText) - 1) & Mid(strText, 1, 1) Next End If End Sub Sub Creation_Dico() 'création du dictionnaire en mémoire à partir de la feuille dico Dim Lig As Long, DL As Long, Col As Integer, Tbl, tbis As Single tbis = Timer Set Dico = CreateObject("Scripting.Dictionary") Tbl = Sheets("dico").Range("A6:Z" & Sheets("dico").Cells.SpecialCells(xlCellTypeLastCell).Row) For Lig = LBound(Tbl, 1) To UBound(Tbl, 1) For Col = LBound(Tbl, 2) To UBound(Tbl, 2) Dico(Tbl(Lig, Col)) = "" Next Col Next Lig Debug.Print "création du dictionnaire en : " & Timer - tbis & " pour : " & Dico.Count & " mots" End Sub
Et la réponse à tes questions :
Question 1
Le pourquoi des doublons ? Pour ma part, je pense peut être à un mauvais placement de ma ligne de code pour l'affichage des résultats ? Mais ça n'explique pas, que pour une chaine de 7 lettres on ait un doublon à chaque mot et non sur une chaine de 5 lettres.
Les doublons sont, à mon avis, dus à un "double lancement" de la Sub Combiner.
Bon, je ne me l'explique pas complètement. Je me pencherais là dessus plus tard.
La parade la plus simple en attendant l'explication, est d'utiliser un Dictionary (Dico_Out) pour la restitution des données. C'est fait.
Question 2
Dans la macro Sub Vazy
Je suppose que les lettres dans le Array dans l'exemple donné (Array("A", "R", "T", "U", "I", "O", "P")) ont été mises au hasard pour traiter l'exemple ?
Si je veux que le test se fasse sur tout l'alphabet, il faut indiquer toutes les lettres dans le Array ?
Oui
J'ai enlevé le paramètre Plus. Cela évite de lancer la macro avec un Array vide et une demande de scrabble +. Le Scrabble + (8 lettres) ne se calculera que si des lettres sont données dans l'Array. La variable Booléenne Plus est maintenant calculée en fonction de l'UBound de l'Array passé en paramètre.
Question 3
Pourquoi une différence entre le nombre d'affichage de résultats et le nombre donné par la macro ?
Le nombre donné par la macro était faux. De ma faute... UBound(T_Out) nous donne l'indice du dernier élément du tableau, pas le nombre de valeurs contenues dans ce tableau. Comme le premier indice du tableau est 0, le nombre d'éléments est égal à UBound(T_Out) + 1.
Cette question n'a plus lieu d'être puisqu'on utilise un Dictionary. Il suffit d'utiliser Dico_Out.Count.
Question 4
Comment mettre La procédure de création en mémoire de l'objet Dictionary à l'ouverture du classeur pour ne l'utiliser qu'une seule fois ?
Dans VBE, dans la fenêtre VBA-Project, tu as les objets du classeurs. Dont l'objet Thisworkbook. Double clic dessus pour en ouvrir le Module de code.
C'est dans ce module que tu peux travailler avec les événements du classeur : ouverture (Open), fermeture (BeforeClose) etc...
Ici, tu veux à l'ouverture du classeur lancer la Sub Creation_Dico, je t'ai placé ce code :
Private Sub Workbook_Open() Creation_Dico End Sub
Il se déclenchera à chaque ouverture du classeur.
Et voici ton FICHIER EXEMPLE
Avant, j'arrivais jamais à finir mes phrases... mais maintenant je
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
28 janv. 2016 à 20:01
28 janv. 2016 à 20:01
Bonsoir,
J'ai compris, en passant l'aspirateur (rien à voir mais bon j'le signale quand même...), le problème des doublons.
Ça me turlupinais qu'il n'y en avait pas pour ton "mot" de 5 lettres mais qu'il y en avait pour 7...
C'est tout bête et j'aurais pu y penser avant. C'est toi qui m'a poussé à me poser cette question, donc tu mérites la réponse avant tout le monde.
Le souci vient du fait qu'on injecte dans la macro (Sub compiler) deux lettres identiques.
Il va trouver deux mots avec les mêmes lettres car le caractère double sera placé différemment.
Exemple :
Compiler("AAC")
nous donnera deux fois CAA :
Compiler (A1A2C) :
CA1A2
CA2A1
Ok?
Donc la solution du dictionary est bonne.
Je reviens demain pour te donner une éventuelle autre solution avec une variable tableau qui sera moins "lourde" en mémoire.
J'ai compris, en passant l'aspirateur (rien à voir mais bon j'le signale quand même...), le problème des doublons.
Ça me turlupinais qu'il n'y en avait pas pour ton "mot" de 5 lettres mais qu'il y en avait pour 7...
C'est tout bête et j'aurais pu y penser avant. C'est toi qui m'a poussé à me poser cette question, donc tu mérites la réponse avant tout le monde.
Le souci vient du fait qu'on injecte dans la macro (Sub compiler) deux lettres identiques.
Il va trouver deux mots avec les mêmes lettres car le caractère double sera placé différemment.
Exemple :
Compiler("AAC")
nous donnera deux fois CAA :
Compiler (A1A2C) :
CA1A2
CA2A1
Ok?
Donc la solution du dictionary est bonne.
Je reviens demain pour te donner une éventuelle autre solution avec une variable tableau qui sera moins "lourde" en mémoire.
mousaillon
Messages postés
55
Date d'inscription
jeudi 30 octobre 2014
Statut
Membre
Dernière intervention
3 mars 2016
1
>
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
29 janv. 2016 à 09:32
29 janv. 2016 à 09:32
Bonjour Pijaku
Ca vaut le coup de passer l'aspirateur .... je vais essayer lorsque j'aurai un problème à résoudre ..... ! Trêve de plaisanterie, en effet cela pourrait expliquer cela. C'est tout à fait cohérent.
J'ai travaillé un peu, encore, sur le fichier que tu m'as renvoyé. Je l'ai amélioré en faisant dans la même colonne des réponses (la colonne C), un tri sur les scrabble en haut de colonne et un tri à suivre sur les scrabble+. Ainsi, à suivre on a les scrabble triés puis les scrabbles+ triés. C'est plus lisible. J'ai également essayé avec tout l'alphabet dans le Array. Cela fonctionne bien (environ 1'45"" de temps de recherche). J'ai également mis un InputBox au début pour avoir le choix entre la sortie des scrabble ou des scrabble+. Le chargement se fait bien pour le dico ; soit juste avant la visu du fichier (juste après la fenêtre Office Excel) ou après l'ouverture (donc la visualisation de la Feuil1). Par contre j'ai remarqué lorsque je fais une modif sur la macro et qu'ensuite je fais un essai, il me recharge parfois le dico. C'est peu être normal ?
Demain je vais travailler (enfin je vais essayer) sur la modif du dico.
Merci et bonne journée à Toi.
Ca vaut le coup de passer l'aspirateur .... je vais essayer lorsque j'aurai un problème à résoudre ..... ! Trêve de plaisanterie, en effet cela pourrait expliquer cela. C'est tout à fait cohérent.
J'ai travaillé un peu, encore, sur le fichier que tu m'as renvoyé. Je l'ai amélioré en faisant dans la même colonne des réponses (la colonne C), un tri sur les scrabble en haut de colonne et un tri à suivre sur les scrabble+. Ainsi, à suivre on a les scrabble triés puis les scrabbles+ triés. C'est plus lisible. J'ai également essayé avec tout l'alphabet dans le Array. Cela fonctionne bien (environ 1'45"" de temps de recherche). J'ai également mis un InputBox au début pour avoir le choix entre la sortie des scrabble ou des scrabble+. Le chargement se fait bien pour le dico ; soit juste avant la visu du fichier (juste après la fenêtre Office Excel) ou après l'ouverture (donc la visualisation de la Feuil1). Par contre j'ai remarqué lorsque je fais une modif sur la macro et qu'ensuite je fais un essai, il me recharge parfois le dico. C'est peu être normal ?
Demain je vais travailler (enfin je vais essayer) sur la modif du dico.
Merci et bonne journée à Toi.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
>
mousaillon
Messages postés
55
Date d'inscription
jeudi 30 octobre 2014
Statut
Membre
Dernière intervention
3 mars 2016
29 janv. 2016 à 10:55
29 janv. 2016 à 10:55
Bonjour,
Par contre j'ai remarqué lorsque je fais une modif sur la macro et qu'ensuite je fais un essai, il me recharge parfois le dico. C'est peu être normal ?
Oui. Lorsque tu vas modifier sous VBE, il supprime les variables stockées en mémoire.
Je ne suis pas trop partant pour une InputBox. Pour laisser un choix à l'utilisateur, il vaut mieux utiliser une MsgBox type VbYesNo.
Un code un peu comme ça :
Ici, contrairement à l'inputbox, l'utilisateur ne peut pas faire d'erreur de saisie...
Par contre j'ai remarqué lorsque je fais une modif sur la macro et qu'ensuite je fais un essai, il me recharge parfois le dico. C'est peu être normal ?
Oui. Lorsque tu vas modifier sous VBE, il supprime les variables stockées en mémoire.
Je ne suis pas trop partant pour une InputBox. Pour laisser un choix à l'utilisateur, il vaut mieux utiliser une MsgBox type VbYesNo.
Un code un peu comme ça :
Dim rep As Integer rep = MsgBox("Voulez-vous un Scrabble +?", vbQuestion + vbYesNo, "CHOIX") If rep = vbYes Then MsgBox "Scrabble +++" Else MsgBox "Scrabble simple" End If
Ici, contrairement à l'inputbox, l'utilisateur ne peut pas faire d'erreur de saisie...
mousaillon
Messages postés
55
Date d'inscription
jeudi 30 octobre 2014
Statut
Membre
Dernière intervention
3 mars 2016
1
>
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
29 janv. 2016 à 17:29
29 janv. 2016 à 17:29
Bonsoir,
Tu as raison mais s'il y a une erreur c'est moi qui l'aurais faite car il n'y aura que moi qui répondrai à la question. Alors ça devrait le faire ! Bon week !
PS : par contre je me suis posé la question suivante : pourquoi as tu mis "rep" as Integer. Est ce pour la réponse : 1 = Yes et 0 = No (ou l'inverse) donnée par les deux boutons ?
Tu as raison mais s'il y a une erreur c'est moi qui l'aurais faite car il n'y aura que moi qui répondrai à la question. Alors ça devrait le faire ! Bon week !
PS : par contre je me suis posé la question suivante : pourquoi as tu mis "rep" as Integer. Est ce pour la réponse : 1 = Yes et 0 = No (ou l'inverse) donnée par les deux boutons ?
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
>
mousaillon
Messages postés
55
Date d'inscription
jeudi 30 octobre 2014
Statut
Membre
Dernière intervention
3 mars 2016
29 janv. 2016 à 18:39
29 janv. 2016 à 18:39
Bonsoir,
pourquoi as tu mis "rep" as Integer. Est ce pour la réponse : 1 = Yes et 0 = No (ou l'inverse) donnée par les deux boutons ?
Presque.
vbYes, tout comme vbNo sont des constantes. Elles sont toutes deux des Integer et leurs valeurs respectives sont 6 et 7.
Le code donné précédemment aurait donc pu s'écrire :
Pour toutes les valeurs de ces constantes vois ceci :
https://docs.microsoft.com/fr-fr/office/vba/language/reference/user-interface-help/msgbox-constants?redirectedfrom=MSDN
pourquoi as tu mis "rep" as Integer. Est ce pour la réponse : 1 = Yes et 0 = No (ou l'inverse) donnée par les deux boutons ?
Presque.
vbYes, tout comme vbNo sont des constantes. Elles sont toutes deux des Integer et leurs valeurs respectives sont 6 et 7.
Le code donné précédemment aurait donc pu s'écrire :
Dim rep As Integer rep = MsgBox("Voulez-vous un Scrabble +?", vbQuestion + vbYesNoCancel, "CHOIX") If rep = 6 Then 'vbYes MsgBox "Scrabble +++" ElseIf rep = 2 Then 'vbCancel MsgBox "Annulation" ElseIf rep = 7 Then 'vbNo MsgBox "Scrabble simple" Else 'dans tous les autres cas ==> mais comme il n'y a pas d'autres boutons cf MsgBox MsgBox "impossible de voir ce message" End If
Pour toutes les valeurs de ces constantes vois ceci :
https://docs.microsoft.com/fr-fr/office/vba/language/reference/user-interface-help/msgbox-constants?redirectedfrom=MSDN
mousaillon
Messages postés
55
Date d'inscription
jeudi 30 octobre 2014
Statut
Membre
Dernière intervention
3 mars 2016
1
28 janv. 2016 à 14:46
28 janv. 2016 à 14:46
Bonjour Pijaku,
Très heureux de voir une réponse aussi efficace et si rapide. J'ai regardé le fichier corrigé et fait les tests. C'est super ! Là grâce à toi, je vais faire un sacré bond pour moi continuer. En plus tout est clair dans tes explications. Réponses aux questions directes, ça c'est le top.
Je vais regarder pour mettre cette feuille "dico" au format .Txt
Comment présenter le fichier .Txt ?
Qu'est ce qui est le mieux : mettre tous les mots les uns en dessous des autres (tant pis pour la longueur du fichier) ou peut on mettre les mots les uns à côtés des autres et à suivre...ligne par ligne ? Je pencherais pour la 1ère solution.
En tous les cas, un grand merci !
Très heureux de voir une réponse aussi efficace et si rapide. J'ai regardé le fichier corrigé et fait les tests. C'est super ! Là grâce à toi, je vais faire un sacré bond pour moi continuer. En plus tout est clair dans tes explications. Réponses aux questions directes, ça c'est le top.
Je vais regarder pour mettre cette feuille "dico" au format .Txt
Comment présenter le fichier .Txt ?
Qu'est ce qui est le mieux : mettre tous les mots les uns en dessous des autres (tant pis pour la longueur du fichier) ou peut on mettre les mots les uns à côtés des autres et à suivre...ligne par ligne ? Je pencherais pour la 1ère solution.
En tous les cas, un grand merci !
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
28 janv. 2016 à 15:34
28 janv. 2016 à 15:34
Bonjour,
Tu as deux choix en ce qui concerne les fichiers txt.
1- tu fais un fichier avec un mot par ligne
2- tu fais un fichier type csv.
Le plus simple à exploiter comme on le fait nous (par un Objet Dictionary) étant la solution 1.
Sache toutefois que le fichier txt peut être créé, par macro, à partir de ton fichier Excel.
ça te ferait gagner beaucoup de temps.....
Mais tu n'en n'es pas encore là.
Dis nous...
Tu as deux choix en ce qui concerne les fichiers txt.
1- tu fais un fichier avec un mot par ligne
2- tu fais un fichier type csv.
Le plus simple à exploiter comme on le fait nous (par un Objet Dictionary) étant la solution 1.
Sache toutefois que le fichier txt peut être créé, par macro, à partir de ton fichier Excel.
ça te ferait gagner beaucoup de temps.....
Mais tu n'en n'es pas encore là.
Dis nous...
4 janv. 2016 à 11:00
Chapeau Frank !
je te plussoie et te laisse le bébé ! ;o)
4 janv. 2016 à 11:13
A ce propos bonne année aux participants de ce sujet.
Oui c'est un beau bébé que tu me laisses la...
Parce que, juste pour cette histoire de Scrabble+, moussaillon est parti sur une unique lettre supplémentaire. Donc 8 lettres maxi, ma réponse.
Mais quid des Scrabble+++ ou l'on pourrait, à partir d'un mot déjà placé, utiliser les 7 lettres du rack pour former un mot de plus de 10 lettres...
Exemple :
sur le plateau de jeu figure le mot : LUT
le rack est : IVOENOR
on pourrait donc placer le mot REVO LUT ION
...
à suivre.
Je te renouvelle mes voeux pour cette année à toi et tes proches.
A+
4 janv. 2016 à 11:19
Et bravo pour ta révolution, Kamarade !