VBA Excel: Changer ASCII en HEX

Résolu
Altazari Messages postés 33 Statut Membre -  
Altazari Messages postés 33 Statut Membre -
Bonjour,

J'aimerais savoir comment convertir une chaîne de caractère en ASCII (qui vient d'Excel) en Hex afin qu'elle s'affiche correctement dans Word, où je l'exporte. Quelqu'un aurait-il une idée? Merci d'avance,

Clio

3 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,
    Vois ici peut être???
    0
  2. Altazari Messages postés 33 Statut Membre
     
    Merci pour cette rapide réponse, ça a aidé!

    J'ai un autre soucis: j'aimerais savoir s'il existe une variable qui signifie "n'importe quelle lettre ou nombre".

    Voici pourquoi:
    J'essaie de repérer dans des string s'il y a des caractères en Hex (les caractères que j'ai transformés juste avant, sous la forme #00# (ex: #21# = !). Les "#" me permettent de les distinguer des simples nombres.

    Donc je fais la recherche suivante :

    If strg = "#xx#" Then
          ...
    End If


    Où les x représentent "n'importe quelle lettre ou nombre".

    Je ne sais pas si c'est clair ?

    Merci pour votre temps

    Clio
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      2 choses :
      1- je ne comprends pas ce que tu veux faire exactement... J'essaie de repérer dans des string s'il y a des caractères en Hex (les caractères que j'ai transformés juste avant Si tu viens de les transformer, pourquoi les rechercher???
      2- en VBA # est utilisé pour un caractère numérique quelconque. Exemple :
      Tester si Strng est composé d'une majuscule et de 3 caractères numériques : sources
      Dim Strng As String
      Strng = "A320"
      If Strng Like "[A-Z]###" Then 
          MsgBox "OK"
      Else
          MsgBox "Pas Glop"
      End If
      0
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Si tu veux savoir si tes deux "x" sont bien des lettres ou des nombres, exemples :
      - X1
      - 21
      - Az
      - 2c
      etc...
      tu peux utiliser les expressions rationnelles. Pour cela, il faut au préalable ajouter à tes références de projet, dans l'éditeur Visual Basic : Menu Outils > Reférences : cocher : Microsoft VBScript Regular Expressions 5.5 (5.5 dépends de votre version d'Excel)

      Puis avec ce code, tu pourras tester ton String :
      Sub test()  
      Dim reg As New VBScript_RegExp_55.RegExp  
      Dim Texto As String  
      
      Set reg = New VBScript_RegExp_55.RegExp  
      Texto = "#21#" 'tester également avec : #^2# par exemple...  
      With reg  
          .Pattern = "/#[a-zA-Z_0-9]{2}/#"  
          .Global = True  
          .IgnoreCase = False  
      End With  
      If reg.test(Texto) = True Then  
          MsgBox "Les 2 caractères entre # sont des lettres et/ou des chiffres"  
      Else  
          MsgBox "Vous avez au moins un caractère différent de lettres ou chiffres"  
      End If  
      Set reg = Nothing  
      End Sub
      0
    3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      dans le code ci-dessus, un bug CCM a remplacé les [ /# ] par des liens sous la forme / #. Il convient donc de remplacer les /# qui apparaissent en bleu dans ma réponse par [ /# ] sans les espaces, soit : crochet ouvrant, slash, dièse, crochet fermant...
      0
  3. Altazari Messages postés 33 Statut Membre
     
    Ca fonctionne très bien merci, et tu as raison je n'en avais pas besoin ! (Enfin.. c'est toujours bon à savoir :)

    J'ai encore un problème si je peux me permettre: tout fonctionne très bien, excepté pour les string plus long (j'obtiens "string parameter too long")

    Est-ce que cette erreur est liée à cette fonction: Mid(str, l, 1)
    ... ou pas ? (mais je ne vois pas d'où ça vient alors)

    Voici le schema de mon code:

    'J'ouvre un document word
    
    
    'Puis je définis quelques variables...
    
    Objectives = Cells(line, 28)
    Objectives = AscEncode(Objectives)
    
    '...J'en change les caractères spéciaux grâce à ma fonction AscEncode qui remplace les caractères spéciaux par des noms, en parcourant le contenu de la cellule (string) lettre par lettre avec, dans une boucle :   Letter = Mid(str, l, 1)
    
    
    'Je copie le contenu modifié de ces variables dans word grâce à une boucle, à des endroits spécifiques
    
    For i = 1 to 5
    Select Case i
          Case 1
          Text = "addObjectives"
          Variable = Objectives
          ...
    End select
    Next i
    
    'wrdDoc.Content.Find.Execute findtext:=Text, replacewith:=Variable, Replace:=wdReplaceAll
    


    Est-ce que je sais manipuler un string par morceaux ? Ou définir le contenu de mes variables par d'autres formats ? Ou autre chose ?

    Merci beaucoup!

    Clio
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      1- tu as donc tant de caractères dans ton String? (bizarre comme question, j'te l'accorde...)
      2- tu peux utiliser une variable tableau déclarée en String :
      je suppose que ton string "général" est composé de mots, séparés par des espaces (" ")
      Fais ce test :
      écris, dans la cellule A1 de ton classeur excel :
      "J'aime pas les grands strings"
      et lance ce test :
      Sub test()
      Dim MesStrings() As String
      Dim Cptr As Long
      MesStrings = Split(Cells(1, 1), " ")
      For Cptr = 0 To UBound(MesStrings)
          MsgBox MesStrings(Cptr)
      Next
      End Sub
      0
    2. Altazari Messages postés 33 Statut Membre
       
      Cool ! Merci !

      Je ne l'ai pas encore intégré à mon code mais ça m'a l'air nickel.

      Passe une bonne soirée,

      Clio
      0