Récupérer Initiales majuscules

cathodique

XLDnaute Barbatruc
Bonjour,

En parcourant les discussions, j'ai trouvé ce code de Pierrot93 qui extrait les lettres majuscules des mots contenus dans une cellule.
Code:
Sub test()
Dim m As String, i As Byte
With Range("D1")
    For i = 1 To .Characters.Count
        If (Asc(.Characters(i, 1).Text) >= 65 And Asc(.Characters(i, 1).Text) <= 90) Or IsNumeric(.Characters(i, 1).Text) Then m = m & .Characters(i, 1).Text
    Next i
End With
MsgBox m
End Sub

Ma cellule contient un truc similaire à ceci: Paris/Saint-Tropez (ce contenu est variable).

Je voudrais avoir: P_ST, pour pouvoir ensuite nommer une feuille de calcul.

En vous remerciant beaucoup.

Cordialement,
 

david84

XLDnaute Barbatruc
Re : Récupérer Initiales majuscules

c-a-d que le .Pattern est le même pour les 2 méthodes
pas tout à fait : le pattern de Jacques est "[A-Z/]+" tandis que mon pattren est "[^A-Z/]+".
Le "^" te permet d'exclure les caractères précisés dans le pattern, autrement dit "je recherche dans la chaîne de caractères tous les caractères qui ne sont ni des majuscules, ni le "/".
La méthode Replace de l'objet RegExp me permet ensuite de les effacer.
Au bout du compte il ne me reste que les majuscules et le "/".

Et le résultat est aussi identique avec les 2 méthodes, sauf que l'un revient dans un tableau et l'autre dans une chaîne.
La proposition de Jacques et l'utilisation de la méthode Execute permet effectivement de ramener le tableau des occurrences répondant au pattern. La mienne permet d'économiser la création de ce tableau.

Si l'on veut comprendre les RegExp la proposition de Jacques est la plus appropriée. La mienne est moins intuitive et moins évidente à appréhender mais peut-être plus rapide dans l'absolu (mais je n'ai pas fait de tests).
A+

Edit : bonsoir Jean-Marie
 
Dernière édition:

Docmarti

XLDnaute Occasionnel
Re : Récupérer Initiales majuscules

pas tout à fait : le pattern de Jacques est "[A-Z/]+" tandis que mon pattern est "[^A-Z/]+".
Le "^" te permet d'exclure les caractères précisés dans le pattern

Merci de cette précision. Je progresse grâce à ta science.

Donc si je prends le pattern de Jacques et que j'enlève le + et que je ne garde que "[A-Z/]", j'aurai comme résultat toutes les lettres en majuscules sans exception et tous les caractères "/". Ce qui est exactement la demande de Cathodique.

Bonsoir à tous

Cordialement

Docmarti
 

job75

XLDnaute Barbatruc
Re : Récupérer Initiales majuscules

Bonjour à tous,

Sur Win XP - Excel 2003 j'ai testé les durées des calculs sur 2000 cellules (ce qui est peu).

La fonction de JB se calcule en 3,38 secondes, celle de David en 3,33 secondes.

Cette fonction se calcule en 0,07 seconde :

Code:
Function Classic$(chaine$)
Dim i%, t$, c As Byte
  Application.Volatile
  For i = 1 To Len(chaine)
    t = Mid(chaine, i, 1)
    c = Asc(t)
    If c = 47 Or c > 64 And c < 91 Then Classic = Classic & t
  Next
  Classic = Replace(Classic, "/", "_")
End Function
Je savais que les expressions régulières prenaient du temps mais pas à ce point (50 fois plus).

Nota : j'ai bien sûr rendu les 3 fonctions volatiles pour qu'elles se recalculent.

Fichier joint.

Bonne journée.
 

Pièces jointes

  • Expressions régulières(1).xls
    517.5 KB · Affichages: 60

job75

XLDnaute Barbatruc
Re : Récupérer Initiales majuscules

Re,

D'après le post #1 cathodique veut aussi conserver les chiffres donc :

Code:
Function Classic$(chaine$)
Dim i%, t$, c As Byte
  Application.Volatile
  For i = 1 To Len(chaine)
    t = Mid(chaine, i, 1)
    c = Asc(t)
    If c = 47 Or c > 64 And c < 91 Or t Like "#" Then Classic = Classic & t
  Next
  Classic = Replace(Classic, "/", "_")
End Function
C'est à peine plus long : 0,075 seconde au lieu de 0,072 seconde.

A+
 

job75

XLDnaute Barbatruc
Re : Récupérer Initiales majuscules

Re,

Et ceci est plus rapide : 0,067 seconde :

Code:
Function Classic$(chaine$)
Dim i%, t$, c As Byte
  Application.Volatile
  For i = 1 To Len(chaine)
    t = Mid(chaine, i, 1)
    c = Asc(t)
    If c = 47 Then Classic = Classic & "_" Else _
      If c > 64 And c < 91 Or t Like "#" Then Classic = Classic & t
  Next
End Function
A+
 

Staple1600

XLDnaute Barbatruc
Re : Récupérer Initiales majuscules

Bonjour à tous

Job75 (;))
W764bits+XL2013-32bits+4 Go de Ram •> 0,23 pour Classic1 0,25 pour Classic2
Tu testes sur quel config, toi ? Ton PC m'a l'air bien véloce ;)

Ceci dit, ici le temps d’exécution est accessoire non ;), si le but recherché n'est vraiment que:
Ma cellule contient un truc similaire à ceci: Paris/Saint-Tropez (ce contenu est variable).
Je voudrais avoir: P_ST, pour pouvoir ensuite nommer une feuille de calcul.
 

job75

XLDnaute Barbatruc
Re : Récupérer Initiales majuscules

Bonjour Jean-Marie,

Ma config est indiquée au post #18, je testerai plus tard sur Win7 - Excel 2010.

Il me semble que c'est la 1ère fois qu'on teste les durées de calcul des expressions régulières et je vois que ce n'est pas fameux.

A+
 

Staple1600

XLDnaute Barbatruc
Re : Récupérer Initiales majuscules

Re

Job75
Désolé j'avais mal lu.
Ceci dit je me rends compte qu'Excel 2013 serait plus lent qu'Excel 2003 ou Seven plus lent qu'XP.
Vive le progrès qu'ils disaient! ;)

Cependant, comme RegExp est extérieur* à Excel, l'honneur de notre tableur préféré est sauf!
(* référence à Microsoft VBScript Régular Expression -> vbscript.dll)
PS: Même topo pour l'objet Dictionnary, ce n'est pas de l'Excel, natif ;)
 

BOISGONTIER

XLDnaute Barbatruc
Repose en paix
Re : Récupérer Initiales majuscules

Bonjour,


>Il me semble que c'est la 1ère fois qu'on teste les durées de calcul des expressions régulières et je vois que ce n'est pas fameux.

[Toutes versions] extraire les chiffres d'une cellule [Résolu]

Post #16[RegExp est puissant mais n'est pas très rapide (60 fois plus lent pour la fonction étudiée)]

JB
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Récupérer Initiales majuscules

Re, salut JB,

Sur mon portable avec Win7 - Excel 2010 l'écart est moins grand sur le fichier du post #18.

2,1 à 2,2 secondes pour les RegExp contre 0,11 seconde pour Classic soit 20 fois plus.

A+
 

Staple1600

XLDnaute Barbatruc
Re : Récupérer Initiales majuscules

Re, bonjour JB

C'est marrant, selon qu'on coche la référence idoine ou pas le temps d’exécution varie un peu.
• Il y aussi des varaiations (en tout cas sur mon PC) sur version *.xls, *.xlsm ou *.xlsb du même fichier :confused:
PS: Les temps affichés varie avec les fonctions RegExp à chaque recalcul
Avec Classic, c'est toujours 0.25 qu'affiche le Msgbox
Pourquoi ces différences de temps entre chaque test :confused:

Job75: Sur ton portable tu as combien de Ram ?
Apparemment XL 2013 est bien lent au vu de mes résultats!

Code vba:
Function Majusc(chaine) 'JB
Application.Volatile
Dim obj As Object
'Set obj = CreateObject("vbscript.regexp") '4.91
Set obj = New RegExp '4.90
obj.Global = True
obj.Pattern = "[A-Z/]+"
Set a = obj.Execute(chaine)
For i = 0 To a.Count - 1: tmp = tmp & a(i): Next
Majusc = Replace(tmp, "/", "_")
End Function



Code vba:
Function InitMaj(chaine) As String 'David84
Dim oRegExp As Object
Application.Volatile
'Set oRegExp = CreateObject("vbscript.regexp") '4.80
Set oRegExp = New RegExp '4.82
oRegExp.Global = True
oRegExp.Pattern = "[^A-Z/]+"
InitMaj = Replace(oRegExp.Replace(chaine, ""), "/", "_")
End Function
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Récupérer Initiales majuscules

Re

Job75
Voila sans doute ce qui explique cela, car mon PC actuel:
Fabricant du ProcesseurAMD
Type de ProcesseurSérie E
Référence du ProcesseurE-300
Nombre de Cœur(s) du ProcesseurDual-core (2-Core)
Vitesse du Processeur1,60 GHz
Traitement 64-bitOui