Prendre en compte les mots quelle que soit la casse

Résolu/Fermé
Nai Messages postés 706 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 2 octobre 2024 - Modifié par Nai le 14/10/2014 à 22:00
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 15 oct. 2014 à 13:58
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 :)
A voir également:

2 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 750
15 oct. 2014 à 08:32
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
Nai Messages postés 706 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 2 octobre 2024 54
15 oct. 2014 à 11:06
Merci !
Ça fonctionne ! U = Upper, c'est ça ?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 750
15 oct. 2014 à 11:08
Yes!
Même chose pour les minuscules : L = Lower ==> LCase()
0
Nai Messages postés 706 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 2 octobre 2024 54
15 oct. 2014 à 11:38
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 750
15 oct. 2014 à 12:35
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
Nai Messages postés 706 Date d'inscription vendredi 29 avril 2005 Statut Membre Dernière intervention 2 octobre 2024 54
15 oct. 2014 à 13:08
J'avais déjà fait ça, mais ça ne fonctionne pas.
Les fichiers concernés sont les mêmes qu'ici : https://forums.commentcamarche.net/forum/affich-30645995-completer-lignes-depuis-autre-classeur-base-de-donnees#28
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 750
15 oct. 2014 à 13:58
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