XL 2016 Construction du jeu de modus

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

papychat1

XLDnaute Nouveau
Supporter XLD
Bonjour le jeu de motus avance grace à l'aide de jurassic pork et de sylvanu
que je remercie encore pour les découvertes qu'ils m'ont apportées.
Rest que je voudrais maintenant que le curseur se place dans le première cellule vide de la ligne en cour
exemple au départ en b1 puisque le nouveau mot affiche la première lettre de celui-ci.
dès que je rentre une lettre donc en b1 celui-ci passe en c1 etc...
Après validation on passe en ligne 2 et en b2 puisque la première lettre s'affiche de part le code.
Tout cela en pouvant cependant garder un accès à ce curseur pour pouvoir éventuellement modifier une lettre.
Ok je suis exigent mais je vous remercie par avance.
Bien cordialement
un vieux qui essaye de mieux comprendre les formule vba ainsi que les fonctionnalités
 
Solution
Oui c'est la fonction de comparaison elle est rapide mais elle demande que la liste des mots soit toujours triée donc si tu decide d'ajouter des mots il faut appliquer un tri A-Z sur la colonne A.


C'est juste un code pour le test en réalité pour activer l'evenement OnselectionChange apres un arrêt forcé de débogage ..tu peux le retirer


On peut régler ce problème en interdisant l'ecrture dans la ligne suivante si le mot bon est trouvé : la condition motPropose <> motADeviner à ajouter
Code:
           If (ligne < 6) And (motPropose <> motADeviner) Then   ' coloration de la ligne suivante uniquiment les lettres valides
              ws.Cells(ligne + 1, I) = Mid(motADeviner2, I, 1)  ' Vert
              ws.Cells(ligne + 1...
Bonjour le jeu de motus avance grace à l'aide de jurassic pork et de sylvanu
que je remercie encore pour les découvertes qu'ils m'ont apportées.
Rest que je voudrais maintenant que le curseur se place dans le première cellule vide de la ligne en cour
exemple au départ en b1 puisque le nouveau mot affiche la première lettre de celui-ci.
dès que je rentre une lettre donc en b1 celui-ci passe en c1 etc...
Après validation on passe en ligne 2 et en b2 puisque la première lettre s'affiche de part le code.
Tout cela en pouvant cependant garder un accès à ce curseur pour pouvoir éventuellement modifier une lettre.
Ok je suis exigent mais je vous remercie par avance.
Bien cordialement
un vieux qui essaye de mieux comprendre les formule vba ainsi que les fonctionnalités
j'ai omis le lien, l'âge!!!:
https://www.cjoint.com/c/OAFt2ZmRBb5
 
Bonsoir,
Proposition :
1.) déplacer la variable ongueurMot dans le modile3
VB:
Public Lettre$, cellule
Public longueurMot As Integer
et ajouter ce code dans celui de la Feuil1(Jeu)
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer
    If Target.Count > 1 Then Exit Sub
    If Target.Column < longueurMot Then
        For i = Target.Column + 1 To longueurMot
            Debug.Print i, Cells(Target.Row, i)
            If Cells(Target.Row, i) = "" Then
                Cells(Target.Row, i).Select
                Exit Sub
            End If
        Next i
    End If
    For i = 1 To Target.Column - 1
        If Cells(Target.Row, i) = "" Then
            Cells(Target.Row, i).Select
            Exit Sub
        End If
    Next i
End Sub
Cordialement,
 
Bonsoir,
Proposition :
1.) déplacer la variable ongueurMot dans le modile3
VB:
Public Lettre$, cellule
Public longueurMot As Integer
et ajouter ce code dans celui de la Feuil1(Jeu)
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i As Integer
    If Target.Count > 1 Then Exit Sub
    If Target.Column < longueurMot Then
        For i = Target.Column + 1 To longueurMot
            Debug.Print i, Cells(Target.Row, i)
            If Cells(Target.Row, i) = "" Then
                Cells(Target.Row, i).Select
                Exit Sub
            End If
        Next i
    End If
    For i = 1 To Target.Column - 1
        If Cells(Target.Row, i) = "" Then
            Cells(Target.Row, i).Select
            Exit Sub
        End If
    Next i
End Sub
Cordialement,
Bonjour et merci gégé 45550
j'ai bien placé dans module 3
cependant le code dans la feuille 1,
après plusieurs essais je ne sais pas où exactement le placé dans le code existant?
Au début?
avant fin?
où entre fin et end sub?
Merci
 
J'ai aucune idée sur le jeu mais si tu cherches à passer à la cellule vide suivante dans la grille essaie ce code:
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo Fin
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("A1:I6")) Is Nothing Then
        cellule = (Target.Row - 1) * 7 + Target.Column
    ElseIf Not Intersect(Target, Range("A8:I10")) Is Nothing Then
        Dim Rng As Object, i As Long
        Set Rng = Range("A1:G6")
        If cellule = "" Then
           cellule = 1
        End If
        Rng.Cells(cellule) = Target
        For i = cellule To Rng.Count
          If Rng.Cells(i) = "" Then
             cellule = i
             Exit For
          End If
        Next
        Rng.Cells(cellule).Select
    End If
Fin:
End Sub
 
Bonjour tout le monde,
Un essai en PJ.
J'ai rétréci la liste de mot pour que ça tienne sous 1Mo, et éviter d'utiliser un service tiers.
( les PJ sur Cjoint finisse par être effacées et donc inaccessible )
Bonjour sylvanu, merci de revenir tu m'as déjà beaucoup aider
Je viens de tester c'est bon jusqu'au moment de valider
car ce code ne s'arrête pas en fin de mot pour la validation
et du coup se place bien en ligne en dessous sans recopier la lettre indiquée au départ en a1.
Mais un grand merci pour ce soutien
Pour plus d'information
je participe bénévolement à un club d'informatique "Basique!!!!" pour sénior, sénior moi même.
Et ce jeu semble leur plaire, c'est pourquoi je vous sollicite.
 
J'ai aucune idée sur le jeu mais si tu cherches à passer à la cellule vide suivante dans la grille essaie ce code:
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo Fin
    If Target.Count > 1 Then Exit Sub
    If Not Intersect(Target, Range("A1:I6")) Is Nothing Then
        cellule = (Target.Row - 1) * 7 + Target.Column
    ElseIf Not Intersect(Target, Range("A8:I10")) Is Nothing Then
        Dim Rng As Object, i As Long
        Set Rng = Range("A1:G6")
        If cellule = "" Then
           cellule = 1
        End If
        Rng.Cells(cellule) = Target
        For i = cellule To Rng.Count
          If Rng.Cells(i) = "" Then
             cellule = i
             Exit For
          End If
        Next
        Rng.Cells(cellule).Select
    End If
Fin:
End Sub
Bonjour et merci pour ton aide,
effectivement il y a des possibilités,
cependant il m'est impossible de valider le mot et le curseur ne revient pas au départ,
je vais tout de même étudier le code que tu me proposes.
Merci et bon week-end
 
Dernière édition:
Bonjour et merci gégé 45550
j'ai bien placé dans module 3
cependant le code dans la feuille 1,
après plusieurs essais je ne sais pas où exactement le placé dans le code existant?
Au début?
avant fin?
où entre fin et end sub?
Merci
Le code est à placer dans celui de Feuil1, dans l'évènement Change.
Ne pas oublier de passer la variable longueurMot en Public dans le Module3 et de la sortir de la procédure où elle est actuellement déclarée.
Cordialement
 
Nouvelle version. La vérif est automatique en fin de mot.
Bonjour sulvanu,
Que dire de plus tu es super! C'est parfait
un grand merci pour distraire mes ainés!
Je vais décortiquer ton code pour essayer de tout comprendre. en attendant
je te souhaite une bonne journée
et te remercie de ta générosité.
Bien cordialement
JML
Ps si certains veulent utiliser ton travail,
ils peuvent y rajouter une vérification du mot tapé
par un dictionnaire pour éviter l'entrée de mots incohérents.
 
ils peuvent y rajouter une vérification du mot tapé
par un dictionnaire pour éviter l'entrée de mots incohérents.
Ma stratégie au Modus n'est pas de faire des mots intermédiaires cohérents mais de déterminer les lettres présentes dans le mot final.
Si ça commence par T, alors mon premier mot sera du genre TAEIOUR, les voyelles pour déterminer lesquelles sont présentes, le R car souvent présent.
Donc votre contrôle pénaliserait certaines stratégies.
 
Re,
Pour illustrer mes propos, pour le fun, et parce qu'on est dimanche, j'ai regardé la distribution des lettres dans votre liste.
On obtient pour165 536 mots, et 1 291 718 lettres la distribution suivante :
1738513179395.png

Donc mon premier mot serait si V est la première lettre : VEASIRTN
😉
 
Regardez dans le fichier joint
Waouh! je ne t'en demander pas tant mais effectivement c'est super.
c'est ce code qui permet la comparaison?
Private Function BSearch(ByVal AStr As String) As Long
Dim wsMots As Worksheet
Dim Mn As Long, Mx As Long
Set wsMots = Worksheets("Mots")
Mx = wsMots.Cells(wsMots.Rows.Count, "A").End(xlUp).Row - 1
Do
BSearch = (Mn + Mx) \ 2&
Select Case StrComp(wsMots.Cells(BSearch + 1, 1), AStr, vbBinaryCompare)
Case 0: BSearch = BSearch + 1: Exit Function
Case Is < 0: Mn = BSearch + 1&
Case Is > 0: Mx = BSearch - 1&
End Select
Loop Until Mn > Mx
BSearch = 0
End Function
En tout cas tu es .Excellent!
Re,
Pour illustrer mes propos, pour le fun, et parce qu'on est dimanche, j'ai regardé la distribution des lettres dans votre liste.
On obtient pour165 536 mots, et 1 291 718 lettres la distribution suivante :
Regarde la pièce jointe 1212243
Donc mon premier mot serait si V est la première lettre : VEASIRTN
😉
C'est de la folie!!! Juste encore une petite explication à quoi sert ce code et quand apparait ce message ?

Sub rrr()
Application.EnableEvents = True
MsgBox InStr("AZERT", "0")
End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
1
Affichages
365
Retour