Scrabble VBA Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
p
pallindrome
Nouveau venu
Nouveau venu
Messages : 8
Inscrit le : 27 mars 2018
Version d'Excel : 2016

Message par pallindrome » 27 mars 2018, 16:41

Bonjour / Bonsoir

Voilà , pour un projet à la FAC , je dois créer un scrabble duplicate sous excel VBA .

Je suis bloqué à une étape , la voici :

Je dois placer mon mot sur un chevalet (de 7 lettres) , lettre par lettre .
Ensuite, je dois sélectionner sur le plateau , les cases voulu pour la pose du mot .
Ensuite la macro dois vérifier le mot (ça normalement c'est OK ) , Compter les points , et le poser .
Il dois aussi vérifier que , lorsqu'il y a un autre mot dans sont sillage , que le mot déjà poser reste valide .

Aussi , je peux proposer une fin de mot , et le coller a une autre lettre , la macro dois donc vérifier le mot en entier .

Je met une image pour mieux comprendre :
Image

Ici , je veux former ESSAIM , avec le E de palette , et SSAIM de mon chevalet .
Il dois donc former ESSAIM avec, vérifier s'il est valide , mais aussi vérifier que PLANETES et valide pour le coups .

DONC VOILA , c'est chaud quoi ...

Je suis conscient que c'est compliquer à comprendre et/ou à réaliser ....

J'aimerais déjà juste pouvoir poser dans un premier temps mon mot former sur le chevalet .

Merci d'avance , n'hésiter pas à me demander plus d'info
Avatar du membre
i20100
Passionné d'Excel
Passionné d'Excel
Messages : 5'343
Appréciations reçues : 297
Inscrit le : 16 mars 2017
Version d'Excel : 2010

Message par i20100 » 27 mars 2018, 21:39

Bonjour,

voici un exemple à tester,
Sub Inscrire_Lettres()
Dim MyCol As New Collection
lettres = "SSAIM"
nb = Len(lettres)
texte = "Sélectionnez   " & nb & "   cases pour inscrire vos lettres!"
MyCol.Add Application.InputBox(texte, , , , , , , 8)
  If TypeOf MyCol(1) Is Range Then Set selectRange = MyCol(1) Else Exit Sub
 
x = selectRange.Columns.Count
If x <> nb Then Exit Sub

For i = 1 To Len(lettres)
ActiveSheet.Range(selectRange.Address)(i) = Mid(lettres, i, 1)
Next
End Sub
1 membre du forum aime ce message.
Vive ces nouvelles saisons qui nous colorent.
isabelle
p
pallindrome
Nouveau venu
Nouveau venu
Messages : 8
Inscrit le : 27 mars 2018
Version d'Excel : 2016

Message par pallindrome » 28 mars 2018, 17:25

Ca marche NIQUEL !

J'ai adapter avec mon sujet et ça marche super bien ;)

Par contre, j'ai un nouveau problème

Le joueur peut être amener à placer des lettres entre des mots déjà existant , pour former un mot .
(Par exemple , un mot entre la lettre L de palette et E de planete )
Du coup le joueur dois sélectionner la case (ou les) a gauche de L , entre L et E , et a droite de E.

Avec la solution si dessus, ça ne marche pas .

Est -il possible de récupérer la valeur de la première case et de la dernière case sélectionnée , pour reformer une grande sélection ?
Avatar du membre
i20100
Passionné d'Excel
Passionné d'Excel
Messages : 5'343
Appréciations reçues : 297
Inscrit le : 16 mars 2017
Version d'Excel : 2010

Message par i20100 » 28 mars 2018, 18:11

Bonjour,

voici la correction pour une plage de cellules discontinue,
Sub Inscrire_Lettres()
Dim MyCol As New Collection
lettres = "SSAIM"
nb = Len(lettres)
texte = "Sélectionnez   " & nb & "   cases pour inscrire vos lettres!" & Chr(10) & _
"Utiliser la touche CTRL pour sélectionner une plage de cellules discontinue"

MyCol.Add Application.InputBox(texte, , , , , , , 8)
  If TypeOf MyCol(1) Is Range Then Set selectRange = MyCol(1) Else Exit Sub
 
x = selectRange.Cells.Count
If x <> nb Then Exit Sub

For Each c In selectRange
 i = i + 1
 ActiveSheet.Range(c.Address) = Mid(lettres, i, 1)
Next
End Sub
1 membre du forum aime ce message.
Vive ces nouvelles saisons qui nous colorent.
isabelle
p
pallindrome
Nouveau venu
Nouveau venu
Messages : 8
Inscrit le : 27 mars 2018
Version d'Excel : 2016

Message par pallindrome » 28 mars 2018, 23:06

MAIS QU'EST CE QUE J'AURAIS FAIS SANS TOI xDD

Merci beaucoup , vraiment là tu me sauve la vie xD

Dernière question, comment je récupère les coordonnées de mes cellules ?

Encore merci ;)
Avatar du membre
i20100
Passionné d'Excel
Passionné d'Excel
Messages : 5'343
Appréciations reçues : 297
Inscrit le : 16 mars 2017
Version d'Excel : 2010

Message par i20100 » 28 mars 2018, 23:46

Bonjour,

si c'est pour être utilisé dans une autre macro,
tu pourrais mettre ces adresses dans une variable tableau,
par exemple:
'déclarer la variable tableau "ListSelectRange" dans le haut du module1
Public ListSelectRange()

Sub Inscrire_Lettres()
Dim MyCol As New Collection
lettres = "SSAIM"
nb = Len(lettres)
texte = "Sélectionnez   " & nb & "   cases pour inscrire vos lettres!" & Chr(10) & _
"Utiliser la touche CTRL pour sélectionner une plage de cellules discontinue"

MyCol.Add Application.InputBox(texte, , , , , , , 8)
  If TypeOf MyCol(1) Is Range Then Set selectRange = MyCol(1) Else Exit Sub
 
x = selectRange.Cells.Count
If x <> nb Then Exit Sub

For Each c In selectRange
 i = i + 1
 ActiveSheet.Range(c.Address) = Mid(lettres, i, 1)
 ReDim Preserve ListSelectRange(i)
 ListSelectRange(i) = c.Address
Next
End Sub
Vive ces nouvelles saisons qui nous colorent.
isabelle
p
pallindrome
Nouveau venu
Nouveau venu
Messages : 8
Inscrit le : 27 mars 2018
Version d'Excel : 2016

Message par pallindrome » 29 mars 2018, 13:13

Pour le ReDim preserve , il m'affiche :
Erreur compilation Attendu : Identificateur .

Qu'est ce que c'est ?

(PS : j'utilise un option explicit)
Avatar du membre
i20100
Passionné d'Excel
Passionné d'Excel
Messages : 5'343
Appréciations reçues : 297
Inscrit le : 16 mars 2017
Version d'Excel : 2010

Message par i20100 » 29 mars 2018, 15:04

(PS : j'utilise un option explicit)
il faut déclarer la variable i
ajouter à la macro
Dim i As Integer
Vive ces nouvelles saisons qui nous colorent.
isabelle
p
pallindrome
Nouveau venu
Nouveau venu
Messages : 8
Inscrit le : 27 mars 2018
Version d'Excel : 2016

Message par pallindrome » 29 mars 2018, 15:38

Encore une erreur ...

Je t'envoie l'erreur et mon code :

Image
p
pallindrome
Nouveau venu
Nouveau venu
Messages : 8
Inscrit le : 27 mars 2018
Version d'Excel : 2016

Message par pallindrome » 29 mars 2018, 15:55

Re Bonjour !

J'ai trouver une autre solution ;)
La voici :
 
Sub Coordonnées_sélection()

    	LigneDebut = Selection.Row
    	LigneFin = ActiveCell.Row
    
    	ColonneDebut = Selection.Column
   	ColonneFin = ActiveCell.Column
    
   	If LigneDebut = LigneFin Or ColonneDebut = ColonneFin Then
        	Cells(10, 45).Value = LigneDebut
        	Cells(10, 46).Value = ColonneDebut
        
        	Cells(11, 45).Value = LigneFin + Selection.Rows.Count - 1
        	Cells(11, 46).Value = ColonneFin + Selection.Columns.Count - 1
    	Else
        	Cells(10, 45).Value = LigneDebut
        	Cells(10, 46).Value = ColonneDebut
        
        	Cells(11, 45).Value = LigneFin
        	Cells(11, 46).Value = ColonneFin
   	End If
End Sub
Encore merci ^^

Edit : J'ai trouver tout compte fais , c'est pas le meilleur je suppose, mais ça marche !
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message