Mélange de lettre dans un tableau

Bonsoir à tous,

J'espère que vous allez bien.

je viens vers vous car je suis à la recherche d'un moyen pour mélanger des lettres dans un tableau.

exemple j'ai un tableau qui fait a1:i36.

Dans chacune des cases il y a une lettre.

je cherche un moyen pour mélanger les lettres pour faire un jeux ou je pourrais venir glisser un mot à trouver dans les mélanges des lettres. le mots, je viendrais le mettre manuellement. Une idée pour que je puisse mélanger les lettres du tableau au besoin (donc à chaque fois que je veux recommencer le jeux ?)

merci de votre aide... attention, j'ai un vieux tacot pourri de pc qui à une veille version excel.

ben25

Bonsoir

Un exemple

Après , tu peux l'adapter à ton cas

272tirage-lettres.xlsm (17.61 Ko)

Bonne soirée

bonsoir,

comme vous dire merci... si ce n'est qu'en vous disant merci.. vs êtes super sympa....vraiment...je reste tjrs impressionner par la gentillesse de certaines personnes... merci à vous... sans abuser pouvez vous le renvoyer enregistrer sous format .xls...

merci à vous..

ben25

Bonsoir

Voici:

57tirage-lettres.zip (14.21 Ko)

Pour ce soir, j'arrête

On verra demain si besoin

Bonne soirée

un tt grand merci à vous... j'ai testé et j'ai un message d'erreur sur la macro "Set SL = CreateObject("System.Collections.SortedList")"

mais je vous laisse pr ce soir.. merci de votre aide...

très belle soirée..

ben25

Bonjour à tous

Une variante.

Bye !

96classeur1-v1.xlsm (34.06 Ko)
30classeur1-v1.zip (27.88 Ko)

bsr gmd,

un tt tt grand merci de votre aide... j'ai essayé le premier fichier qui marche parfaitement.

je me suis rendu compte que le tableau devrait être plus grand faire a1:ad30..

j'ai essayé de changer ds la macro mais je m'en mêle les pinceaux, vs pouvez m'aider à rectifier le tir ?

de même pouvez vous me dire, si je veux venir cacher un mot ds la grille j'ai intérêt à faire chaque fois une copie de l'original du tableau.

est-ce correct ?

encore mille merci de votre aide..

ben25

réponse erronée!

Bonsoir,

Une autre façon de faire :

Sub MélangerLettres()
    Dim Tinit(1 To 900), LstInit$, LstMix$, k$, i%, x%
    t = Timer
    With ActiveSheet.Range("A1:AD30")
        For i = 1 To 900
            Tinit(i) = .Cells(i)
            LstInit = LstInit & ChrW(i + 32)
        Next i
        Randomize
        For i = 1 To 900
            x = Int(Len(LstInit) * Rnd + 1)
            k = Mid(LstInit, x, 1)
            LstMix = LstMix & k
            LstInit = Replace(LstInit, k, "")
        Next i
        Application.ScreenUpdating = False
        For i = 1 To 900
            k = Mid(LstMix, i, 1): x = AscW(k) - 32
            .Cells(i) = Tinit(x)
        Next i
    End With
End Sub

Un tout petit peu plus de 200 millisecondes pour mélanger tes 900 lettres. Ça devrait aller ?

Cordialement.

Bonjour à tous,

Houla, on n'a pas le même pc MFerrand, 1.3 s chez moi ton programme.

Va falloir que je m'achète un kit artine

ma proposition, 0.17 s chez moi :

Sub melanger()
    Dim datas, t As Single, s As String
    Dim lig As Long, col As Long, lig2 As Long, col2 As Long, nblig As Long, nbcol As Long
    t = Timer
    datas = [A1:AD30].Value
    nblig = UBound(datas, 1): nbcol = UBound(datas, 2)
    Randomize
    For lig = 1 To nblig
        For col = 1 To nbcol
            lig2 = Int(Rnd * nblig + 1): col2 = Int(Rnd * nbcol + 1)
            s = datas(lig, col): datas(lig, col) = datas(lig2, col2): datas(lig2, col2) = s
        Next col
    Next lig
    [A1:AD30].Value = datas
    Debug.Print Timer - t
End Sub

eric

Bonjour à tous

le tableau devrait être plus grand faire a1:ad30..

Nouvelle version

Mais les versions de MFerrand et Eriiic sont beaucoup plus élégantes et (peut-être ?) plus rapides.

Bye !

31classeur1-v2.zip (46.08 Ko)

Salut Eric !

Effectivement c'est rapide ! 30 millisecondes chez moi ! Et ça peut même descendre autour de 15 !

Mais c'est relativement logique, tu fais beaucoup moins de manipulations : 900 substitutions.

En regard je les sors une par une, je les retire une par une et je les réintroduis une par une...

Et j'aurais été tenté de faire un second tirage complet pour assurer un meilleur mélange !

Cordialement.

edit : Après analyse je souscris à ta méthode ! la substitution fournit un résultat équivalent et beaucoup plus rapidement.

bonjour à tous,

je commence par m'excuser de vous répondre seulement maintenant à vos proportions de résolution de mon problème.

j'ai des horaires de boulot vraiment compliqué et j'avoue que parfois le temps me manque pr vous répondre.

mais soyez assuré que je vous suis reconnaissant de votre aide.

je suis vraiment confus et désolé de ne pas pvr donner suite tt de suite mais je fais au plus vite soyez en assuré.

encore mille excuses pr le retard...

je regarde plus attentivement vos pistes de solution au plus vite pour vous faire un retour

merci de votre compréhension..

ben25

Bonjour à toi !

Indéniablement la procédure la plus rapide est celle fournie par Eric... !

A son intention d'ailleurs j'indique que j'avais revu la mienne, pour compacter un peu plus les opérations, sans résultats, mais la seconde version revue à nouveau en plaçant les résultats dans un tableau de même forme que la plage pour affectation directe m'a fait réduire sensiblement mon temps...

Sub MélangerLettres3()
    Dim TMix(1 To 30, 1 To 30), LstInit$, k$, i&, x&, t!
    t = Timer
    For i = 1 To 900
        LstInit = LstInit & ChrW(i + 32)
    Next i
    Randomize
    With ActiveSheet.Range("A1:AD30")
        For i = 1 To 900
            x = Int(Len(LstInit) * Rnd + 1)
            k = Mid(LstInit, x, 1)
            x = AscW(k) - 32
            TMix((i - 1) \ 30 + 1, (i - 1) Mod 30 + 1) = .Cells(x)
            LstInit = Replace(LstInit, k, "")
        Next i
        .Value = TMix
    End With
    MsgBox (Timer - t) * 1000
End Sub

Celle-ci se déroule en 46 millisecondes. Je suis encore au-dessus des 30 autour desquelles tu plafonnes mais c'est tout de même mieux (mais je ne vois plus avec cette méthode comment gagner encore 15 à 20 millisecondes, surtout que j'obtiens parfois 15 ou 16 avec la tienne, voire même 14 une fois)

Cordialement.

Bonjour,

c'est sûr que c'est le passage par un tableau qui fait le principal gain.

Maintenant 15 ou 30 ms c'est kif-kif pour l'usage

Pour améliorer sensiblement à part un faux aléatoire, par exemple ne permuter que 2/3 des lettres en sachant que la probabilité que certaines ne changent pas augmente un peu, je ne vois pas.

eric

Salut Eric !

Dans la méthode que j'ai utilisée, je vois bien où se fait la différence... mais pas comment la réduire sans changer complètement de méthode et aller vers la tienne ! Mais c'était pas le but du jeu...

Bonne journée. Je vais passer à des affaires domestiques qui ne peuvent plus attendre pour ma part.

bsr à vous...

vous êtes super sympas de m'avoir répondu et lorsque je vous lis, vous parler de micro secondes...mais déjà un tableau qui mélange les lettres c'est déjà incroyable alors ne parlons pas de micro secondes... vs êtes tt simplement géniaux...un tt gd merci à tous ..

pour répondre à une question qui m'a été posé, ce que je cherche à faire c'est avoir un tableau 30x30 avec des lettres.

dans ce tableau, je vais cacher le titre d'une chanson pour la faire trouver mais.... toute les 4 minutes, je vais remélanger le tableau pour rendre la recherche plus difficile...

ds la proposition retenue, je pense que je n'ai d'autre choix que de sauvegarder l'original puis faire des copies chaque fois que je vais remélanger les lettres.... j'ai raison ?

à) vous lire,

ben

Bonjour,

pour quoi en faire une mémorisation du 1er tableau ?

Mémoriser le titre est suffisant non ?

Pour moi pas la peine de re-mélanger toutes les 4 minutes Si toutes les lettres sont dispersées je pense que c'est mission quasi impossible de retrouver un titre...

eric

bsr eriiic,

merci de ta réponse..ça fait plaisir...

pq re-mélanger ? ben si le titre est "varsovie" je vais avoir le mot que je dois venir mettre dans le tableau.

si je re-mélange les lettres, je pensais aussi bouger le(s) mot(s) de place ds le tableau pour déstabiliser les personnes qui cherchent..

tu avais une autre idée ?

merci à toi...

ben25

Sauf que tu as demandé de mélanger les lettres, elles le sont toutes.

Tu n'as jamais parlé de mots dont il ne fallait pas mélanger les lettres.

A question mal posée et incomplète réponses inutiles, inadaptées et temps perdu..

eric

Rechercher des sujets similaires à "melange lettre tableau"