cs_lagoutelle
Messages postés1Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention27 juillet 2011 27 juil. 2011 à 16:56
Bonjour,
Pour que les minuscules accentuées ne soient pas remplacées par des Majuscules
Sous Access, l'Option Compare Database étant défaut, il faut s'assurer
que l'Option Compare Binary soit indiquée en entète du module .
Option Explicit
Option Compare Binary
' La fonction :
Private Function sansAccents(ByRef s As String) As String
Const accent As String = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÌÍÎÏìíîïÙÚÛÜùúûüÿÑñÇç"
Const noaccent As String = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeIIIIiiiiUUUUuuuuyNnCc"
Dim i As Integer
Dim lettre As String * 1
sansAccents = s
For i = 1 To Len(accent)
lettre = Mid$(accent, i, 1)
If InStr(sansAccents, lettre) > 0 Then
sansAccents = Replace(sansAccents, lettre, Mid$(noaccent, i, 1))
'Debug.Print lettre & " " & Mid$(noaccent, i, 1)
'Debug.Print sansAccents
End If
Next i
End Function
' Exemple d'utilisation :
Private Sub Form_Load()
Dim demo As String
demo = "L'été, je vais sur l'île où y'a la fête jusqu'à l'aube et" & _
" je hurle: YÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÙÚÛÜùúûü ... "
Debug.Print "Origine => " & demo
Debug.Print "Majuscule => " & UCase(demo)
Debug.Print "O Accent => " & sansAccents(demo)
Debug.Print "O Accent M => " & UCase(sansAccents(demo))
GMY
Messages postés6Date d'inscriptionjeudi 2 septembre 2004StatutMembreDernière intervention24 juin 2013 4 août 2010 à 10:39
Bonjour,
Proposition d'un petit ajout et d'une légère restructuration dans la définition de la conversion au niveau des Y :
Const accent As String = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÌÍÎÏìíîïÙÚÛÜùúûüŸÿÑñÇç"
Const noAccent As String = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeIIIIiiiiUUUUuuuuYyNnCc"
C'est une fonction très élégante pour résoudre ce problème.
GM
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 14 déc. 2009 à 07:39
pense a effectuer le changement également quand tu colles du texte dans ta box ^^
meliokan
Messages postés1Date d'inscriptionvendredi 9 septembre 2005StatutMembreDernière intervention13 décembre 2009 13 déc. 2009 à 09:47
Excellent programme.
je l'ai adapté pour supprimer les accents en temps réel dans une textbox.
...et ca fonctionne parfaitement.
Bravo
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 7 juil. 2008 à 11:42
salut,
copie les lignes 1 à 16 dans un module standard
remplace 'Const' par 'Private Const' (lignes 2 et 3)
remplace 'Private Function' par 'Public Function' (ligne 6)
ensuite dans ton classeur, disons que ta chaine avec accents est en A1
en A2 tu mets '=sansAccents(A1)'
tout çà sans les apostrophes bien sûr
le code est alors valable pour VBA
++
offsprings007
Messages postés1Date d'inscriptionlundi 7 juillet 2008StatutMembreDernière intervention 7 juillet 2008 7 juil. 2008 à 10:50
Bonjour, je suis nouveau sur le forum et je souhaiterais appliquer ce code dans mon classeur Excel. Cependant, je n'ai encore jamais utilisé VBA. J'ai tenté d'insérer le code dans un module et dans "This Workbook" mais ensuite, la fonction n'est pas reconnue sous Excel. Pourriez-vous m'aiguiller ?
Merci d'avance.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 7 sept. 2005 à 07:40
Bien que cela ne change rien sur le principe, ni sur l'algo, coté performance, on preferera :
' La fonction :
Private Function sansAccents(ByRef s As String) As String
Dim i As Integer
Dim lettre As String * 1
sansAccents = s
For i = 1 To Len(accent)
lettre = Mid$(accent, i, 1)
If InStr(sansAccents, lettre) > 0 Then
sansAccents = Replace(sansAccents, lettre, Mid$(noAccent, i, 1))
End If
Next i
End Function
En effet, il est preferable de passer les chaînes de caractère par référence.
le calcul du Max est inutile ici : l'instruction de fin de boucle n'est pas réévalué dans les boucles For (c'est le cas avec un While)
Pour la casse, pas grand chose à dire.... les constantes ont été modifiées, et tiennent compte des majuscules... (belle réactivité)
cs_Patrice99
Messages postés1221Date d'inscriptionjeudi 23 août 2001StatutMembreDernière intervention 9 septembre 2018 6 sept. 2005 à 13:49
Je vais tester cela, si ca marche, c'est top !
(j'avais déjà constaté que les recherches de chaine ne tiennent pas compte de la casse, mais je vais ressayer avec Replace)
Zlub
Messages postés809Date d'inscriptionmercredi 11 octobre 2000StatutMembreDernière intervention29 septembre 20108 6 sept. 2005 à 12:51
patrice99 : Il suffit de définir avec les majuscules et c'est bon par exemple le ÀÂÄ
sebmafate : oki c'est modifié
sebmafate
Messages postés4936Date d'inscriptionlundi 17 février 2003StatutMembreDernière intervention14 février 201437 6 sept. 2005 à 08:59
moi ce qui me dérange le plus c'est bien les $, % et autres & dans la déclaration des variables. ca enlèvre à la compréhension du code.
bref préférez toujours les string, long... c'est plus long à écrire mais on comprends plus vite.
cs_Patrice99
Messages postés1221Date d'inscriptionjeudi 23 août 2001StatutMembreDernière intervention 9 septembre 2018 6 sept. 2005 à 08:39
La programmation est élégante, mais cette fonction présente l'inconvénient de ne pas conserver les majuscules, si je ne me trompe. Et du coup, on est obligé de faire une série de if pour en tenir compte.
27 juil. 2011 à 16:56
Pour que les minuscules accentuées ne soient pas remplacées par des Majuscules
Sous Access, l'Option Compare Database étant défaut, il faut s'assurer
que l'Option Compare Binary soit indiquée en entète du module .
Option Explicit
Option Compare Binary
' La fonction :
Private Function sansAccents(ByRef s As String) As String
Const accent As String = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÌÍÎÏìíîïÙÚÛÜùúûüÿÑñÇç"
Const noaccent As String = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeIIIIiiiiUUUUuuuuyNnCc"
Dim i As Integer
Dim lettre As String * 1
sansAccents = s
For i = 1 To Len(accent)
lettre = Mid$(accent, i, 1)
If InStr(sansAccents, lettre) > 0 Then
sansAccents = Replace(sansAccents, lettre, Mid$(noaccent, i, 1))
'Debug.Print lettre & " " & Mid$(noaccent, i, 1)
'Debug.Print sansAccents
End If
Next i
End Function
' Exemple d'utilisation :
Private Sub Form_Load()
Dim demo As String
demo = "L'été, je vais sur l'île où y'a la fête jusqu'à l'aube et" & _
" je hurle: YÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÙÚÛÜùúûü ... "
Debug.Print "Origine => " & demo
Debug.Print "Majuscule => " & UCase(demo)
Debug.Print "O Accent => " & sansAccents(demo)
Debug.Print "O Accent M => " & UCase(sansAccents(demo))
End Sub
Cordialement
LG
4 août 2010 à 10:56
http://www.codyx.org/snippet_modifie-caracteres-speciaux_154.aspx#496
@++
4 août 2010 à 10:39
Proposition d'un petit ajout et d'une légère restructuration dans la définition de la conversion au niveau des Y :
Const accent As String = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÌÍÎÏìíîïÙÚÛÜùúûüŸÿÑñÇç"
Const noAccent As String = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeIIIIiiiiUUUUuuuuYyNnCc"
C'est une fonction très élégante pour résoudre ce problème.
GM
14 déc. 2009 à 07:39
13 déc. 2009 à 09:47
je l'ai adapté pour supprimer les accents en temps réel dans une textbox.
...et ca fonctionne parfaitement.
Bravo
7 juil. 2008 à 11:42
copie les lignes 1 à 16 dans un module standard
remplace 'Const' par 'Private Const' (lignes 2 et 3)
remplace 'Private Function' par 'Public Function' (ligne 6)
ensuite dans ton classeur, disons que ta chaine avec accents est en A1
en A2 tu mets '=sansAccents(A1)'
tout çà sans les apostrophes bien sûr
le code est alors valable pour VBA
++
7 juil. 2008 à 10:50
Merci d'avance.
7 sept. 2005 à 07:40
' La fonction :
Private Function sansAccents(ByRef s As String) As String
Dim i As Integer
Dim lettre As String * 1
sansAccents = s
For i = 1 To Len(accent)
lettre = Mid$(accent, i, 1)
If InStr(sansAccents, lettre) > 0 Then
sansAccents = Replace(sansAccents, lettre, Mid$(noAccent, i, 1))
End If
Next i
End Function
En effet, il est preferable de passer les chaînes de caractère par référence.
le calcul du Max est inutile ici : l'instruction de fin de boucle n'est pas réévalué dans les boucles For (c'est le cas avec un While)
Pour la casse, pas grand chose à dire.... les constantes ont été modifiées, et tiennent compte des majuscules... (belle réactivité)
6 sept. 2005 à 13:49
(j'avais déjà constaté que les recherches de chaine ne tiennent pas compte de la casse, mais je vais ressayer avec Replace)
6 sept. 2005 à 12:51
sebmafate : oki c'est modifié
6 sept. 2005 à 08:59
bref préférez toujours les string, long... c'est plus long à écrire mais on comprends plus vite.
6 sept. 2005 à 08:39