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 :

Code pour remplacer lettre par un nombre [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Vba14
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 440
    Par défaut Code pour remplacer lettre par un nombre
    Bonjour à tous,

    Dans une feuille Excel j'ai un tableau dans lequel je fais correspondre les lettres de l'alphabet par un nombre (A ou a = 1, B ou b = 2, etc..)

    Je cherche donc un moyen pour remplacer une chaîne de lettres par le nombre lui correspondant. Par exemple si je tape toto alors ça devient 20152015, titi 209209, admin 1413914.
    Il faut que le code prenne en compte qu'il puisse y avoir des majuscules ou des minuscules ce qui ne change rien par rapport aux nombres.

    Auriez-vous une idée à me soumettre s'il vous plait ?

    Je vous en remercie par avance

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Auriez-vous une idée à me soumettre s'il vous plait ?
    Une idée, donc (c'est bien cela, que tu demandes, non ?) --->>
    - parcourir la chaine de caractères, caractère par caractère. Cela peut se faire par boucle, en utilisant la fonction Mid
    - la fonction ASC retourne le code ascii du caractère traité. Asc("A") retourne 65. Si tu veux 1 pour A, il te suffit d'ôter 64 de ce code ascii
    - remplace chaque lettre dans la boucle par le code résultant.
    Je te laisse maintenant faire.

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour connaître le code d'une lettre, il faut utiliser la fonction CODE
    Exemple qui renvoie la valeur 65 (a renverra 97)
    pour obtenir 1 pour A et a il faudra donc faire une soustraction de 64 ou 96 et pour éviter de compliquer les choses il suffira soit de forcer la majuscule ou la minuscule
    Exemple avec en A2 une lettre quelconque quelle que soit la casse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =CODE(MAJUSCULE(A2))-64
    Ces exemples ne fonctionne pas pour les caractères accentués ni pour les chiffres (Il faudrait alors utiliser une autre méthode ou passer par une fonction personnalisée)
    Si on a un mot à tester en A2 comme par exemple Toto, c'est le code du premier caractère qui est renvoyé.
    Il faudra donc passer par la concaténation du résultat renvoyé par chaque lettre du mot que l'on pourra obtenir par une fonction matricielle dont je ne retrouve plus l'exemple pour l'instant.
    Donc soit une matricielle soit une fonction personnalisée(VBA)

    EDIT
    Je n'avais pas vu que la demande était faîtes dans la rubrique VBA.
    Il faut créer une fonction personnalisée et la réponse d'Unparia que je salue au passage est donc la piste à suivre. Faire une concaténation du code Ascii dans la boucle (l'esperluette '&' est l'opérateur de concaténation)
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  4. #4
    Membre éclairé Avatar de Vba14
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 440
    Par défaut
    Merci à vous deux pour vos réponses. C'est la piste que j'avais trouvé sur le net.
    Je vais creusé ça et je reviens en cas de difficultés.
    Cordialement

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    A VBA14 et à tout hasard (surtout après avoir lu une des discussions que tu as récemment ouverte) :
    J'appelle ton attention sur le fait que le chiffrement d'un mot de passe par cette seule méthode rendrait ce mot de passe très vulnérable.
    J'espère donc que cette démarche ne concerne pas un tel chiffrement.

  6. #6
    Membre éclairé Avatar de Vba14
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 440
    Par défaut
    [QUOTE
    J'appelle ton attention sur le fait que le chiffrement d'un mot de passe par cette seule méthode rendrait ce mot de passe très vulnérable.
    [/QUOTE]

    Pour un expert comme toi sans aucun doute, mais pour un utilisateur lambda, j'en doute fort.
    Mais ce n'est pas pour un mot de passe. Sinon serais revenu sur ma discussion précédente.

    Merci toutefois de t'être intéressé à la discussion

  7. #7
    Membre éclairé Avatar de Vba14
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 440
    Par défaut
    J'ai presque trouvé, cependant je bute sur le code.

    Une InputBox dans laquelle j'écris du texte (par exemple : La maison est blanche)
    Une MsgBox qui me transcrit le texte en codé (La maison est blanche devient ---> JCMCAESPOEHFJCPIXO)

    Le texte "La maison est blanche" se trouve en B4 d'une feuille de calcul.

    Le résultat codé doit aller en H4.

    Si le texte avait été en B2 le code irait en H2.

    Je n'arrive pas à traduire cela en code Vba.

    Si le texte de l'InputBox correspond à un texte de la colonne B alors le résultat de la MsgBox après clique sur "Ok" doit aller en colonne H sur la ligne correspondant au texte.

    Je pourrais passer par une Combo qui reprendrais tous les textes de la colonne B peut-être que cela simplifierai les choses.

    Pourriez-vous m'aider s'il vous plait ?
    Je vous en remercie par avance
    Cordialement

    Voici le code :
    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
     
    Sub codage()
    alpha = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z")
    p = UCase(InputBox("saisir la chaine de caractères à coder"))
    For i = 1 To Len(p)
      For j = 0 To UBound(alpha)
        If Mid(p, i, 1) = alpha(j) Then
         x = x & " " & alpha((3 * j + 2) Mod 26)
        End If
      Next
    Next
    MsgBox x 'qui renvoi une codification de la chaine saisie dans l'alphabet
     
        With Worksheets("Texte"): Set Plage = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)): End With
     
        Set Cel = Plage.Find(p, xlValues, xlWhole)
     
        If Cel Is Nothing Then MsgBox "Texte inconnu !": Exit Sub
     
        If Cel.Offset(, 1).Value = p Then
            Cel.Offset(, 7).Value = x '<--- Texte MsgBox va en H
    End If
    End Sub
    Ps : C’est un exercice de dm pour ma fille que j'ai eu du mal à comprendre. Alors je suis allé sur le net où j'ai trouvé quelques idées qui m'ont permis d'arriver à ce code.
    Il faut donc :
    1-Coder un mot ou une phrase pour cela :
    2-Réaliser un algorithme en langage codé qui permet de coder un texte à partir des rangs de l'alphabet.
    3-Réaliser l’inverse à partir du code retranscrire le mot ou la phrase.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    ucase("a")="A" =>Asc("A")=65 => Asc(Ucase("a"))-64=1

    Je rejoint unparia, il est urgent de dire à ta fille que le niveau commence à être trop élevé pour toi et que tu ne peux plus faire ses exercices comme par le passé !
    Dernière modification par Invité ; 21/04/2019 à 09h31.

  9. #9
    Membre éclairé Avatar de Vba14
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 440
    Par défaut
    Voilà nous avons réussi à faire quelque chose. Ce n'est peut-être pas le top mais ça a le mérite de fonctionner.
    J'ai juste un petit soucis que je n'arrive pas à régler, si je tape une phrase en minuscules dans la zone jaune (texte à crypter) et que je clique sur le bouton "Crypter" la phrase apparait cryptée dans la zone bleue.
    Ensuite, j'efface la phrase de la zone jaune, je clique sur le bouton "Décryptage" alors la phrase apparaît dans la zone jaune, mais en majuscules.

    Que dois-je modifier dans mon code pour que cela ne se produise pas ?
    Merci par avance pour votre aide

    Voici le fichier en pièce jointe
    Encodage.xlsm

  10. #10
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Bonjour,

    A part sauvegarder la phrase originale pour pouvoir la restaurer, guère d'autre solution.
    Comment veux-tu qu'un "J" se rappelle qu'il fut un "j" jadis ?
    eric

  11. #11
    Membre éclairé Avatar de Vba14
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 440
    Par défaut
    Bonjour eriic,

    A part sauvegarder la phrase originale pour pouvoir la restaurer, guère d'autre solution.
    Comment veux-tu qu'un "J" se rappelle qu'il fut un "j" jadis ?
    Oui tu n'as pas tort, j'aurai dû y penser avant de poster ma question. Je vais étudier la sauvegarde de la phrase originale.
    Merci pour ta réponse

    Ps : En fait en y réfléchissant, c'est la cellule H1 qui doit être en minuscules, quel que soit le texte qui s'y trouve.

  12. #12
    Membre Expert
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 2 266
    Par défaut
    Le contraire de UCase() c'est LCase()
    eric

  13. #13
    Invité
    Invité(e)
    Par défaut
    bonjour,
    mon tableau de correspondance n'est pas parfait je vient de m'en rendre compte mais c'est l'idée!
    je remplace l'espace code 32 par ) code 41 et réciproquement.
    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
    Sub test()
    Dim txt As String
    txt = "Comme je l'ai déjà dit, ce n'est pas mon code, ce n'est pas moi qui l'ai fait mais un des camarades de ma fille."
    txt = txt & vbCrLf & "Je vous l'ai juste exposé, c'est tout."
    txt = txt & vbCrLf & "Je suis intervenu pour faire une demande d'aide au tout début, et pour finir le code pour la mise en minuscules, pour le reste, je n'y suis pour rien."
    txt = txt & vbCrLf & "c 'est leur devoir, ils prennent leur responsabilité."
    txt = txt & vbCrLf & "Je ne sais même pas si il connaît Vba, ce n'est pas mon affaire. Je ne porte pas de jugement sur ce qu'ils ont fait je ne suis pas leur prof."
    txt = txt & vbCrLf & ""
    txt = txt & vbCrLf & "Maintenant , c 'est fait..."
    txt = txt & vbCrLf & ""
    txt = txt & vbCrLf & "Je le répète, ce n'est plus mon affaire. La discussion est close."
    txt = txt & vbCrLf & ""
    txt = txt & vbCrLf & "Merci à tous d'avoir participé à cette discussion."
    txt = txt & vbCrLf & "Bonne fin de journée"
     
    txt = CodageDecodage(txt)
    MsgBox txt
    MsgBox CodageDecodage(txt)
    End Sub
    Function CodageDecodage(txt As String) As String
    Dim T()
    T = Array(41, 37, 39, 36, 35, 33, 32, 34, 46, 32, 45, 47, 44, 42, 40, 43, 55, 53, 52, 56, 50, 49, 57, 48, 51, 54, 64, 65, 61, 59, 63, 62, 58, 59, _
    86, 76, 71, 83, 80, 68, 90, 84, 77, 97, 67, 74, 88, 85, 70, 89, 87, 69, 73, 79, 66, 82, 78, 81, 72, 94, 96, 95, 91, 93, 92, 75, 119, 110, _
    122, 113, 115, 107, 112, 117, 120, 103, 114, 118, 99, 116, 104, 101, 108, 102, 111, 105, 109, 98, 106, 123, 100, 121, 124, 121, _
    126, 127, 128, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, _
    153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, _
    179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, _
    205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, _
    232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 255)
    CodageDecodage = txt
    For i = 1 To Len(txt)
        If Asc(Mid(txt, i, 1)) <> 13 And Asc(Mid(txt, i, 1)) <> 10 Then Mid(CodageDecodage, i, 1) = Chr(T(Asc(Mid(txt, i, 1)) - 32))
    Next
    End Function
    32 ) 41
    33 ! % 37
    34 " ' 39
    35 # $ 36
    36 $ # 35
    37 % ! 33
    38 & , 44
    39 ' " 34
    40 ( . 46
    41 ) 32
    42 * - 45
    43 + / 47
    Dernière modification par Invité ; 23/04/2019 à 13h12.

  14. #14
    Membre éclairé Avatar de Vba14
    Homme Profil pro
    Retraité
    Inscrit en
    Janvier 2019
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2019
    Messages : 440
    Par défaut
    Bonjour à tous,

    Je me dis {tous ces efforts pour rien } si elle s'avère incapable d'expliquer sons "propre" code!
    Nous partagerons la note j'espère!
    Je reviens à cette discussion pour vous donner la note puisque vous espériez un partage.

    Sur 8 équipes de 3 étudiants seules 3 équipes ont présentés quelque chose.

    Le premier à 18 avec un code de Vigenère, le deuxième 15 avec le chiffre de César et la 3ème équipe, celle de ma fille avec un 13.

    D'après le prof, le code n'a rien d'extraordinaire (ça je l'avais compris), mais il a le mérite d'exister par rapport à ceux qui n'ont rien fait et qui se retrouvent avec un zéro pointé.

    Bien cordialement

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/12/2016, 10h14
  2. [WD-2010] macro pour remplacer mot par document
    Par cpf2006 dans le forum VBA Word
    Réponses: 3
    Dernier message: 29/08/2011, 17h26
  3. [Toutes versions] Code pour Remplacement
    Par wadjo dans le forum VBA Access
    Réponses: 2
    Dernier message: 18/07/2010, 23h29
  4. Requête pour remplacer 'xx' par 'x'
    Par mic34 dans le forum Requêtes
    Réponses: 4
    Dernier message: 05/09/2009, 15h07
  5. Réponses: 8
    Dernier message: 26/05/2008, 10h01

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