Macro qui insère le nom de Fichier

Résolu
Thésard en galère Messages postés 7 Statut Membre -  
Thésard en galère Messages postés 7 Statut Membre -
Bonjour,

Je cherche à insérer le nom du Ficher excel dans une de ses propres cases.
J'ai trouvé la formule : =GAUCHE(STXT(CELLULE("nomfichier";A1);TROUVE("[";CELLULE("nomfichier";A1))+1;999);TROUVE("]";STXT(CELLULE("nomfichier";A1);TROUVE("[";CELLULE("nomfichier";A1))+1;999))-5)
Elle marche parfaitement.
Mais quand je cherche à l'insérer dans une macro, ça ne fonctionne plus car les guillemets de la formule entrent en conflit avec ceux de la macro.

Merci à tous.

6 réponses

  1. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    Bonsoir

    En VBA tout simplement

    nom = ThisWorkbook.Name
    sheets("Feuil1").Range("A1").value =nom

    pour mettre le nom en A1 de la feuille 1

    Cdlmnt
    0
    1. Thésard en galère Messages postés 7 Statut Membre
       
      Merci beaucoup. Je me doutais un peu qu'il devait y avoir plus simple, mais je ne trouvais pas.
      Merci encore, vous m'enlevez une belle épine du pied.
      0
  2. Thésard en galère Messages postés 7 Statut Membre
     
    Ceci est un bonne commande mais qui est inefficace dans mon cas.
    Je suis donc obligé de reformuler mon problème complet pour me faire comprendre.
    Mon projet est de compiler les info de fichiers sources (A.xls, B.xls, C.xls, ...) dans un fichier commun liste.xls. Et je voudrais garder la traçabilité du nom du fichier d'origine avec ses données.
    J'ai donc une macro unique dans le fichier liste.xls que j'active à partir des fichiers A ou B.xls. Dans cette macro, le nom du fichier source ne peut pas apparaître car il change à chaque fois.
    Le problème avec la commande
    nom = ThisWorkbook.Name
    sheets("Feuil1").Range("A1").value =nom
    c'est que ma macro active le fichier liste.xls et insère donc le nom liste.xls dans chaque fichier source.
    Je me doute que cela complique énormément le travail et je comprendrais que vous n'ayez pas tout ce temps à me consacrer.

    Merci à ceux qui pourront m'accorder ce temps.
    0
    1. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
       
      Bonsoir

      Je ne comprends pas tout !
      J'ai donc une macro unique dans le fichier liste.xls que j'active à partir des fichiers A ou B.xls.
      Comment la macro en Liste peut être activée à partir de A ?
      Comment la macro connait le nom des classeurs source où chercher les données ?
      ce nom est bien récupéré quelque part (dans le code ou par une Message Box)

      Sinon puisque apparement la macro copie des infos des différents classeurs source une solution de bricolage serait de mettre ma précédente macro dans chaque classeur source qui aurait ainsi son nom écrit dans une cellule d'une feuille et qui pourrait être récupéré comme les autres infos dans Liste

      A+
      0
    2. Thésard en galère Messages postés 7 Statut Membre
       
      Merci beaucoup pour votre aide.
      Mais justement, c'est ça le problème, trouver une macro qui puisse marcher pour tous les fichiers qui se présentent.
      (pour activer une macro à partir de A, j'ouvre le fichier A et le fichier liste, je clique dans une case de A puis je tape le raccourci clavier de ma macro. Ca marche, ne m'en demandez pas plus)
      0
    3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Tu n'as pas vu mon post en dessous ou tu n'en as rien f... ?
      eric
      0
    4. Thésard en galère Messages postés 7 Statut Membre
       
      Sisi, j'ai vu.
      Merci beaucoup, c'est une très belle commande.
      Je ne vous ai pas encore répondu car elle ne marche pas dans ma macro.
      Votre commande est très difficile pour moi. Je ne la comprends pas vraiment et j'ai donc du mal à la bidouiller. (désolé du temps que ça me prends, je suis débutant et débardé par ma thèse)
      J'essaie de comprendre d'où viennent les problèmes (je pense qu'il y en a 2) et je vous réponds ce week-end.
      0
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonsoir à tous,

    tu pourrais ouvrir tes fichiers dans la macro et conserver leurs noms et chemins dans une variable tableau :
    Private Sub ouvreFichiers() 
        Dim NomFichier As Variant, Filtre As String, cmpt As Long 
        Filtre = "Classeur (*.xls),*.xls,Classeur (*.xlsx),*.xlsx,Classeur (*.xlsm),*.xlsm, Fichiers texte (*.txt),*.txt, Tous les fichiers(*.*),*.*" 
        NomFichier = Application.GetOpenFilename(Filtre, 1, "Ouvrir", , True) 
        If IsArray(NomFichier) Then 
            For cmpt = LBound(NomFichier) To UBound(NomFichier) 
                If StrComp(Right(NomFichier(cmpt), 3), "txt", vbTextCompare) = 0 Then 
                    Application.Workbooks.OpenText NomFichier(cmpt) 
                ElseIf StrComp(Left(Right(NomFichier(cmpt), 3), 2), "xl", vbTextCompare) = 0 Then 
                    Application.Workbooks.Open NomFichier(cmpt) 
                End If 
            Next cmpt 
        End If 
    End Sub 

    NomFichier contient ceux que tu as ouvert, tu n'as plus qu'à boucler dessus (ou compléter celle existante)

    eric

    PS: j'ai oublié de dire : faire une sélection multiple de fichiers dans la boite de dialogue

    Jamais tu ne répondras à un mp non sollicité...
    Bon, ça c'est fait.
    0
  4. Thésard en galère Messages postés 7 Statut Membre
     
    Merci encore pour cette macro.
    Comme je vous le disais, j'ai pas mal tourné autours et il y a un truc qui bugue mais je ne trouve pas quoi.
    Mes fichiers A.xlsx, B.xlsx sont des fichiers .xlsx et sont protégés en écriture.
    J'ai donc ajouté :
        ActiveSheet.Unprotect      
        Range("A4").Value = NomFichier   
    Pour déprotéger et copier le nom du fichier (A.xlsx) dans le fichier A.
    Ensuite le reste de ma macro copie toutes les données du fichier A dans le fichier liste avec le nom du fichier :
        Cells.Select      
        Selection.Copy      
        Windows("Liste.xls").Activate      
        Sheets("Feuil2").Select      
        Cells.Select      
        ActiveSheet.Paste

    (Je sais que je pourrais simplifier, mais tant que ça marche, je ne fais pas la fine bouche)
    Je vous passe le détail de ce que j'en fais esuite car j'ai besoin l'information de certaines cellules uniquement.
    Cela marche très bien pour des fichier .xls !
    En revanche pour mes fichiers .xlsx, le fichier ne s'ouvre pas et le nom du fichier choisi se copie simplement dans mon fichier Liste.xls sans les informations qui vont avec... les mystères des compatibiltés...
    Ce bug se produit sur Excel 2003 (au boulot) ET sur Excel 2007 (chez moi).
    (Excel 2003 du boulot est capable d'ouvrir un mode de compatibilté des fichiers .xlsx)

    Autre chose qui m'embête un peu : c'est le chemin d'accès. Avoir le nom de fichier sans le chemin d'accès serait plus simple pour moi pour 2 raisons :
    Le contrôle visuel de l"origine de l'info derait plus facile.
    Je pourrais l'utiliser dans des commandes genre :
    Windows(NomFichier).Activate

    Cela dit je ne vous embête pas plus car travailler sur votre macro m'a beaucoup appris et j'ai trouvé un moyen pas très élégant mais pas trop long pour me passer de cette info (même si c'est un peu rageant de laisser l'informatique gagner).

    Merci à tous de votre aide. Merci encore, vous m'avez beaucoup appris.
    Et je garde précieusement cette macro qui me sera probablement utile à l'avenir (et qui m'aurait simplifié la vie dans le passé)
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    effectivement il y a un pb avec les xlsx que je n'avais pas testés.
    En filtrant sur 'Tous les fichiers *.* et en simplifiant ça passe mieux.
    Private Sub ouvreFichiers()
        Dim NomFichier As Variant, Filtre As String, cmpt As Long, fich() As String
        Filtre = "Tous les fichiers(*.*),*.*"
        NomFichier = Application.GetOpenFilename(Filtre, 1, "Ouvrir", , True)
        If IsArray(NomFichier) Then
            For cmpt = LBound(NomFichier) To UBound(NomFichier)
                    Application.Workbooks.Open NomFichier(cmpt)
                    fich = Split(NomFichier(cmpt), "\")
                    MsgBox fich(UBound(fich))
            Next cmpt
        End If
    End Sub

    Au passage je t'ai mis comment récupérer le nom du fichier seul.
    Tu vois...
    eric
    0
  7. Thésard en galère Messages postés 7 Statut Membre
     
    Merci merci merci
    C'est trop bien je peux faire toute ma commande exactement comme je voulais.
    C'est génial de regarder l'ordinateur travailler à ma place et tout ranger au bon endroit.
    Encore Merci !
    Ma thèse a fait un grand pas grâce à vous !
    Merci
    0