Comment supprimer des mots en minuscule dans

Fermé
janloup - 13 sept. 2008 à 00:33
Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 - 15 sept. 2008 à 15:32
Bonjour,

dans une colonne j'ai un grand nombre de cellules comme ceci :

CASSES l'anesthèsiste
CANNELLE(S)
CANTALOUPS gigiboon
CAPRE(S)
CAPRON (S) gilsanth
CAPUCINES falbala73
CARDAMOMES
CARDE (S) tazounette kakou68
CARDON(S)
CARMINE
CAROTTE(S)
CAROUBE bestof

j'aimerais avec la commande la plus simple possible supprimer les mots en minuscule

par avance merci de votre aide
A voir également:

4 réponses

j'ai trouvé sur un forum cette ligne de commande :

le texte en A1,

en B1 :

=SUBSTITUE(A1;{"a";"b";"c";"d";"e";"f";"g";"h";"i" ;"j";"k";"l";"m";"n";"o";"p";"q";"r";"s";"t";"u";" v";"w";"x";"y";"z"};"")


mais ça ne supprime que le "a" ..


ou est l'erreur ?

j'ai trouvé aussi :

une proposition par VBA (Pour un texte en A1) à étendre à toutes les cellules concernées:

Sub test()
Dim Tex As String, LetCherch1 As String, LetCherch2 As String
Tex = Range("A1")
For i = Len(Tex) To 1 Step -1
LetCherch1 = Mid(Tex, i, 1)
LetCherch2 = Mid(UCase(Tex), i, 1)
If LetCherch1 <> LetCherch2 Then Tex = Replace(Tex, LetCherch1, "")
Next
Range("A1") = Trim(Tex)
End Sub


je n'ai pas réussi a utiliser

merci pour votre aide

janloup
0
Sloubi76 Messages postés 1366 Date d'inscription dimanche 11 mai 2008 Statut Membre Dernière intervention 10 décembre 2016 135
13 sept. 2008 à 09:32
janloup,

Si le texte est en A1, mettre en B1 =minuscule(A1)

@ +
0
Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 309
13 sept. 2008 à 09:56
Bonjour Janloup,
Solution simple :
si on peut considérer que le nom (en majuscules) et le pseudo (en minuscules) sont séparés par le premier espace, alors on peut ne garder que la partie gauche du texte, avant l'espace.
formule en B1 (à étirer ensuite) :
=SI(ESTERREUR(CHERCHE(" ";A1));A1;GAUCHE(A1;CHERCHE(" ";A1)-1))
Inconvénient : ça pose problème pour CAPRON (S) et CARDE (S) à cause de l'espace avant le (S).

Autre solution, en utilisant une fonction personnalisée (à partir du code que tu fournis) :
copie le code ci-dessous dans un module VBA. Ensuite, dans Excel, tape la formule dans B1 : =SUPPRMINUS(A1)
Inconvénient : le code de la fonction devra être complété pour les cas particuliers que tu pourras rencontrer. Ici, ça prend en compte les minuscules, les chiffres et les apostrophes uniquement.
Function SUPPRMINUS(Tex As String) As String
    Dim LetCherch1 As String, LetCherch2 As String
    Dim i As Integer
    For i = Len(Tex) To 1 Step -1
        LetCherch1 = Mid(Tex, i, 1)
        LetCherch2 = Mid(UCase(Tex), i, 1)
        If LetCherch1 <> LetCherch2 _
        Or IsNumeric(LetCherch1) _
        Then Tex = Replace(Tex, LetCherch1, "")
    Next i
    Tex = Replace(Tex, "'", "")
    SUPPRMINUS = Trim(Tex)
End Function
0
merci de la rapidité de ta réponse

je suis au boulot mais je vais essayer sur mes fichiers des cet aprem


pour les (S) précédés d'un espace ce n'est pas un problème

en faisant édition/remplacer je vire cet espace

je te confirmerais si çà marche

à bientôt

jan loup
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
13 sept. 2008 à 10:31
Bonjour tout le monde,

Une autre fonction (avec ou sans espaces entre les maj et min)

Function extraire_maj(texto As Range)
Dim reg As Object
Dim extraction As Object
    Set reg = CreateObject("vbscript.regexp")
    reg.Global = True
    reg.Pattern = "(\w[A-Z()]{1,})"
    
    Set extraction = reg.Execute(texto)
    For Each maj In extraction
        extraire_maj = maj.Value
    Next maj
End Function

0
Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 309
13 sept. 2008 à 19:29
Bonjour michel,
dans un but pédagogique, pourrais-tu expliquer chaque ligne de ton code ?
ça m'intéresserait de comprendre.
Salutations.
I.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
14 sept. 2008 à 10:40
Bonjour Ivan-Hoe

Pas facile ta question!

La méthode que j'ai utilisé est celles des "expressions régulières, ou expressions rationnelles" (regexp) utilisée surtout sur les sites Web pour manipuler, extraire, vérifier des saisies de l'internaute. Les langages utilisés sont majoritairement Java, C, PhP; L'utilisation en VBA – tirée du Vbscript- reste marginale.
En PJ tu pourras trouver un exemple de vérification d'une syntaxe d'adresse mail: pas d'espace, arobase présent, au moins 1 point dans la 2° partie ; d'autres démos sont aussi jointes.

Deux documents à potasser où j'ai fait connaissance avec cette drôle de bête:
https://cafeine.developpez.com/access/tutoriel/regexp/
https://docs.microsoft.com/en-us/previous-versions/1400241x(v=vs.100)?redirectedfrom=MSDN

Il y en a d'autres…

Sur le code proposé :

-----
Dim reg As Object
Dim extraction As Object
Set reg = CreateObject("vbscript.regexp")

Déclaration des objets nécessaires et instantation de l'objet en expression régulière (regexp)
Il y a d'autres manières (voir PJ) mais celle-ci évite d'avoir à aller cocher la bibliothèque vbscript regular expression 5.5 dans les outils-ref de VBE chaque fois que tu changes d'ordi…
----

reg.Global = True
indique que l'on veut travailler sur toute la donnée de travail. Par défaut elle est à "false" (1 seule occurrence)
---

reg.Pattern = "(\w[A-Z()]{1,})"

C'est LA que tout se joue et c'est loin d'être évident (pour moi, ce qui explique mon retard à répondre!). On définit le modèle –ou motif- ("pattern") que devra suivre la donnée (ici "texto"). Dans notre cas:
"w" minuscule indique que l'on recherche des caractères alphanumériques de type texte
[A-Z ()] indique que l'on cherche l'alphabet littéraire en majuscule et les parenthèses
{1, } indique que la donnée doit comporter au moins 1 occurrence

nota: la syntaxe est très délicate. Par ex. "W "majuscule indique que l'on veut le complément de l'ensemble défini entre les crochets… Toutefois, cela peut être pratique pour extraire des caractères autres que les chiffres en utilisant la lettre "d": \d demande des chiffres \D demande tout sauf des chiffres (cf PJ)
---

Set extraction = reg.Execute(texto)
On instantie l'objet extraction ( être en objet va permettre de boucler dans extraction) en exécutant suivant le "pattern" modélisé sur la donnée de travail (texto)
---
For Each maj In extraction
extraire_maj = maj.Value
Next maj


On boucle pour transfèrer de l'objet au string extraire_maj, résultat de la fonction. J'aurais eu tendance à écrire extraire_maj= extraire_maj + maj.value mais ca marche sans (au départ j'avais oublié!!!)…

Voilà, voilà…. Mais je n'utilise rarement ces regexp et mes connaissance et compréhensions sont très faibles là-dessus. D'ailleurs, il y a 1 truc foireux: écris par exemple ffffXXX(E) et lance la procédure: moi, j'ai fXXX(E)… j'ai pas trouvé l'erreur

Dans la PJ:

Vérification d'une adresse mail ( réalisée avec plusieurs contributeurs sur un autre forum)
Extraction de chiffes et de lettres
Extraction de mots d'au moins N lettres sans doublons dans une phrase

Amuses toi bien quand m^me ! en espèrant avoir répondu à ta demande
Cordialement
https://www.cjoint.com/?jokI1MkbUS

Pas de nouvelles de Janloup?
0
Ivan-hoe Messages postés 433 Date d'inscription dimanche 17 février 2008 Statut Membre Dernière intervention 17 octobre 2008 309
15 sept. 2008 à 15:32
Merci d'avoir pris le temps d'expliquer, c'est sympa.
I.
0