Ah ces foutus accents !!!!

  • Initiateur de la discussion Initiateur de la discussion micie1509
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

micie1509

XLDnaute Junior
Bonjour à tous,

J'ai une base de donnée avec un formulaire qui comprend toutes les lettres alphabétiques (ce n'est pas moi qui l'ai fait, je l'ai juste un peu modifié pour mes besoins). Lorsqu'à partir du formulaire, je clique sur les lettre, il m'affiche tous les items commençant par cette lettre. Tout fonctionne bien, sauf lorsque je clique sur la lettre "E" qui ne m'affiche que les items commençant par "E" et non ceux qui commencent par une lettre accentuée. Je comprends que ce ne sont pas les mêmes caractères, mais je me demandais si il y avait une façon sans enlever les accents de faire afficher ces items dont la première lettre comporte un accent. Si je n'ai vraiment pas le choix, j'enlèverai les accents mais j'aimerais mieux ne pas avoir à les enlever.

Merci beaucoup pour votre réponse !

Micie
 

Pièces jointes

Re : Ah ces foutus accents !!!!

Bonjour.

Voici une façon de faire :

Code:
Private Sub GrLettres_Click()
  F_Mat.Lettre = GrLettres.Caption
  F_Mat.choixnom.Clear
  If GrLettres.Caption = "Tous" Then
    For Each c In Range(Sheets("materiaux").[B3], Sheets("materiaux").[B65000].End(xlUp))
      F_Mat.choixnom.AddItem c
    Next c
  Else
   LettreEtAccents = GrLettres.Caption
   
  Select Case GrLettres.Caption
   Case "A"
    LettreEtAccents = LettreEtAccents & "ÀÁÂÃÄÅÆ"
   Case "E"
    LettreEtAccents = LettreEtAccents & "ÈÉÊË"
   Case "I"
    LettreEtAccents = LettreEtAccents & "ÌÍÎÏ"
   Case "O"
     LettreEtAccents = LettreEtAccents & "ÒÓÔÕÖ"
   Case "U"
     LettreEtAccents = LettreEtAccents & "ÙÚÛÜ"
   Case "Y"
    LettreEtAccents = LettreEtAccents & "Ý"
   Case "C"
     LettreEtAccents = LettreEtAccents & "Ç"
   Case "N"
     LettreEtAccents = LettreEtAccents & "Ñ"
  End Select
  
  LettreEtAccents = UCase(LettreEtAccents)
  
    For Each c In Range(Sheets("materiaux").[B3], Sheets("materiaux").[B65000].End(xlUp))
       
      'If Left(c.Value, 1) = GrLettres.Caption Then
      If InStr(LettreEtAccents, UCase(Left(c.Value, 1))) Then
       F_Mat.choixnom.AddItem c
      End If
    Next c
  End If
  If F_Mat.choixnom.ListCount > 0 Then
    F_Mat.choixnom.ListIndex = 0
  End If
End Sub

Docmarti
 
Re : Ah ces foutus accents !!!!

Bonjour micie1509, Docmarti,

Bah on peut toujours remplacer n'importe quelle lettre par n'importe quelle autre !!!!

Par exemple cette fonction personnalisée, à placer dans un module standard :

Code:
Function NOACCENT$(t$)
Dim a$, b$, i%
a = "àâçéèêëîïôùûüÿÀÂÇÉÈÊËÎÏÔÙÛÜŸ"
b = "aaceeeeiiouuuyAACEEEEIIOUUUY"
For i = 1 To Len(a)
  t = Replace(t, Mid(a, i, 1), Mid(b, i, 1))
Next
NOACCENT$ = t
End Function
Entrer par exemple en B2 =NOACCENT(A2)

A+
 
Re : Ah ces foutus accents !!!!

Re,

Si l'on veut faire le remplacement sur une colonne entière :

Code:
Sub NoAccent()
Dim a$, b$, col%, i%
a = "àâçéèêëîïôùûüÿÀÂÇÉÈÊËÎÏÔÙÛÜŸ"
b = "aaceeeeiiouuuyAACEEEEIIOUUUY"
col = 2 'colonne B
'[A:A].Copy Columns(col) 'si nécessaire
For i = 1 To Len(a)
  Columns(col).Replace Mid(a, i, 1), Mid(b, i, 1), xlPart
Next
End Sub
A+
 
Re : Ah ces foutus accents !!!!

Bonjour Job75,

Merci pour ta réponse. Je l'aurais utilisé si je n'aurais pas eu le choix de remplacer les lettres accentuées, mais la solution de Docmarti fonctionne vraiment super bien. Merci encore d'avoir pris le temps.
 
Re : Ah ces foutus accents !!!!

Re,

Je voulais juste montrer la fonction NOACCENT.

Dans le fichier du post #1, code du module de classe :

Code:
Public WithEvents GrLettres As MSForms.CommandButton

Private Sub GrLettres_Click()
F_Mat.Lettre = GrLettres.Caption
F_Mat.choixnom.Clear
For Each c In Range(Sheets("materiaux").[B3], Sheets("materiaux").[B65000].End(xlUp))
  If NOACCENT(Left(c, 1)) Like IIf(GrLettres.Caption = "Tous", "*", GrLettres.Caption) _
    Then F_Mat.choixnom.AddItem c
Next
If F_Mat.choixnom.ListCount > 0 Then F_Mat.choixnom.ListIndex = 0
End Sub

Function NOACCENT$(t$)
Dim a$, b$, i%
a = "àâçéèêëîïôùûüÿÀÂÇÉÈÊËÎÏÔÙÛÜŸ"
b = "aaceeeeiiouuuyAACEEEEIIOUUUY"
For i = 1 To Len(a)
  t = Replace(t, Mid(a, i, 1), Mid(b, i, 1))
Next
NOACCENT$ = t
End Function
A+
 
Re : Ah ces foutus accents !!!!

Wow, ça fonctionne aussi. J'étais sous l'impression (à cause du terme "Replace" et "NOACCENT") que les lettres accentuées étaient changées par des lettres sans accent. Mais non, ça fonctionne super bien. Merci beaucoup job75 ! Et merci à toute l'équipe de excel-downloads.com vous êtes vraiment forts.
 
Re : Ah ces foutus accents !!!!

Et comme la programmation consiste à tout prévoir, une vérification supplémentaire s'impose pour s'assurer de n'avoir pas oublié un accent.

Code:
Private Sub GrLettres_Click()
  F_Mat.Lettre = GrLettres.Caption
  F_Mat.choixnom.Clear
  If GrLettres.Caption = "Tous" Then
    For Each c In Range(Sheets("materiaux").[B3], Sheets("materiaux").[B65000].End(xlUp))
      F_Mat.choixnom.AddItem c
    Next c
  Else
   
   LettreEtAccents = GrLettres.Caption
  Select Case GrLettres.Caption
   Case "A"
    LettreEtAccents = LettreEtAccents & "ÀÁÂÃÄÅÆ"
   Case "E"
    LettreEtAccents = LettreEtAccents & "ÈÉË" '"ÈÉÊË"
   Case "I"
    LettreEtAccents = LettreEtAccents & "ÌÍÎÏ"
   Case "O"
     LettreEtAccents = LettreEtAccents & "ÒÓÔÕÖ"
   Case "U"
     LettreEtAccents = LettreEtAccents & "ÙÚÛÜ"
   Case "Y"
    LettreEtAccents = LettreEtAccents & "Ý"
   Case "C"
     LettreEtAccents = LettreEtAccents & "Ç"
   Case "N"
     LettreEtAccents = LettreEtAccents & "Ñ"
  End Select
  
  LettreEtAccents = UCase(LettreEtAccents)
  TousLesCaracteres = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" & "ÀÁÂÃÄÅÆ" & "ÈÉË" & "ÌÎÍÏ" & "ÒÓÔÕÖ" & "ÙÚÛÜ" & "Ý" & "Ç" & "Ñ"

    For Each c In Range(Sheets("materiaux").[B3], Sheets("materiaux").[B65000].End(xlUp))
       
      If InStr(UCase(LettreEtAccents), UCase(Left(c.Value, 1))) Then
       F_Mat.choixnom.AddItem c
      End If
      
      If PasTrouver = False Then
       If InStr(UCase(TousLesCaracteres), UCase(Left(c.Value, 1))) = 0 Then
        MsgBox "Ligne " & c.Row & vbCrLf & c.Value & vbCrLf & "ne sera pas trouvé", , "Caractère oublié"
        PasTrouver = True
       End If
      End If
      
    Next c
  End If
  If F_Mat.choixnom.ListCount > 0 Then
    F_Mat.choixnom.ListIndex = 0
  End If
End Sub

Docmarti
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
4
Affichages
608
Réponses
16
Affichages
2 K
T
  • Question Question
Réponses
7
Affichages
2 K
G
Réponses
1
Affichages
794
Retour