IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Formaliser les noms des documents d'un fichier. [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2021
    Messages : 15
    Par défaut Formaliser les noms des documents d'un fichier.
    Bonjour,

    Je cherche à modifier les noms de documents d'un fichier. Par exemple, si mon fichier s'appelle "documentA" modifier son nom en "document_A_V01". Entre autre, normaliser l'ensemble des noms d'un fichier en ajoutant des _ et des numéros.
    Je ne trouve pas d'informations à ce sujet sur internet. Débutante en programmation VBA je viens demander de l'aide ici

    Merci d'avance!

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Bonjour,

    il y a plusieurs choses dans ta demande pour lesquelles ils faut en savoir plus :
    - tu dis que tu as "des noms de documents d'un fichier" tu veux dire des nom de fichier du style fichierA.xlsx ou bien tu as des valeurs dans des cellules, qui représentent des noms de documents ?

    - quelle est la nomenclature exacte que tu souhaites utiliser ?

    - comment t'assurer que le changement de nom n'a pas déjà été effectué ?

    - on pourra te donner des pistes, mais on ne te donnera pas de code tout fait, ce n'est pas la vocation ni la philosophie du forum
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2021
    Messages : 15
    Par défaut
    Merci pour votre réponse.

    J'ai fait un programme qui va chercher les tous les documents d'un fichier et qui affiche la liste dans Excel. Je veux maintenant modifier les noms de tous les fichiers du document sous un format précis et non la cellule.

    Pour le changement de nom justement, il faudrait que si le nom du fichier à la bonne nomenclature il ne soit pas modifié.

    Ce sont des fichier avec des nombres donc la nomenclature exacte serait, si on a NomduFichier17 ou NomduFichier-17- ------------> NomduFichier_V17 En gros standardiser les noms de chaques documents.

    Voici mon idée (un peu flou) :
    Utiliser la fonction DIR pour que mon programme regarde tous les documents. Il faudrait que quand il tombe sur un fichier qui n'a pas le bon format il le renomme avec la fonction Name sort de la boucle et ainsi dessuite.

    Problème je ne sais pas si la fonction name est judicieuse car le fichier peut autant s'apeller "tomate" que "stylo" et sur les exemple d'internet la fonction name était utilisée pour un nom connus. En l'utilisant, mon programme ne marche pas. Avoir si je l'utilise mal ou si elle n'est pas adaptée à mon problème.

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Ok, donc parmi les choses à prévoir :
    1/faire une fonction qui te permettra de passer de
    XXXXX123 ou XXXXX-123
    à
    XXXXX_V123

    2/la boucle Dir est la bonne ainsi que la procédure Name qui fera le boulot
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut.

    Je pense que dans ce cas-ci, les regex peuvent être d'une aide appréciable. Un expression rationnelle permet de comparer une chaine de caractères à un motif générique et donc de formaliser la "syntaxe" d'une chaine. De plus, les regex permettent de capturer des sous-chaines correspondant à des sous-motifs et de les remplacer, les permuter ou les supprimer.

    Ici, on va travailler avec deux regexp. La première pour déterminer si le nom du fichier correspond au motif( i.e. est formalisé), la seconde pour recréer le nom formalisé du fichier lorsqu'il ne l'est pas. Je précise que je ne suis pas un expert des expressions régulières, et il y a donc peut-être plus direct comme approche.

    Pour l'approche, j'ai coché la référence Microsoft VBScript Regular Expressions 5.5. On pourrait travailler sans mais en se privant alors de l'aide à la saisie. On pourrait formaliser la numérotation pour qu'elle tienne sur x caractères (V001, V045, V123, ...).



    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Sub Test()
      Dim RegEx As VBScript_RegExp_55.RegExp
      Dim Matches As VBScript_RegExp_55.MatchCollection
      Dim Match As VBScript_RegExp_55.Match
      Dim Filename As String
      Dim Result As String
      Dim path As String
      Dim Temp As String
     
      path = "c:\data\temp\mina\"
      Set RegEx = New VBScript_RegExp_55.RegExp
      Filename = Dir(path & "*.*")
      Do While Filename <> ""
        Temp = Replace(Filename, "-", "_")
        RegEx.Pattern = "^(.+)(_V[0-9]+)\.(.+)$" ' Teste si le nom est formalisé
        If Not RegEx.Test(Temp) Then
          RegEx.Pattern = "^([^0-9|\.|_]+)_*([0-9]*)\.(.+)$" ' Découpe le nom pour récupérer les parties à réassembler en excluant le _
          Set Matches = RegEx.Execute(Temp)
          If (Matches(0).SubMatches(1)) = "" Then
            Result = "c:\data\temp\mina\" & RegEx.Replace(Temp, "$1_V1.$3") ' réassemble avec les morceaux trouvés et V1 car pas de numérotation
          Else
            Result = path & RegEx.Replace(Temp, "$1_V$2.$3") ' Réassemble les morceaux en insérant le _V
          End If
        Else
          Result = path & Temp
        End If
        Name path & Filename As Result
        Filename = Dir()
      Loop
    End Sub

    Bien entendu, c'est uniquement sur base de certains tests. A toi à bien définir comment le nom initial est formé. Ici, j'ai considéré qu'il n'y avait pas de chiffres dans la première partie du nom, celle qui sera placée avant le _V. Les motifs (pattern) doivent être ajustés à ta réalité

    Nom : 2021-06-24_211651.png
Affichages : 323
Taille : 35,9 Ko
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2021
    Messages : 15
    Par défaut
    Bonjour,

    Merci beaucoup pour votre aide et pour le code. Je ne connaissait pas les RedEx.
    Cependant, pour la première ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim RedEx As VBScript_RedExp_55.Exp
    J'ai une erreur de compilation :
    Type défini par l'utilisateur non défini.

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Je n'ai pas été assez clair dans mon précédent message. Avec le code que j'ai donné, la librairie VBScript Regular Expressions doit être cochée.

    Voici le même code avec une "liaison tardive" qui permet de ne pas devoir cocher la référence. La différence au niveau du codage est que l'on n'a pas l'aide à la saisie...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Sub Test()
      Dim RegEx As Object
      Dim Matches As Object
      Dim Match As Object
      Dim Filename As String
      Dim Result As String
      Dim path As String
      Dim Temp As String
     
      path = "c:\data\temp\mina\"
      Set RegEx = CreateObject("VBScript.RegExp") 'New VBScript_RegExp_55.RegExp
      Filename = Dir(path & "*.*")
      Do While Filename <> ""
        Temp = Replace(Filename, "-", "_")
        RegEx.Pattern = "^(.+)(_V[0-9]+)\.(.+)$" ' Teste si le nom est formalisé
        If Not RegEx.Test(Temp) Then
          RegEx.Pattern = "^([^0-9|\.|_]+)_*([0-9]*)\.(.+)$" ' Découpe le nom pour récupérer les parties à réassembler en excluant le _
          Set Matches = RegEx.Execute(Temp)
          If (Matches(0).SubMatches(1)) = "" Then
            Result = "c:\data\temp\mina\" & RegEx.Replace(Temp, "$1_V1.$3") ' réassemble avec les morceaux trouvés et V1 car pas de numérotation
          Else
            Result = path & RegEx.Replace(Temp, "$1_V$2.$3") ' Réassemble les morceaux en insérant le _V
          End If
        Else
          Result = path & Temp
        End If
        Name path & Filename As Result
        Filename = Dir()
      Loop
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2021
    Messages : 15
    Par défaut
    Le code est correct ( pas de message d'erreur ) mais il ne fonctionne pas, mes fichiers ne sont pas renommés...

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Comme je l'ai précisé, le motif (la structure des noms) doit être adaptée dans le code. On peut se passer des regex avec un code plus "complexe" en termes de conditions à remplir, mais dans les deux cas, il faut connaître les structures de noms de fichiers que l'on va rencontrer. Je me suis basé sur ton exemple de départ, mais il faudra probablement faire plusieurs passes en catégorisant et en regroupant les motifs.

    J'ai illustré la transformation des noms de fichiers, mais c'est à toi soit à adapter le motif, soit à nous donner plus d'infos pour que l'on puisse regrouper les noms en fonction des motifs.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  10. #10
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2021
    Messages : 15
    Par défaut
    Justment, j'ai créer un dossier test avec 3 fichiers où la syntaxe correspond à votre code, j'ai nommer Bonjour42 Lettre-2 et LettreM.

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Avec une extension? Le motif que j'ai utilisé requiert une extension. Ca s'adapte, mais je pense que les fichiers ont souvent des extensions.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  12. #12
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2021
    Messages : 15
    Par défaut
    Oui, pardon j'ai oublié de préciser. Il y a bien une extension ce sont 2 pdf et un word

  13. #13
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Mmhhh

    En fait, j'ai ajouté les commentaires après avoir publié le code, donc il y a un souci parce qu'un commentaire se termine par _ => ça crée un retour à la ligne...

    Il faut remplacer la fin du commentaire "en excluant le _" par "en excluant le underscore" (ou supprimer le commentaire). Chez moi, le code ci-dessous fonctionne avec les trois fichiers cités

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    Sub Test()
      Dim RegEx As Object
      Dim Matches As Object
      Dim Match As Object
      Dim Filename As String
      Dim Result As String
      Dim path As String
      Dim Temp As String
     
      path = "c:\data\temp\mina\"
      Set RegEx = CreateObject("VBScript.RegExp") 'New VBScript_RegExp_55.RegExp
      Filename = Dir(path & "*.*")
      Do While Filename <> ""
        Temp = Replace(Filename, "-", "_")
        RegEx.Pattern = "^(.+)(_V[0-9]+)\.(.+)$" ' Teste si le nom est formalisé
        If Not RegEx.Test(Temp) Then
          RegEx.Pattern = "^([^0-9|\.|_]+)_*([0-9]*)\.(.+)$" ' Découpe le nom pour récupérer les parties à réassembler en excluant le underscore
          Set Matches = RegEx.Execute(Temp)
          If (Matches(0).SubMatches(1)) = "" Then
            Result = "c:\data\temp\mina\" & RegEx.Replace(Temp, "$1_V1.$3") ' réassemble avec les morceaux trouvés et V1 car pas de numérotation
          Else
            Result = path & RegEx.Replace(Temp, "$1_V$2.$3") ' Réassemble les morceaux en insérant le _V
          End If
        Else
          Result = path & Temp
        End If
        Name path & Filename As Result
        Filename = Dir()
      Loop
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  14. #14
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2021
    Messages : 15
    Par défaut
    Je ne comprend pas, le code ne fonctionne toujours pas pour moi alors qu'il est juste. J'ai bien la même forme de nom, ajouté la référence et corrigé le beug du commentaire pourtant.

    j'ai aussi remplacer le c:\data\temp\mina\ par le nom de mon répertoire p:\test\

  15. #15
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Il faudrait le faire fonctionner en pas à pas (F8 quand le curseur est dans le code) pour examiner comment il travaille et les valeurs qui sont prises par les variables.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  16. #16
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2021
    Messages : 15
    Par défaut
    après la ligne de code Do While Filename <> "" il passe directement à la fin du programme.




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Sub Rename()
     
      Dim RegEx As Object
      Dim Matches As Object
      Dim Match As Object
      Dim Filename As String
      Dim Result As String
      Dim path As String
      Dim Temp As String
     
      path = "P:\Test"
      Set RegEx = CreateObject("VBScript.RegExp") 'New VBScript_RegExp_55.RegExp
      Filename = Dir(path & "*.*")
     Do While Filename <> ""
        Temp = Replace(Filename, "-", "_")
        RegEx.Pattern = "^(.+)(_V[0-9]+)\.(.+)$" ' Teste si le nom est formalisé
        If Not RegEx.Test(Temp) Then
          RegEx.Pattern = "^([^0-9|\.|_]+)_*([0-9]*)\.(.+)$" ' Découpe le nom pour récupérer les parties à réassembler en excluant le underscore
          Set Matches = RegEx.Execute(Temp)
          If (Matches(0).SubMatches(1)) = "" Then
            Result = "P:\Test" & RegEx.Replace(Temp, "$1_V1.$3") ' réassemble avec les morceaux trouvés et V1 car pas de numérotation
          Else
            Result = path & RegEx.Replace(Temp, "$1_V$2.$3") ' Réassemble les morceaux en insérant le _V
          End If
        Else
          Result = path & Temp
        End If
        Name path & Filename As Result
        Filename = Dir()
     
      Loop

  17. #17
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,

    c'est une histoire de slash

    essaie avec
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  18. #18
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Donc, c'est qu'il n'a pas trouvé de fichier dans ton dossier. Il faut donc comprendre pourquoi, et tu verras que c'est parce que le dossier est mal renseigné, et donc la concaténation (le collage) du pattern de recherche au nom du fichier n'est pas bien compris par DIR.

    Dans ton message, tu parlais de P:\Test\, mais tu n'as pas mis le \ final dans la variable Path. La ligne d'affectation doit être path = "P:\Test\"
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  19. #19
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2021
    Messages : 15
    Par défaut
    Merci, l'erreur est corrigée cette fois il saute la seconde condition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Sub Rename()
      Dim RegEx As VBScript_RegExp_55.RegExp
      Dim Matches As VBScript_RegExp_55.MatchCollection
      Dim Match As VBScript_RegExp_55.Match
      Dim Filename As String
      Dim Result As String
      Dim path As String
      Dim Temp As String
     
      path = "P:\Test\"
      Set RegEx = New VBScript_RegExp_55.RegExp
      Filename = Dir(path & "*.*")
      Do While Filename <> ""
        Temp = Replace(Filename, "-", "_")
        RegEx.Pattern = "^(.+)(_V[0-9]+)\.(.+)$" ' Teste si le nom est formalisé
        If Not RegEx.Test(Temp) Then
          RegEx.Pattern = "^([^0-9|\.|_]+)_*([0-9]*)\.(.+)$" ' Découpe le nom pour récupérer les parties à réassembler en excluant le underscore
          Set Matches = RegEx.Execute(Temp)
          If (Matches(0).SubMatches(1)) = "" Then
            Result = "P:\Test\" & RegEx.Replace(Temp, "$1_V1.$3") ' réassemble avec les morceaux trouvés et V1 car pas de numérotation
          Else
            Result = path & RegEx.Replace(Temp, "$1_V$2.$3") ' Réassemble les morceaux en insérant le _V
          End If
       Else
          Result = path & Temp
        End If
        Name path & Filename As Result
        Filename = Dir()
      Loop
    End Sub

  20. #20
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2021
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2021
    Messages : 15
    Par défaut
    Ah non ça marche ! MERCI BEAUCOUP

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [AC-2007] Lister les noms des documents des containers d'une base distante
    Par AndréPe dans le forum IHM
    Réponses: 67
    Dernier message: 04/08/2020, 22h15
  2. Parcourir les noms des onglets d'un fichier excel
    Par mouss4rs dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 21/02/2012, 11h47
  3. Réponses: 6
    Dernier message: 15/04/2009, 10h33
  4. Lire les noms des feuilles d'un fichier
    Par funkykid dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 27/05/2008, 13h56
  5. ShellListView : comment récupérer les noms des fichiers?
    Par Lolo1988 dans le forum Composants VCL
    Réponses: 1
    Dernier message: 11/12/2005, 23h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo