VBA Fonction déterminant si un mot peut-être épelé avec une collection de lettres

Novembre 2017



liminaire

On vous donne une collection de "cubes" alphabétiques. Il y a vingt blocs avec deux lettres sur chaque bloc. Un alphabet complet est garanti entre tous les côtés des blocs.


Les règles sont simples :
  * Une fois qu'une lettre sur un bloc est utilisée, ce bloc ne peut plus être utilisé
  * La fonction doit être insensible à la casse


La collection des blocs:
(B O) (X K) (D Q) (C P) (N A) (G T) (R E) (T G) (Q D) (F S) (J W) (H U) (V I) (A N) (O B) (E R) (F S) (L Y) (P C) (Z M)

Code d'appel

Sub Main_ABC()
Dim Arr, i As Long

    Arr = Array("A", "barque", "WorkBook", "QUILLE", "ABCJEU", "SQUATTEUR", "CONFUSE")
    For i = 0 To 6
        Debug.Print ">>> Peut-on faire le mot " & Arr(i) & " ? => " & ABC(CStr(Arr(i)))
    Next i
End Sub

Code de la fonction

Function ABC(Mot As String) As Boolean
Dim C As New Collection
Dim Nb As Long, N As Long
Dim b As Integer, i As Integer
Const BLOCKS As String = "B,O;X,K;D,Q;C,P;N,A;G,T;R,E;T,G;Q,D;F,S;J,W;H,U;V,I;A,N;O,B;E,R;F,S;L,Y;P,C;Z,M"

    N = Len(BLOCKS) - Len(Replace(BLOCKS, ";", ""))
    For b = 0 To N
        C.Add Split(BLOCKS, ";")(b), Split(BLOCKS, ";")(b) & b
    Next b
    N = C.Count
    Nb = N
    For b = 1 To Len(Mot)
        For i = 1 To Nb
            If i > Nb Then Exit For
            If InStr(C(i), UCase(Mid(Mot, b, 1))) <> 0 Then
                C.Remove (i)
                Nb = Nb - 1
                Exit For
            End If
        Next
    Next b
    ABC = (N = (C.Count + Len(Mot)))
End Function

Résultat

Le résultat s'affiche dans la fenêtre d'exécution. Si celle-ci n'est pas affichée dans votre éditeur VBA, appuyez simultanément sur Ctrl+G.
>>> Peut-on faire le mot A ? => Vrai
>>> Peut-on faire le mot barque ? => Vrai
>>> Peut-on faire le mot WorkBook ? => Faux
>>> Peut-on faire le mot QUILLE ? => Faux
>>> Peut-on faire le mot ABCJEU ? => Vrai
>>> Peut-on faire le mot SQUATTEUR ? => Faux
>>> Peut-on faire le mot CONFUSE ? => Vrai

Publié par pijaku.
Ce document intitulé «  VBA Fonction déterminant si un mot peut-être épelé avec une collection de lettres  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.