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 :

Récupérer une valeur unicode dans un fichier txt et le charger dans une var. String


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Dévelopeur Excel
    Inscrit en
    Juillet 2016
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Dévelopeur Excel

    Informations forums :
    Inscription : Juillet 2016
    Messages : 27
    Par défaut Récupérer une valeur unicode dans un fichier txt et le charger dans une var. String
    Bonjour,

    J'aurais besoin de votre aide pour récupérer la première ligne d'un fichier "Lic.txt"
    Je précise que le fichier txt contient des caractères unicode du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ¿d*º(ìu²ýù×êo×aÿߝӣºÒüüšd¹uj÷Ú!ÜÓ

    Le fichier sera dans le même répertoire que l’application
    que je retrouve grâce à une variable As String "chemin".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chemin = Workbooks(ActiveWorkbook.Name).Path
    En vous remerciant d'avance

    Cordialement Eric

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Je ne suis pas vraiment sûr que VBA fasse bon ménage avec Unicode. Ceci dit, il y a peut-être un début de solution par là.

  3. #3
    Membre averti
    Homme Profil pro
    Dévelopeur Excel
    Inscrit en
    Juillet 2016
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Dévelopeur Excel

    Informations forums :
    Inscription : Juillet 2016
    Messages : 27
    Par défaut
    Bonjour

    Je pense que les caractères unicode ne changent rien car j'ai déjà manipuler cela avec les variables As String qui ne posent aucun problème.

    Pour situer la chose il s'agit d'un code de licence pour mes applications grâce a un cryptage de Vigenère qui réside en l’occurrence dans une fonction
    En gros il y a 4 cellules qui pour générer le cryptage:

    a) le texte à crypter
    b) la Clé (un texte qui sert de support au cryptage
    c) Une cellule qui recopie le texte avec des caractères unicode
    d) la dernière qui génère le code

    J'ai donc cette série de cellule dans dans l’application que je souhaite transmettre
    et l'autre dans une petite application qui me sert a générer le code

    Le but est que l'utilisateur me transmet des infos perso qui seront concaténer avec des infos concernant l'application.
    Ainsi cela me permet de protéger mon application tout en permettant à l'utilisateur de pouvoir l'utiliser sur plusieurs postes,
    Car je souhaite que l’application soit utilisable gratuitement pendant un moi puis ensuite avec la licence.

    La licence se présenterait sous la forme d'un fichier txt
    que je viendrait charger à l'ouverture.

    Mon problème réside plus dans le fait d'aller chercher le code dans le fichier txt

    Cordialement Eric

  4. #4
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Ah, OK

    Le plus simple, c'est sans doute la vieille instruction Open. (Aucune crainte, elle était là bien avant Office 2013)

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Un fichier texte est un fichier à accès séquentiel? Cela veut dire qu'il faut lire chaque lignes du fichier et en extraire le informations et vue que le fichier est sensé être crypter, j'ai comprend ton embarras.

    Il faut utiliser un fichier à accès directe (rendom), on défi un mask (nom,prénom,âge) par exemple et la lecture et/ou l'écriture ce fait autour du. Ce mask!

    Read #1, mask ainsi les informations sont bien rangé dans la variable mask (variable de type défini par l'utilisateur!)

    Pour moi le puis simple est encore de fournir un xml au utilisateur.

    C'est ce que j'utilisais avant d'opter pour du SqlLite, car plusieurs utilisateurs devaient lire et écrire dedans simultanément.

  6. #6
    Membre averti
    Homme Profil pro
    Dévelopeur Excel
    Inscrit en
    Juillet 2016
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Dévelopeur Excel

    Informations forums :
    Inscription : Juillet 2016
    Messages : 27
    Par défaut
    Re-Bonjour

    Non Non, vous avez sans doute mal compris (ou bien c'est peut être moi), du coté application les données sont rentrée dans une feuille "administrateur" et le code est généré par l'application dans un feuille "programmeur" qui est fortement masqué et protégé.
    Je précise également que l'appli. gère des utilisateurs avec login et droits associés

    En fait ce que je souhaite c'est que l’application compare le code généré par celle-ci avec le code du fichier txt que je fournis après règlement de facture.

    Tout ce que j'ai besoin c'est de récupérer la première ligne du txt dans une variable As String pour la comparer

    Cordialement Eric

  7. #7
    Invité
    Invité(e)
    Par défaut
    Dans cette exemple j'utilisais la base de registre mais le principe est le même!
    http://www.developpez.net/forums/d13...l/#post7457349

    Je dois avoir un exemple de code avec un fichier texte à accès direct, quand j'arrive pas au travail je te fais un exemple, ça va régler tous tes problème!

    voila le type de licence que j'utilisais Fichier XML!
    Nom : Sans titre.png
Affichages : 917
Taille : 105,9 Ko
    tous est crypté on trouve des information sur le le serveur,sur la ou les machine connecté, le type de licence évaluation, lier à la machine, à l'utilisateur, à jeton , possibilité d'acheter la licence Oui/Non, le prix de la licence,etc...), chaque machine connecté dispose de son propre mode de cryptage et ne peut pas lire les information du voisin!

    voici un exemple que tu pouras utiliser dans ton programme!

    exécute sub test dans le modul1 et ouvre le fichier Licence.dll avec notpad!
    Code module de class CDETXT : 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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    Option Explicit
     
     
    Private StrClé As String
    Private StrTexte As String
     
     
    Public Property Let IniClé(Clé As String)
    StrClé = Clé
    Initialize
    End Property
     
     
    Public Property Let IniTexte(Texte As String)
    StrTexte = Texte
    End Property
     
     
    Public Property Get IniTexte() As String
    IniTexte = StrTexte
    End Property
     
     
    Public Sub DoXor()
    Dim lngC As Long
    Dim intB As Long
    Dim LngN As Long
    For LngN = 1 To Len(StrTexte)
    lngC = Asc(Mid(StrTexte, LngN, 1))
    intB = Int(Rnd * 256)
    Mid(StrTexte, LngN, 1) = Chr(lngC Xor intB)
    Next LngN
    End Sub
     
     
    Private Sub Initialize()
    Dim LngN As Long
    Randomize Rnd(-1)
    For LngN = 1 To Len(StrClé)
    Randomize Rnd(-Rnd * Asc(Mid(StrClé, LngN, 1)))
    Next LngN
    End Sub
     
     
    Public Function Encrypt(Code As String, text As String) As String
    Dim strHead As String
    Dim strT As String
    Dim strA As String
    Dim CodageX As New CDETXT
    Dim LngN As Long
    CodageX.IniTexte = text
    CodageX.IniClé = Code
    CodageX.DoXor
    strT = CodageX.IniTexte
    strHead = strT
    CodageX.IniClé = strHead
    CodageX.IniTexte = strA
    CodageX.DoXor
    strA = CodageX.IniTexte
    Encrypt = strHead
     
     
     
     
    End Function
     
     
    Public Function Decrypt(Code As String, Verif As String) As String
    Dim strA As String
    Dim strT As String
    Dim CodageX As New CDETXT
    Dim lnlN As Long
    Decrypt = True
    strT = Code 'Mid(Code, Len("[Crypting_AutoCâble]") + 1, Len(Code) - (Len("[Crypting_AutoCâble]")))
    CodageX.IniClé = Code
    CodageX.IniTexte = Verif
    CodageX.DoXor
    Decrypt = CodageX.IniTexte
    'If CodageX.IniTexte <> Verif Then
    ' MsgBox "Mot de passe incorrect", vbExclamation + vbOKOnly
    ' Decrypt = False
    ' Exit Function
    'End If
     
     
     
    End Function
     
     
    Public Function DefinSerialPass(UserName As String, Serial As String, Pass As String)
    On Error Resume Next
     
     
    Dim x
    Dim Longcode
    Dim y
    Dim P As Integer
    Dim I As Long
    x = Right(UserName, 1) 'code pour coder le serial
    Longcode = Len(UserName) + 3 'code pour coder le serial
    y = Longcode * 10
    Serial = Chr(Longcode * 5) & Asc(Right(UserName, 1)) & Asc(Left(UserName, 1)) & Asc(x) & Chr(y) 'code pour coder le serial
    Pass = ""
    For I = 1 To Len(UserName)
     
     
     
     
    P = Asc(Mid(UserName, I, 1))
    P = 90 - Asc(Mid(UserName, I, 1))
    Reprise:
     
    If (P < 48) And (P < 58) Then P = 48 + (48 - P)
    If (P > 57) And (P < 90) Then P = 90 + (90 - P)
     
     
    If (P > 122) Then P = 122 + (122 - P)
    If (P > 90) And (P < 97) Then
    P = 97 - P
     
    GoTo Reprise
    End If
     
    Pass = Pass & Chr(P)
    Debug.Print Pass
    'Pass
    Next
     
     
     
     
    Private Function PeriodeVal(DateD As Date, DateEncours As Date, DateF As Date) As Boolean
    PeriodeVal = True
    If (DateD < DateEncours) And (DateEncours > DateF) Then
    PeriodeVal = False
    End If
    End Function
    Code Module1 test : 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
    Type NomPnom
    Nom As String
    Pnom As String
    Age As String
    End Type
    Sub test()
    Dim A As NomPnom, B As NomPnom, Crypt As New CDETXT
    A.Age = Crypt.Encrypt("Cle", "25")
    A.Pnom = Crypt.Encrypt("Cle", "Robert")
    A.Nom = Crypt.Encrypt("Cle", "dysorthographie")
    Dim NumFile As Long
    NumFile = FreeFile
    Open ThisWorkbook.Path & "\Licence.dll" For Random As #NumFile
    Put #NumFile, , A
    Close #NumFile
    Open ThisWorkbook.Path & "\Licence.dll" For Random As #NumFile
    Get #NumFile, , B
    Close #NumFile
    B.Age = Crypt.Decrypt("Cle", B.Age)
    B.Nom = Crypt.Decrypt("Cle", B.Nom)
    B.Pnom = Crypt.Decrypt("Cle", B.Pnom)
    End Sub
    Fichiers attachés Fichiers attachés
    Dernière modification par Invité ; 04/11/2016 à 10h59.

  8. #8
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour.

    Citation Envoyé par Zarkann Voir le message
    J'aurais besoin de votre aide pour récupérer la première ligne d'un fichier "Lic.txt"
    Je précise que le fichier txt contient des caractères unicode
    C'est possible en utilisant l'ActiveX ADODB.Stream documenté sur le site MSDN et il doit y avoir des exemples sur ce forum …

    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour Marc,

    ¿d*º(ìu²ýù×êo×aÿßÓ£ºÒüüšd¹uj÷Ú!ÜÓ

    a) le texte à crypter
    b) la Clé (un texte qui sert de support au cryptage
    c) Une cellule qui recopie le texte avec des caractères unicode
    d) la dernière qui génère le code
    est-ce des valeur Unicode ou crypté?


    voila par exemple ce que j'ai dans Licence.dll poste #7!
    5虳ýà þˆ¹ýÃÒƒÿm¼N U²

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    A.Age = Crypt.Encrypt("Cle", "25")
    A.Pnom = Crypt.Encrypt("Cle", "Robert")
    A.Nom = Crypt.Encrypt("Cle", "dysorthographie")
    Citation Envoyé par developpez.net
    un membre averti en vaut 2
    je peux estimer que j'en ai Nom : Sans titre.png
Affichages : 685
Taille : 723 octets?
    Dernière modification par Invité ; 04/11/2016 à 15h01.

  10. #10
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Salut Robert !

    J'ai effectivement répondu à la question telle que posée initialement (voir aussi le titre de cette discussion !),
    à savoir pour du texte au format Unicode et non pour un quelconque cryptage.

    « c) Une cellule qui recopie le texte avec des caractères unicode » : c'est à se demander si l'auteur sait de quoi il est question !
    Y aurait-il une confusion entre encodage Unicode et caractères cryptés ? …

  11. #11
    Membre averti
    Homme Profil pro
    Dévelopeur Excel
    Inscrit en
    Juillet 2016
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : Dévelopeur Excel

    Informations forums :
    Inscription : Juillet 2016
    Messages : 27
    Par défaut
    Bonjour

    Excusez moi pour la réponse tardive mais le travail m’a prit tout mon temps

    Je me suis peut être mal exprimé pour les symbole "unicode" il s'agit bien d'un cryptage
    Sinon j'ai trouver la solution

    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
    Dim i As Long, j As Long, ar
       Dim sRepertoire As String, sNomFichier As String
       Dim iFile As Integer
       Dim data
       Dim Ws As Worksheet
     
       Dim Licence As String '(fichier init)
       Dim Code As String   'Cellule (DB101)
     
       sRepertoire = "E:\Aplications\Prodution\"             '// doit terminer avec un "\"
       sNomFichier = "Licence.init"
     
     
     
     
       'Ouvrir le  fichier
       iFile = FreeFile
       Open sRepertoire & sNomFichier For Input As #iFile
     
     
     
       'Lecture du 1er fichier et écriture dans Excel
       i = 1
       Do Until EOF(iFile)
          Line Input #iFile, data
          Licence = data
          Ws.Cells(i, 5) = data
          i = i + 1
       Loop
     
     
     
       'Fermer le fichier
       Close #iFile
    C'est un bout de code que j'ai trouvé sur internet et qui était prévu pour travailler sur plusieurs fichier et plusieurs lignes.

    Ensuite il ne me suffit plus qu'a comparer la valeur du fichier txt (ou plutôt init) avec le code généré dans l'application

    En tout cas merci à ceux qui se sont penché sur mon problème.

    Merci également à dysorthographie pour son code de licence qui à l'air excellent, mais j'avoue que mon niveau en programmation n'est pas suffisant pour comprendre précisément son fonctionnement


    Cordialement Eric

  12. #12
    Invité
    Invité(e)
    Par défaut
    bonjour,
    note cependant q'il sera facile de craquer l'application, car le fait que les donné soient cryptées, ne changera rien l’affaire!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if décrypte(a) = décrypte(b) then
    il est possible de contourner le test (IF)!

    si tu veux faire un système de licence efficace, apprends le développement dans un environnement évolué! Visual studio 6 {c'est le même langage que VBA} est passé dans le domaine publique.

    https://mon-partage.fr/f/05A1tQvN/

    aprends à développer une DLL avec tout ton code vba dedans et utilise la dans tes projets vba. tu pourras ainsi forcer la reconnaissance de licence sans que personne ne puissent la contourner!

    Code module de classe dans la DLL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Private Sub Class_Initialize()
    If Environ("username") <> "TOTO" Then Err.Raise 1664, "vb6", "La mise en bière est à 15 heure!"
    End Sub
    Public Sub programme()
    MsgBox "ton est OK"
    End Sub
    Code programme dans Excel VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub TEST()
    Dim a As New Login
    a.programme
    End Sub
    Dernière modification par Invité ; 08/11/2016 à 18h47.

  13. #13
    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
    un pouce vert (on ne peut qu'en mettre un) pour :
    il sera facile de craquer l'application, car le fait que les donné soient cryptées, ne changera rien l’affaire!

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 26/05/2015, 01h41
  2. Réponses: 6
    Dernier message: 09/03/2015, 14h38
  3. Réponses: 6
    Dernier message: 30/12/2010, 12h55
  4. Réponses: 4
    Dernier message: 25/01/2010, 17h07
  5. Réponses: 5
    Dernier message: 01/03/2009, 23h32

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