Prendre en compte les mots quelle que soit la casse

Résolu
Nai Messages postés 710 Date d'inscription   Statut Membre Dernière intervention   -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonsoir tout le monde,
Je souhaite qu'une macro (à priori ListBox1_Click) m'affiche les noms commençant par la lettre tapée par l'utilisateur quel que soit la casse.

Explications suivie du fichier :
Lorsque j'ouvre le classeur, une macro (Workbook_Open) va récupéré les informations des colonnes A, B et C.
Puis, lorsque je clique sur une textbox, et que je tape la lettre M, par exemple, Excel m'affiche les lignes dans lesquelles on pouvait trouver cette lettre dans la colonne A.
Enfin, normalement.

Si, par malheur, le texte de la colonne A du fichier bdd.xlsx est écrit en minuscule, alors, la listbox considère qu'il n'y a rien... Dommage.

Il y a, je pense, deux possibilités :
- Soit faire en sorte que les Macros (je ne sais pas laquelle ne prend pas en compte les cellules en minuscule) prennent en compte les cellules quelle que soit la casse.
- Soit faire en sorte que le texte de la colonne A du fichier bdd se transforme en majuscule.

J'ai une nette préférence pour la première solution, qui permettrait à l'utilisateur d'utiliser sa propre base de donnée, et de réunir les macros dans un seul fichier.

Qu'en pensez-vous ? Et comment faire ?

https://www.cjoint.com/c/DJoweGL2FKI



Bien à vous,
Naï
ps: je surveille tous mes sujets non résolus, si solution vous avez, je la lirais à coup sûr :)

2 réponses

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,

    Peut être simplement en ajoutant UCase().
    Ta procédure TextBox1_Change :
    Private Sub TextBox1_Change()
    'sources :
    'http://www.commentcamarche.net/forum/affich-14847865-recherche-semi-auto-dans-excel
    'michel_m
    Application.ScreenUpdating = False 'ne pas afficher le déroulé de la macro'
    Dim lettre As String, cptr As Long, cptr_tablo As Long, derlig As Long, i As Long
    Dim Tb()
    
    lettre = UCase(TextBox1.Value)
    If lettre = "" Then Exit Sub
    For cptr = 1 To UBound(Sources, 1)
        If Sources(cptr, 1) Like lettre & "*" Then ' <== Ligne à modifier
            ReDim Preserve Tb(cptr_tablo)
            Tb(cptr_tablo) = Sources(cptr, 1) & " - " & Sources(cptr, 2) & " - " & Sources(cptr, 3)
            cptr_tablo = cptr_tablo + 1
        End If
    Next
    If cptr_tablo = 0 Then MsgBox "Aucun Nom commençant par : " & lettre: Exit Sub
    With ListBox1
        .Clear
        For i = LBound(Tb) To UBound(Tb)
            .AddItem Tb(i)
        Next
        .Visible = True
    End With
    Application.ScreenUpdating = True 'afficher le résultat final'
    End Sub 


    Devient :
    Private Sub TextBox1_Change()
    'sources :
    'http://www.commentcamarche.net/forum/affich-14847865-recherche-semi-auto-dans-excel
    'michel_m
    Application.ScreenUpdating = False 'ne pas afficher le déroulé de la macro'
    Dim lettre As String, cptr As Long, cptr_tablo As Long, derlig As Long, i As Long
    Dim Tb()
    
    lettre = UCase(TextBox1.Value)
    If lettre = "" Then Exit Sub
    For cptr = 1 To UBound(Sources, 1)
        If UCase(Sources(cptr, 1)) Like lettre & "*" Then '<== utilisation de UCase
            ReDim Preserve Tb(cptr_tablo)
            Tb(cptr_tablo) = Sources(cptr, 1) & " - " & Sources(cptr, 2) & " - " & Sources(cptr, 3)
            cptr_tablo = cptr_tablo + 1
        End If
    Next
    If cptr_tablo = 0 Then MsgBox "Aucun Nom commençant par : " & lettre: Exit Sub
    With ListBox1
        .Clear
        For i = LBound(Tb) To UBound(Tb)
            .AddItem Tb(i)
        Next
        .Visible = True
    End With
    Application.ScreenUpdating = True 'afficher le résultat final'
    End Sub

    1
  2. Nai Messages postés 710 Date d'inscription   Statut Membre Dernière intervention   57
     
    Merci !
    Ça fonctionne ! U = Upper, c'est ça ?
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Yes!
      Même chose pour les minuscules : L = Lower ==> LCase()
      0
    2. Nai Messages postés 710 Date d'inscription   Statut Membre Dernière intervention   57
       
      Est-ce que, dans la suite de la macro, il est possible de modifier la colonne A en majuscule, après le clic du coup ?
      Puisque ce sont des NOM, je voudrais qu'ils soient affichés en majuscule.
      0
    3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Ben ça tu peux le faire en dehors d'une macro...

      Tu te met dans une colonne vide de ton fichier même page,
      En colonne Z par exemple,
      en Z1 tu écris la formule : =MAJUSCULE(A1)
      Formule que tu "étires" vers le bas.
      Puis, copier / collage spécial choix valeurs de la colonne Z en colonne A...
      En trois minutes tu n'as que des NOMS
      0
    4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      J'avais déjà fait ça, mais ça ne fonctionne pas.
      J'ai testé cela fonctionne...

      Bon. Par macro, il va falloir modifier le fichier bdd.xlsx qui devient bdd.xlsm
      Donc :
      MODIFIER ce nom dans les macros du second fichier.

      Puis, dans le fichier bdd.xlsm, ajouter cette macro dans le module ThisWorkbook
      Private Sub Workbook_Open()
      Dim lig As Long, dl As Long
      With Sheets("Feuil1")
          dl = .Range("A" & Rows.Count).End(xlUp).Row
          For lig = 2 To dl
              .Cells(lig, 1) = UCase(.Cells(lig, 1))
          Next
      End With
      End Sub
      0