Récupérer texte entre 2 caractères

Résolu
PYGOS69 Messages postés 452 Date d'inscription   Statut Membre Dernière intervention   -  
PYGOS69 Messages postés 452 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

N'ayant pas trouvé exactement , ce que je recherche? je pose ma question :

en colonne A je liste les fichiers d'un répertoire (à partir de A2) par VBA

PT 2.7.2 Paul.xlsm
PT 2.7.2 Eric.xlsm
PT 2.7.2 Claire.xlsm

Je souhaite récupérer le texte en colonne B, après le dernier espace et avant le dernier . (point)

Dans mon cas le prénom... (exemple : en B2 = Paul)

Merci d'avance,
PYGOS69

Excel 2010

Configuration: Windows / Internet Explorer 11.0

3 réponses

  1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Bonjour,

    Faire Alt F11 pour accèder à l'éditeur

    la macro se déclenche à la sélection dans la cellule:

    avec la fonction Split

    Option Explicit
    Dim chaine As String
    Dim nombre As Integer
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("A:A")) Is Nothing Then
    chaine = Target.Value
    separateur
    Range("B" & Target.Row).Value = Split(chaine, " ")(nombre)
    Range("B" & Target.Row).Value = Split(Range("B" & Target.Row).Value, ".")(0)
    End If
    End Sub
    Sub separateur()
    Dim str, num1, num2
    str = chaine
    num1 = Len(str)
    str = Replace(str, " ", "")
    num2 = Len(str)
    num1 = num1 - num2
    nombre = num1 'nombre total de séparateurs
    End Sub
    

    1
    1. PYGOS69 Messages postés 452 Date d'inscription   Statut Membre Dernière intervention   21
       
      Merci cs_le pivert,

      La fonction Split est intéressante pour d'autres projets...
      0
  2. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour Pygos69

    J'avais posté un truc que j'ai supprimé ...

    l'idée est d'utiliser ton code que tu as déjà et on inscrit le ie prénom par une fonction à partir du moment ou ton code écrit le nom d'un classeur dans une cellule de ta feuille
    Option Explicit
    '----------------------------
    Function extraire(lig As Integer)
    Dim xxx As String, Separe

    Separe = Split(Cells(lig, "A"), " ")
    xxx = Separe(2)
    extraire = Left(xxx, Len(xxx) - 5)
    End Function
    '----------------------------
    'a partir de ton code lorsque le nom du classeur est trouvé
    Sub Toncode()
    'demo sur une ligne....par exemple la ligne 2
    Dim lig As Integer

    lig = Range("A2").Row
    Range("B2") = extraire(lig)
    End Sub


    1
    1. PYGOS69 Messages postés 452 Date d'inscription   Statut Membre Dernière intervention   21
       
      Bonjour à tous les 2,

      Merci pour votre réactivité, j'opte pour la 2ème solution.

      Est-il possible d'effectuer une boucle sur la colonne A et appliquer la fonction extraire sur tous les cellules non vide de la colonne A ?
      0
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    1
    1. PYGOS69 Messages postés 452 Date d'inscription   Statut Membre Dernière intervention   21
       
      J'ai bien une ligne en entête.

      Si je l'efface , cela fonctionne, sinon erreur...

      J'ai modifié, comme suit :

      For Cptr= 2 To Nbre

      Encore merci !
      0