Macro qui insère le nom de Fichier [Résolu/Fermé]

Signaler
Messages postés
7
Date d'inscription
samedi 2 mars 2013
Statut
Membre
Dernière intervention
9 mars 2013
-
Messages postés
7
Date d'inscription
samedi 2 mars 2013
Statut
Membre
Dernière intervention
9 mars 2013
-
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

Messages postés
13026
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
13 juin 2021
2 201
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
Messages postés
7
Date d'inscription
samedi 2 mars 2013
Statut
Membre
Dernière intervention
9 mars 2013

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.
Messages postés
7
Date d'inscription
samedi 2 mars 2013
Statut
Membre
Dernière intervention
9 mars 2013

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.
Messages postés
13026
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
13 juin 2021
2 201
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+
Messages postés
7
Date d'inscription
samedi 2 mars 2013
Statut
Membre
Dernière intervention
9 mars 2013

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)
Messages postés
24105
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
13 juin 2021
6 802
Tu n'as pas vu mon post en dessous ou tu n'en as rien f... ?
eric
Messages postés
7
Date d'inscription
samedi 2 mars 2013
Statut
Membre
Dernière intervention
9 mars 2013

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.
Messages postés
24105
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
13 juin 2021
6 802
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.
Messages postés
7
Date d'inscription
samedi 2 mars 2013
Statut
Membre
Dernière intervention
9 mars 2013

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é)
Messages postés
24105
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
13 juin 2021
6 802
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
Messages postés
7
Date d'inscription
samedi 2 mars 2013
Statut
Membre
Dernière intervention
9 mars 2013

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