VBA : conversion de string en ASCII

dionys0s

XLDnaute Impliqué
Bonjour le forum

J'aimerais savoir s'il est possible de convertir n'importe quelle chaîne de texte en une chaîne de comprenant que des caractères de la table ASCII (de 0 à 127 donc).
Par exemple "Ÿôùpi" deviendrait "Youpi".
Je précise que je cherche une solution dans laquelle je ne paramètre pas l'équivalent OK de chaque caractère pas OK.

D'avance merci !
 

JCGL

XLDnaute Barbatruc
Re : VBA : conversion de string en ASCII

Bonjour à tous,

Avec ceci pour les colonnes A et B (un code de Roger, je crois)

VB:
Option Explicit
Const Accents As String = "àâäåéèêëîïôöùûüÈÉÊËÀÁÂÃÄÅÙÚÛÜ-"
Const Normaux As String = "aaaaeeeeiioouuuEEEEAAAAAAUUUU "


Private Sub CommandButton1_Click()
Dim c As Range, Derligne As Integer, i As Byte
    Derligne = Range("A65536").End(xlUp).Row
    For Each c In Range("A2:B" & Derligne)
        For i = 1 To Len(Accents)
            c.Value = Replace(c.Value, Mid(Accents, i, 1), Mid(Normaux, i, 1))
        Next i
    Next c
End Sub

A+ à tous
 

dionys0s

XLDnaute Impliqué
Re : VBA : conversion de string en ASCII

Re,
Bonjour

Merci JCGL mais c'est justement ce que je cherche à éviter.
Je précise que je cherche une solution dans laquelle je ne paramètre pas l'équivalent OK de chaque caractère pas OK.

Il se trouve que je cherche une solution qui soit compatible Mac et PC. Or le code d'un classeur qui passe d'un Mac à un PC est flingué. Tous plein de caractères accentués se retrouvent modifiés. Par exemple le "é" et le "ê" deviennent "e_" Par ailleurs, les deux OS n'utilisent pas la même table ASCII (pour les caractères supérieurs à 127). Du coup dans chacun de mes projet (qui doivent être compatibles Mac et PC) je me goinfre ce machin (code ci-dessous) pour pouvoir afficher des messages intelligibles à l'utilisateur.

VB:
'Accentuated vowels => Vowel (a/e/i/o/u) + Ac(ute)/Gr(ave)/Ci(rcumflex)/Di(aeresis) + U(Case)/L(Case)
Public aAcL As String, aGrL As String, aCiL As String, aDiL As String
Public aAcU As String, aGrU As String, aCiU As String, aDiU As String
Public eAcL As String, eGrL As String, eCiL As String, eDiL As String
Public eAcU As String, eGrU As String, eCiU As String, eDiU As String
Public iAcL As String, iGrL As String, iCiL As String, iDiL As String
Public iAcU As String, iGrU As String, iCiU As String, iDiU As String
Public oAcL As String, oGrL As String, oCiL As String, oDiL As String
Public oAcU As String, oGrU As String, oCiU As String, oDiU As String
Public uAcL As String, uGrL As String, uCiL As String, uDiL As String
Public uAcU As String, uGrU As String, uCiU As String, uDiU As String
Public cCeL As String, cCeU As String 'Cedilla c

Private Sub LoadStr()

  #If Mac Then
    aAcL = VBA.Chr(135): aGrL = VBA.Chr(136): aCiL = VBA.Chr(137): aDiL = VBA.Chr(138)
    eAcL = VBA.Chr(142): eGrL = VBA.Chr(143): eCiL = VBA.Chr(144): eDiL = VBA.Chr(145)
    iAcL = VBA.Chr(146): iGrL = VBA.Chr(147): iCiL = VBA.Chr(148): iDiL = VBA.Chr(149)
    oAcL = VBA.Chr(151): oGrL = VBA.Chr(152): oCiL = VBA.Chr(153): oDiL = VBA.Chr(154)
    uAcL = VBA.Chr(156): uGrL = VBA.Chr(157): uCiL = VBA.Chr(158): uDiL = VBA.Chr(159)
    cCeL = VBA.Chr(141)
  #ElseIf VBA6 Or VBA7 Then
    aAcL = VBA.Chr(225): aGrL = VBA.Chr(224): aCiL = VBA.Chr(226): aDiL = VBA.Chr(228)
    eAcL = VBA.Chr(233): eGrL = VBA.Chr(232): eCiL = VBA.Chr(234): eDiL = VBA.Chr(235)
    iAcL = VBA.Chr(237): iGrL = VBA.Chr(236): iCiL = VBA.Chr(238): iDiL = VBA.Chr(239)
    oAcL = VBA.Chr(243): oGrL = VBA.Chr(242): oCiL = VBA.Chr(244): oDiL = VBA.Chr(246)
    uAcL = VBA.Chr(250): uGrL = VBA.Chr(249): uCiL = VBA.Chr(251): uDiL = VBA.Chr(252)
    cCeL = VBA.Chr(231)
  #Else
    LsErr 'Houston...
   #End If

  aAcU = VBA.UCase(aAcL): aGrU = VBA.UCase(aGrL): aCiU = VBA.UCase(aCiL): aDiU = VBA.UCase(aDiL)
  eAcU = VBA.UCase(eAcL): eGrU = VBA.UCase(eGrL): eCiU = VBA.UCase(eCiL): eDiU = VBA.UCase(eDiL)
  iAcU = VBA.UCase(iAcL): iGrU = VBA.UCase(iGrL): iCiU = VBA.UCase(iCiL): iDiU = VBA.UCase(iDiL)
  oAcU = VBA.UCase(oAcL): oGrU = VBA.UCase(oGrL): oCiU = VBA.UCase(oCiL): oDiU = VBA.UCase(oDiL)
  uAcU = VBA.UCase(uAcL): uGrU = VBA.UCase(uGrL): uCiU = VBA.UCase(uCiL): uDiU = VBA.UCase(uDiL)
  cCeU = VBA.UCase(cCeL)

End Sub

Mais bon. Du coup je pense que je vais devoir lister tous les caractères pas OK en fonction de leur ASCII et fixer l'équivalent accepté... (le tout pour chaque OS...)
 
Dernière édition:

Discussions similaires

Réponses
14
Affichages
557

Statistiques des forums

Discussions
314 211
Messages
2 107 328
Membres
109 804
dernier inscrit
Dramac