Macro qui insère le nom de Fichier

Résolu/Fermé
Thésard en galère Messages postés 7 Date d'inscription samedi 2 mars 2013 Statut Membre Dernière intervention 9 mars 2013 - Modifié par Thésard en galère le 2/03/2013 à 22:35
Thésard en galère Messages postés 7 Date d'inscription samedi 2 mars 2013 Statut Membre Dernière intervention 9 mars 2013 - 9 mars 2013 à 14:23
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.
A voir également:

6 réponses

via55 Messages postés 14504 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 21 décembre 2024 2 738
2 mars 2013 à 22:39
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
Thésard en galère Messages postés 7 Date d'inscription samedi 2 mars 2013 Statut Membre Dernière intervention 9 mars 2013
3 mars 2013 à 03:55
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
Thésard en galère Messages postés 7 Date d'inscription samedi 2 mars 2013 Statut Membre Dernière intervention 9 mars 2013
3 mars 2013 à 14:37
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
via55 Messages postés 14504 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 21 décembre 2024 2 738
3 mars 2013 à 20:20
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
Thésard en galère Messages postés 7 Date d'inscription samedi 2 mars 2013 Statut Membre Dernière intervention 9 mars 2013
7 mars 2013 à 21:12
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
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248
7 mars 2013 à 22:57
Tu n'as pas vu mon post en dessous ou tu n'en as rien f... ?
eric
0
Thésard en galère Messages postés 7 Date d'inscription samedi 2 mars 2013 Statut Membre Dernière intervention 9 mars 2013
8 mars 2013 à 07:28
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
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248
Modifié par eriiic le 3/03/2013 à 21:55
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
Thésard en galère Messages postés 7 Date d'inscription samedi 2 mars 2013 Statut Membre Dernière intervention 9 mars 2013
Modifié par Thésard en galère le 8/03/2013 à 15:11
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248
8 mars 2013 à 17:34
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
Thésard en galère Messages postés 7 Date d'inscription samedi 2 mars 2013 Statut Membre Dernière intervention 9 mars 2013
Modifié par Thésard en galère le 9/03/2013 à 14:24
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