Probleme exercice
Ouais ben le voilà : cryptage_decryptageV3
Bon c'est loin d'être parfait, il manque pas mal de gestion d'erreur je pense, et peut-être d'optimisation. J'ai mis quelques remarques dans le classeur.
Après je me demandais si on pouvait pas passer par des variables tableau et des boucles pour le calcul des matrices, et pouvoir proposer de créer une matrice 2x3 ou 3x2 ou 4x4,...
Je vous l'envoie juste avant le w-e, comme ça ça vous laisse 2 jours pour réfléchir aux améliorations
Bon w-e
L’objectif premier de ce projet est de vous permettre d’assimiler les outils qui vous ont été présentés lors des 3 séances de TD en utilisant un maximum de ces outils lors de la conception d’une « note de calcul » conviviale, sécurisée, fonctionnelle et performante
Quels sont ces outils gégé? Peut-être que ça pourrait nous aider à t'aider mieux!!
Salut sylvain, gégé et le forum,
Après quelques tests, il se trouve que ton problème d'espace en fin de texte existe aussi pour les matrices 3x3.
1. Par exemple, en mettant un espace à la fin du message à coder suivant : "CA Y EST CA MARCHE", le message crypté (avec la matrice 3x3 par défaut) est le même que s'il n'y avait pas d'espace.
En fait je ne vois pas trop d'où vient le problème car j'avoue que ce que tu as fait sylvain commence à ne plus être de mon niveau!!
Je savais même pas que ce que tu as codé en VBA existait!!
2. Une autre ptite (!) amélioration consiste à faire en sorte que lorsqu'on choisit de créer sa propre matrice 3x3, lorsqu'on appuie sur "Tabulation", le curseur aille dans "l'ordre" des cases!!
Je m'explique. Soient :
1 2 3
4 5 6
7 8 9
les neuf cases de la matrices 3x3. Le curseur est par défaut en case 1. Il serait bien que lors de l'appui sur la touche Tab, le curseur aille en 2, puis en 3, puis en 4 et ainsi de suite.
Dans ton cas sylvain, le curseur va dans l'ordre suivant : 1, 2, 4, 5, puis sur le bouton OK (!), puis sur 8, 7, 9, 6, 3!! Ceci est dû au fait que tu n'as pas dessiné les boutons dans le bon ordre!!
3. Lors de la création de notre propre matrice, si on ne rentre pas de valeur et qu'on clique sur OK, une erreur de type "Incompatibilité de type" est retournée.
Voilà sylvain quelques améliorations possibles! Vu que t'es le plus en mesure d'ajouter ces améliorations et que j'ai seulement un rôle plus basique (celui d'énoncer ces améliorations
vba-new a écrit :en mettant un espace à la fin du message à coder suivant : "CA Y EST CA MARCHE", le message crypté (avec la matrice 3x3 par défaut) est le même que s'il n'y avait pas d'espace
Oui c'est bien ce que je dis : j'avais choisi ce message car il contient 18 caractères, donc multiple de 2 et de 3.
Si tu ajoutes 1 ou 2 caractères avec une matrice 3x3, ils sont négligés, car le "produitmat" ne marche pas avec les dernières valeurs nulles...
Donc moi ce que je veux c'est ajouter des espaces pour arriver à un multiple de 2 ou de 3, en fonction de la matrice utilisée.
vba-new a écrit :lorsqu'on appuie sur "Tabulation", le curseur aille dans "l'ordre" des cases!!
Ouais ça j'avais vu aussi... J'ai pas trop l'habitude des userforms encore, mais je pense que je devrais arriver à le résoudre, en renommant les textbox dans leur ordre de création. Le problème vient du fait que j'ai copié le userform 2x2 pour faire le 3x3.
vba-new a écrit :Lors de la création de notre propre matrice, si on ne rentre pas de valeur et qu'on clique sur OK, une erreur de type "Incompatibilité de type" est retournée.
Là c'est de la gestion d'erreur, ça doit pas être trop compliqué mais ça prend du temps, c'est pour ça que je l'avais sauté jusqu'ici...
Vu le temps qu'il fait chez moi ce w-e, je pense que je vais consacrer un peu de temps à améliorer tout ça.
gege a écrit :......
Ben non il a pas écrit grand chose en fait...
Allez plus qu'une semaine et on n'a toujours pas tes remarques...
Salut sylvain,
J'ai fait une petit modif des userforms pour que le curseur aille dans l'ordre. Ce sera déjà ça de fait!! (Si ce n'est pas déjà fait
https://www.excel-pratique.com/~files/doc2/cryptage_decryptageV4_userform_bon.zip
Re,
1. Après une petite recherche sur internet, regarde ce que j'ai trouvé sylvain : http://www.apprendre-en-ligne.net/crypto/hill/hill3.html
Ca pourrait t'aider je pense!! Ca parle de la cryptographie de Hill avec matrice 3x3.
2. Dans le fichier que tu avais mis en ligne, ta dernière remarque était judicieuse :
La matrice inverse ne doit contenir que des arguments entiers, ce qui n'est souvent pas le cas pour des matrices rentrées au hasard. Il faudrait le vérifier et interdire la procédure si ça ne colle pas.
En fait, ceci est vrai si on calcule la matrice inverse de façon "ordinaire".
Apparemment, dans la cryptographie de Hill, le calcul de l'inverse d'une matrice se fait modulo 26. Pour justement se retrouver qu'avec des nombres entiers non négatifs dans les arguments de la matrice inverse.
Explication à l'adresse suivante : http://www.apprendre-en-ligne.net/crypto/hill/index.html
Dans notre cas, on calculerait l'inverse de la matrice modulo 27 (car 26 caractères + espace).
Seulement voilà, ce point n'a visiblement pas été pris en compte (mais pourrait servir à remonter la note
Il existe des algorithmes efficaces pour déterminer l'inverse de k (mod n), par exemple l'algorithme d'Euclide étendu. Mais quand n=26, la méthode "force brute" est sans doute la manière la plus simple
Oui mais nous on a n=27, alors force brute ou pas ??
Bon j'avais vu ton post hier soir, mais un fois de plus j'avais pas ma clé USB pour récupérer ces infos et essayer de les assimiler à tête reposée...
Du coup je me suis pas occupé de ça, ni d'aucune gestion d'erreur d'ailleurs. Je reconnais que c'est un point super important pour rendre un travail propre, mais ça m'amuse pas trop, donc flemme
A la place je me suis grillé quelques neurones à mettre en place un système de boucles pour utiliser le même code, quels que soient les nombres de lignes et de colonnes de la matrice d'encryptage... 8)
Un boulot pas facile, pour un résultat pas facile à comprendre non plus je pense
Pas testé à 100% mais il semble que ça marche quand même.
Un point faible à cette nouvelle méthode : comme j'utilise un copier-coller pendant la mise en place des matrices, on ne peut pas coller un message dans l'userform de saisie. Ou bien il faut aller le chercher dans une autre application qu'excel, après que l'userform soit apparu
Enfin je suis pas mécontent quand même
Ce qu'il faudrait faire maintenant de facile : un seul bouton "matrice perso", qui renvoie sur un userform pour choisir de créer une 2x2, 2x3, 3x2 ou 3x3
Moi je m'occupe de dire que si les arguments inverses ne sont pas entiers on quitte la procédure avec un message d'erreur, ce ne sera pas très élégant mais bon...
Ah oui voici quand même mon fichier : cryptage_decryptageV5
PS : Gege si tu passes par là, ce serait sympa d'éditer ton premier message, pour remplacer le titre du sujet par "Matrice de cryptage" par exemple (pour permettre des recherches)
Salut sylvain, tu m'as l'air d'avoir fait du bon travail!!
Sylvain TBM a écrit :mais ça m'amuse pas trop, donc flemme
J'ai fait
J'ai regardé ton fichier Sylvain, j'ai vu que t'a créé de nouvelles macros mais j'avoue ne pas trop comprendre le code!!
Sylvain TBM a écrit :Il existe des algorithmes efficaces pour déterminer l'inverse de k (mod n), par exemple l'algorithme d'Euclide étendu. Mais quand n=26, la méthode "force brute" est sans doute la manière la plus simple
Oui mais nous on a n=27, alors force brute ou pas ??
Je dirais que oui. Pour n=27, ça change pas grand chose.
Sylvain TBM a écrit :Ce qu'il faudrait faire maintenant de facile : un seul bouton "matrice perso", qui renvoie sur un userform pour choisir de créer une 2x2, 2x3, 3x2 ou 3x3
Ah bon
Sylvain TBM a écrit :Moi je m'occupe de dire que si les arguments inverses ne sont pas entiers on quitte la procédure avec un message d'erreur, ce ne sera pas très élégant mais bon...
Oui je pense que t'as raison, et pis ça fait moins de travail
désolé de ne pas être la pendant un certain temps ( pas chez moi^^)
Salut Gege,
Je vais essayer de regarder dans ton sens.
Je comprends pas trop ce point :
Gege a écrit :il faut forcément que je réinitialise sur VBA pour a chaque fois changer de mot
Pour l'instant juste un petit truc au vol : si tu veux éviter de passer par tes formules lourdes (mais audacieuses
Private Sub Btn_codage_Click()
Dim Message As String, Caractere As String
Dim i As Byte
Message = Edit_codage.Value
Range("A19:A70").ClearContents
For i = 1 To Len(Message)
Caractere = Mid(Message, i, 1)
[code]Sheets("donnees").Range("A18").Offset(i, 0) = Caractere
Next i
End Sub[/code]
En français : Tu fais évoluer une variable i de 1 jusqu'au nombre de caractères du message (avec un pas de 1)
Pour chaque valeur que prend i
Caractere = Mid(Message, i, 1)
isole le caractère qui se trouve en position i dans la chaîne de caractère "Message"
Sheets("donnees").Range("A18").Offset(i, 0) = Caractere
copie le caractère dans la cellule A18, décalée de i lignes
Commence à réfléchir en te servant de la boucle ci dessus (for i = 1 to ... )Gege a écrit :je n'arrive pas a regrouper toute les lettres en une phrase pour l'incorporer dans la boite de dialogue
Ce qu'il te faut faire : prendre chaque cellule de E19 jusqu'à la dernière remplie (ou jusqu'au nombre de caractères du message, puisque tu le connais)
pour chaque cellule (chaque valeur de i) tu récupères le caractère, et tu dis que ton message = le message + le caractère
Tu auras donc pour i=1 : message = "" & O
pour i=2 : message = O & L
pour i=3 : message = OL & T
pour i=4 : message = OLT & W
Bon courage, si tu comprends ça, tu t'ouvriras des possibilités énormes
ok merci
pour le point que tu n'a pas compis en fait il n'y a pas de probleme
sinon pour le premier point que tu as écrit je ne comprend pas car cela ne marche pas à moins que j'ai oublié de faire quelque chose
j'ai changer le code sur vba mais après il faut faire quelque chose d'autre?
pour le second point expliquer il faut que je marque cette fonction sur vba sur la zone de texte où je veux que la phrase s'affiche??
gege37 a écrit :sinon pour le premier point que tu as écrit je ne comprend pas car cela ne marche pas à moins que j'ai oublié de faire quelque chose
j'ai changer le code sur vba mais après il faut faire quelque chose d'autre?
Non quand tu cliqueras sur le bouton "Coder un message" (après avoir rempli la TextBox Edit_Codage bien sûr), ça va mettre les lettres dans les cellules directement, plutôt que de passer par tes formules et ton copier-coller transposé
gege37 a écrit :pour le second point expliquer il faut que je marque cette fonction sur vba sur la zone de texte où je veux que la phrase s'affiche??
Non plus, tout doit se passer dans la macro "Private Sub Btn_codage_Click()"
Tu ajoutes du code pour récupérer ta variable "message codé", puis tu l'affectes à la valeur de la TextBox "Edit_reponse1"
j'ai un petit problème mais vba me dit qu'il y a une erreur de compilation sur le premier programme marqué et je ne comprend pas pourquoi même si l'avnt dernière ligne (
Sheets("donnees").Range("A18").Offset(i, 0) = Caractere
)
voila
heu j'ai remarqué un petit problème dans mon programme
je remarque que mon codage ne donne pas le même résultat que pour le codage meme si les premières sont bonnes
est ceque quelcun a la solution
Sheets("donnees").Range("A19:A70").ClearContents
sinon on efface la plage sur la feuil1 puisque c'est elle qui est active...
Bon pour ton classeur et pour qu'on soit d'accord je te le renvoie un peu modifié : https://www.excel-pratique.com/~files/doc2/projet_inf2_1V2.xls
J'ai ajouté du code (Sub Matrices) pour le choix de la matrice à utiliser. En passant par des "If" comme tu l'avais envisagé.
Donc en fonction de la matrice choisie, je la copie en O36:P37, et les formules se mettent à jour.
Puis comme je te l'avais annoncé, je récupère la chaîne cryptée ou décryptée, et je l'affiche dans la textbox correspondante.
Regarde et dis nous.
PS : j'aime bien l'utilisation de ton userform : sobre et pratique. Peut-être pourrais tu afficher des images comme j'avais fait, pour savoir qu'est ce qu'on utilise comme matrice
Et pour le plaisir et les remarques, je mets aussi où j'en étais avec mon classeur (gestion d'erreur améliorée si caractères interdits, ajout d'espaces pour arriver au bon nombre de caractères,...) : cryptage_decryptageV6
j'ai un problème
mon problème est si difficile que cela^^
Salut gege,
Qu'est-ce que la variable Lig? A quoi est-elle égale?
je ne peut pas le dire sa n'est pas moi qui est écrit cette partie de programme
logiquement enfin je pense que lig correspond à la ligne comme col correspond à la colonne