Excel prelever bout chaine de caractère

Résolu
printfx000 -  
 printfx000 -
Salut, dans un de mes classeurs excel, j'ai plusieurs noms de fichiers enregistrés sous forme de chaine de caractères dans une des colonnes de mon classeur.
Ce que je souhaiterais faire, c'est extraire uniquement le morceau de la chaine qui indique de quel type est mon fichier.
(Ex: dans monfichier.pdf, je souhaiterais garder que .pdf)

Je sais qu'il y a une fonction pour cela en vba: Right(String prelever, int taille) ou Left(String prelever, int taille).

Pour les 9/10 de mes fichiers qui sont des .pdf, des .doc, ou des .zip, y'a pas de souci: je fixe taille à 4 dans ma macro.

Cependant, il y a aussi des fichiers .model ou .z, (et d'autres encore) dont la fin de la chaine n'est pas égale à 4 pour le type de format.

J'me suis dit qu'on pouvait faire varier taille en fonction d'un certain paramètre, mais je ne vois pas lequel et je ne sais pas du tout comment me sortir de cette situation.

Pourriez vous m'aider, svp ? Merci.

11 réponses

  1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Bonjour

    Function garder_suffixe(nomfich As String) As String
    garder_suffixe = Split(nomfich, ".")(1)
    End Function
    
    0
  2. printfx000
     
    Merci de ta réponse. Mais que se passe t-il s'il y a plusieurs "." dans le nom ?
    0
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Je ne peux pas te le dire: je n'ai jamais vu de nom de fichier avec plusieurs points dans leur désignation....
    0
  4. printfx000
     
    Y'a t'il un moyen de partir de la droite de la chaine de caractère et faire en sorte que le prelevement s'arrête au premier "." trouvé ?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ccm81 Messages postés 11033 Statut Membre 2 434
     
    bonjour

    peut etre ceci

    Public Function ext(nf As String) As String
    Dim pp As Long
    Dim fn As String
      fn = StrReverse(nf)
      pp = InStr(1, fn, ".")
      ext = StrReverse(Left(fn, pp - 1))
    End Function


    et bonne journée à tous les deux
    0
  7. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    Function garder_suffixe(nomfich As String) As String
    garder_suffixe = Split(nomfich, ".")(0)
    End Function

    Merci d'avoir pas répondu à ma remarque sur les noms de fichiers à plusieurs points, j'aurais peut-^tre appris quelque chose...

    moi, j'essaie de partager. toi non
    Belle mentalité
    0
  8. printfx000
     
    désolé de t'avoir offensé.
    J'avais pas compris que tu attendais une réponse.

    Pour répondre à ta question, certains de mes fichiers s'appelent par exemple:
    "fichier.attachment1.pdf"

    Comme tu le vois, y'a 2 "." dans la chaine.

    Merci pour les réponses précedentes.
    Et encore, Mille excuses :D .
    0
  9. printfx000
     
    C'est encore moi.
    D'après ce que j'ai compris, la fonction Split fonctionne un peu comme Explode en php.
    Cependant, elle commence à GAUCHE de la chainde de caractères.
    Existe t-il une fonction identique mais qui commence à DROITE ?
    0
  10. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    j'étais pas réveillé ce matin...

    Function garder_suffixe(nomfich As String) As String
    tablo = Split(nomfich, ".")
    garder_suffixe = tablo(UBound(tablo))
    End Function
    
    
    0
  11. printfx000
     
    Merci de ta réponse,
    mais quand j'essaye, j'ai une erreur de compilation: ils me disent: Tableau attendu.

    Si tu pouvais m'aider encore une fois sur ce coup :D ...
    0
    1. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      Curieux, chez moi ca marche
      construit avec XL2007 et enregistré en XL2003
      https://www.cjoint.com/?3DtsUpHEIn7

      peut-^tre ca:
      Function garder_suffixe(nomfich As String) As String
      Dim tablo
      tablo = Split(nomfich, ".")
      garder_suffixe = tablo(UBound(tablo))
      End Function
      0
  12. printfx000
     
    c'est bon.
    c'est OK. Je sais pas comment, mais aujourd'hui c'est OK. Merci.
    0