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,
 

BOISGONTIER

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

Bonjour,

Code:
Sub essai()
  x = "Paris/Saint-Tropez"
  y = Majusc(x)
  MsgBox y
  x = "Paris/Lyon"
  y = Majusc(x)
  MsgBox y
End Sub

Function Majusc(chaine)
  Set obj = CreateObject("vbscript.regexp")
  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

JB
 

cathodique

XLDnaute Barbatruc
Re : Récupérer Initiales majuscules

Bonjour tout le monde,

je m'excuse pour ma tardive réponse à vos interventions.

Je n'ai pas encore essayé le code de Boisgontier. je donnerai une réponse un peu plus tard.

En fait, sur mon fichier original, je récupère des données d'une BD en fonction des valeurs de certaines cellules sur une feuille excel nommée "Consultation", une autre feuille graphique se met à jour par rapport à cette feuille.

Je voudrais que la feuille graphique prenne le nom de la cellule D1, de la feuille "Consultation". En D1, il y aura des noms propres séparés par un "/" (ex: Montreuil/Saint-Rémy). Résultat souhaité: M_SR

Comme le "/" est un caractère non permis dans le nom d'un onglet, je voudrais récupérer le lettres majuscules et remplacer le slash ("/") par l'underscore ("_").

j'ai fait ceci pour nommer la feuille graphique, en remplaçant le "/" par "_" mais en récupérant les noms complets
Code:
Private Sub Chart_SeriesChange(ByVal SeriesIndex As Long, ByVal PointIndex As Long)
Dim Ch As Chart
Ch.Name = Replace(Sheets("ConsultationGraphe").Range("D1"), "/", "_")
End Sub

Je vous remercie tous autant que vous êtes pour vos interventions.
 

cathodique

XLDnaute Barbatruc
Re : Récupérer Initiales majuscules

Re,

@Boisgontier

Je te remercie beaucoup pour ton code qui fonctionne bien en l'état. Comme les valeurs de la cellule D1 varie, j'ai modifié ton code mais sans succès.

j'ai une erreur d'exécution, l'indice n'appartient pas à la sélection.
Code:
Sub essai()
Dim x As String
  x = Sheets("D1").Text 'Value ' "Paris/Saint-Tropez"
  y = Majusc(x)
  MsgBox y
 End Sub
.

Merci beaucoup pour ton aide.
 

cathodique

XLDnaute Barbatruc
[RESOLU] : Récupérer Initiales majuscules

Re,

Désolé, je viens de me rendre compte de ma grossière erreur, au lieu de Range j'ai mis Sheets

Merci beaucoup, le bon code est:
Code:
Sub essai()
Dim x As String
x = Range("D1").Value
   y = Majusc(x)
  MsgBox y
End Sub

Function Majusc(chaine)
  Set obj = CreateObject("vbscript.regexp")
  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
C'est ce que je voulais merci beaucoup à vous tous.

Mais j'avoue, si la macro "essai" est claire et simple, pour la fonction "Majusc(chaine)" je n'ai rien compris, à l'exception de la dernière ligne qui remplace / par _.

J'espère que les explications de l'aide me seront d'une grande utilité pour mieux comprendre le code de Boisgontier dont la réputation n'est plus à faire.

Cordialement,
 

david84

XLDnaute Barbatruc
Re : Récupérer Initiales majuscules

Bonjour,
à tester :
Code:
Function InitMaj(chaine) As String
Dim oRegExp As Object
  Set oRegExp = CreateObject("vbscript.regexp")
  oRegExp.Global = True
  oRegExp.Pattern = "[^A-Z/]+"
  InitMaj = Replace(oRegExp.Replace(chaine, ""), "/", "_")
End Function
A+
 

Docmarti

XLDnaute Occasionnel
Re : [RESOLU] : Récupérer Initiales majuscules

Mais j'avoue, si la macro "essai" est claire et simple, pour la fonction "Majusc(chaine)" je n'ai rien compris, à l'exception de la dernière ligne qui remplace / par _.

Si tu veux une bonne explication des Expressions Régulières, en voici une:
Ce lien n'existe plus

Tu y verras que "[^A-Z/]+" signifie probablement accepter "aucun /" et "Aucune lettre de l'alphabet" sauf la première occurence dans chacun des mots.

Cordialement

Docmarti
 

david84

XLDnaute Barbatruc
Re : Récupérer Initiales majuscules

Tu y verras que "[^A-Z/]+" signifie probablement accepter "aucun /" et "Aucune lettre de l'alphabet" sauf la première occurence dans chacun des mots.
Pas exactement : [^A-Z/]+ prend en compte tous les caractères exceptés les majuscules et le "/".
En fait c'est le même pattern que celui proposé par Jacques mais en raisonnant à l'inverse : plutôt que de sélectionner ces caractères et de tenter ensuite de les récupérer via l'utilisation de la méthode Execute suivie d'une boucle permettant de lier les occurrences trouvées, je recherches tous les caractères autres que les majuscules et le "/" puis je les élimine via la méthode Replace de l'objet RegExp.

Ceci me permet dans le cas présent d'éviter le fait de rechercher les différentes occurrences et de ramener directement la chaîne de caractères recherchée.

L'utilisation de la fonction Replace (à ne pas confondre avec la méthode Replace de l'objet RegExp) permet de remplacer "/" par "_" comme également proposée par Jacques.
A+
 

Staple1600

XLDnaute Barbatruc
Dernière édition:

Docmarti

XLDnaute Occasionnel
Re : Récupérer Initiales majuscules

Bonjour David.

Merci de l'explication.
Si je comprends bien, c'est que, avec les 2 méthodes de l'objet RegExp, (Execute et Replace), la méthode d'utilisation est identique : c-a-d que le .Pattern est le même pour les 2 méthodes. 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. C'est bon à savoir.

Je vais peut-être finir par comprendre les RegExp.

Cordialement

Docmarti.