IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Problème d'enregistrement de données cryptées dans une cellule [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2012
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2012
    Messages : 78
    Par défaut Problème d'enregistrement de données cryptées dans une cellule
    Bonjour à tous,

    J'ai développé un programme pour lequel j'ai besoin de crypter certaines données.
    Pour cela, j'ai utilisé la fonction proposée par Maxime Hubiche pour le cryptage et le décryptage.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Function Crypter(ByVal chaîneACrypter As String)
     
    lLongueur = Len(chaîneACrypter)
    sLettres = String(lLongueur, Chr(0))
    For lBoucle = 1 To NBROTATIONSMAX
        For lCompteur = 1 To lLongueur
            Mid(sLettres, lCompteur, 1) = Chr((Asc(Mid(chaîneACrypter, lCompteur, 1)) + _
                    (Asc(Mid(CLEF, (lCompteur Mod Len(CLEF)) + 1, 1)) * lLongueur)) Mod 256)
         Next
         chaîneACrypter = sLettres
    Next
    'remplacement de caractères (voir les explications plus loin)
    sLettres = Replace(sLettres, "'", "µ@%*")
    sLettres = Replace(sLettres, Chr(34), "=é-ç")
    Crypter = sLettres
     
    End Function
    '---------------------------------------------------------------------------------------
    Function deCrypter(ByVal chaîneAdeCrypter As String)
     
    'restitution des caractères remplacés (voir les explications plus loin)
    chaîneAdeCrypter = Replace(chaîneAdeCrypter, "=é-ç", Chr(34))
    chaîneAdeCrypter = Replace(chaîneAdeCrypter, "µ@%*", "'")
     lLongueur = Len(chaîneAdeCrypter)
    sLettres = String(lLongueur, Chr(0))
    For lBoucle = 1 To NBROTATIONSMAX
        For lCompteur = 1 To lLongueur
            Mid(sLettres, lCompteur, 1) = Chr((((Asc(Mid(chaîneAdeCrypter, lCompteur, 1)) - _
                    (Asc(Mid(CLEF, (lCompteur Mod Len(CLEF)) + 1, 1)) * lLongueur)) Mod 256) + 256) Mod 256)
        Next
        chaîneAdeCrypter = sLettres
    Next
    deCrypter = sLettres
     
    End Function
    Ce code fonctionne très bien, les cryptages et décryptages se font sans problème, tant qu'ils restent à l'intérieur des procédures vba.

    Mais voila, si on crypte des données, c'est pour les sauvegarder afin de pouvoir les réutiliser plus tard.
    Et c'est là que ça coince.

    De manière apparemment aléatoire, il arrive que la chaine cryptée soit tronquée à la copie dans la cellule de destination (caractères manquants en fin de chaine), ce qui bien entendu fausse le décryptage et fait bugger le programme.

    J'ai pensé qu'il pouvait s'agir de caractères spéciaux du genre apostrophe (c'est de toute manière le cas en début de chaine) ou guillemet qui pouvaient générer des erreurs d'interprétation par Excel au moment de la copie dans la cellule. J'ai donc remplacé ces caractères par des chaines identifiables (voir le code) mais ça ne change rien.

    Il y a peut-être d'autres caractères qui pourraient poser problème, mais je ne les connais pas et je ne vais pas m'amuser à faire des remplacements pour tous les caractères ascii de la table.

    Je suis un peu perplexe face à ce souci. Je dois passer à côté d'un truc évident mais je ne vois pas ce qui coince et si quelqu'un a une idée ou a été confronté au même problème, je suis preneur.

    D'avance merci,

    Michel

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    deux choses m'interpellent :

    - dans tes fonctions, les constantes pour calculer la clé et le nombre d'itérations maximales ont disparu. Idem pour les déclarations de variables
    - l'entête de la fonction Crypter a disparu, là où la paternité était mentionnée

    pour les éventuels lecteurs, la fonction originelle est ici : http://mhubiche.developpez.com/Acces...tage/vigenere/

    tu peux donner un exemple de chaine qui passe mal dans Excel ? J'ai testé plusieurs chaines sans problème (mais elles n'étaient pas très longues)

  3. #3
    Membre Expert
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Septembre 2013
    Messages
    783
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2013
    Messages : 783
    Par défaut
    Bonjour,

    Mêmes remarques que Joel en ce qui concerne le type retourné par les fonctions .... donc variante par défaut alors qu'elles devraient retourner un string, non?
    Mise à part tester la cohérence (fonction StrComp par exemple) avant la fermeture, je ne vois pas .... Peut-être également enregistrer dans un fichier texte?

  4. #4
    Expert confirmé
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Par défaut
    Salut, regarde par ici le fichier "vbcrypto.zip".

  5. #5
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Octobre 2012
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2012
    Messages : 78
    Par défaut
    Bonsoir à tous,

    Désolé pour le retard, j'ai dû m'absenter.

    Je n'ai pas encore regardé toutes vos propositions mais je vous remercie de vous être intéressés à mon cas.

    Plutôt que des longs discours, voici un pièce jointe un petit fichier qui fait clairement apparaître le problème.

    Les premières lignes font le cryptage et le décryptage d'une chaine inscrite en dur en A2. Tout va bien de cellule à cellule.

    C'est dans la cellule A15 qu'il y a le souci dont je parle. La chaine à crypter est identique à celle en A2 mais elle est générée en VBA. A15 est le résultat dans une cellule du cryptage de la chaine. Inutile de dire que ça n'a rien à voir avec la chaine effectivement générée par la procédure. Bien entendu, le décryptage en A18 ne peut pas fonctionner.
    Alors que la même opération à l'intérieur de la procédure VBA (sans passer par une cellule donc) fonctionne bien (résultat en A21 qui est le résultat du cryptage décryptage de la chaine) ce qui prouve que les opérations à l'intérieur de vba se passe bien mais que la copie de la chaine cryptée ne fonctionne pas correctement.

    Petite explication sur la chaine à crypter : elle comporte des caractères spéciaux qui sont eux mêmes issus d'une chaine cryptée. Mais ça ne change fondamentalement rien puisque tout caractère ascii peut être crypté par les mêmes fonctions.
    Fichiers attachés Fichiers attachés

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    tes deux chaines "machaine" et "valeur en A2" ne sont pas identiques

    il y a l'apostrophe en premier caractère dans ta macro, qui n'existe pas en A2

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub cryptdecript2()
     
    machaine = "'£µ$azsDR',kklmpà@)^ 806027433265233~#225698701l,ùù gfftyf joti裵$fr'à=}tyupw(=ç_/\fgtV»â£µ$–.‹w6H0žõùêtùɐÓqdg·»ÝöêåáºÞ·©Ê3ç¤f©Ê3286075787895833~#ti裵$" & Chr(10) & "V»â£µ$–.‹w6H0žõùêtùɐÓqdg·»ÝöêåáºÞ·©Ê3ç¤f"
    [A5] = Crypter([A2])
    [A8] = deCrypter([A5])
    [A12] = machaine
    [A15] = Crypter(machaine)
    [A18] = deCrypter([A15])
    [A21] = deCrypter(Crypter(machaine))
     
    End Sub

    j'ai viré l'apostrophe, et tout est devenu ok : A5 et A15 sont identiques

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'enregistrement d'un range dans une variable
    Par napo123 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 01/06/2012, 13h57
  2. [XL-2007] Macro filtre automatique données multiples dans une cellule +Problème si cellule vide
    Par jocky34000 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 29/04/2012, 05h36
  3. Problème pour trouver les données commune dans une requête
    Par Winterrage dans le forum Langage SQL
    Réponses: 3
    Dernier message: 08/02/2008, 10h14
  4. Réponses: 1
    Dernier message: 08/11/2007, 12h20
  5. [MySQL] enregistrer des données CSV dans une BDD
    Par NicoO_O dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 28/11/2006, 23h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo