Macro : Activer un fichier en utilisant le début de son nom

Bonjour

Comment puis-je, dans une macro, activer automatiquement un fichier en utilisant uniquement le début de son nom.

Exemple :

Windows("Test1.xls").Activate active Test1

Windows("Test2.xls").Activate active Test2

Existe-il un caractère ( * ou % )ou une commande qui permettrait d'activer le fichier "Test" indépendamment du n° 1 ou 2.

Merci de votre aide

Cordialement

Bertrand

Bonjour,

Il est possible d'activer automatiquement si on remplace le chiffre par une variable.

exemple si "i" est la variable

Windows("Test" & i & ".xls").Activate

Lorsque i vaudra 1, ce sera Test1 et ainsi de suite.

Maintenant faut éviter les "activate" car excel permet de lire d'un fichier vers l'autre sans l'activer. Le tout est de bien déclarer les noms dans le code. A voir avec l'application car mom commentaire n'est qu'un conseil qui ne peut être confirmé que si 'lon connait le problème complet.

Amicalement

Merci de ta réponse, mais il faut effectivement exposer complètement le sujet

J'extrais, via un extracteur SQL, 4 fichiers nommés automatiquement et dont le début des noms commencent toujours pareil mais dont la fin varie avec la date du jour au format AAAAMMJJ.

Chacun des 4 fichiers porte donc un nom différent par jour.

Je veux copier ces fichiers (en partie ou totalement) dans 4 onglets différents d'un 5° fichier via une macro.

Si je retiens ta solution, la valeur de la variable i serait donc aujourd'hui 20110502.

Si on peut la pré-déterminer automatiquement dans la macro, j'ai résolu mon problême.

Par ailleurs, je n'ai jamais ouverts en même temps 2 fichiers qui commencent par le même nom.

Un autre solution pourrait donc être de ne prendre en compte que le début du nom des fichiers (par exemple les 10 premiers caractères en ignorant les suivants).

Merci

Bertrand

re,

Si je retiens ta solution, la valeur de la variable i serait donc aujourd'hui 20110502.

Cela se pourrait oui.

Hormis la date en fin de nom de fichier, quel est le nom exact du fichier ?

Je suppose que tu l'ouvres manuellement et ce 1 par 1 puis tu veux copier la feuille dans le 5 eme fichier. Si oui, quel est le nom de la feuille à copier ?

A te relire

Bonsoir

Je lance successivement 4 requêtes qui me donnent 4 fichiers Excel ouverts en même temps dont les noms sont aujourd'hui :

M2_TO_DATE_REQUIREMENT_(BAD)_20110502.XLS

M2_LINKS_20110502.XLS

M2_INVENTORIES_20110502.XLS

M2_ORDERS_20110502.XLS

Puis j'ouvre le 5° fichier de compilation de toutes ces données.

Le but est de transférer automatiquement à l'ouverture du 5° fichier les données des 4 premiers fichiers dans 4 onglets (déjà existants) du 5°

Ma demande est donc que ma macro fonctionne toujours, en m'affranchissant des 8 derniers caractères du nom des 4 fichiers d'extraction.

Cordialement

Bertrand

re

en m'affranchissant des 8 derniers caractères du nom des 4 fichiers d'extraction.

Il y a une raison particulière à cela ? Les copies se font vers une feuille générale ou des feuilles comportant le même nom que le fichier ?

Attention aussi si tu fais cela à l'ouverture de manière automatique car à chaque ouverture de ton 5ieme fichier, le code exécutera le code en question.

A te relire

Les 4 copies se font vers 4 onglet déjà existants d'un 5° fichier

Ce 5° fichier est un indicateur quotidien.

Pour le mettre à jour, je clique sur un bouton (situé sur ce 5° fichier) qui déclenche une macro qui traite les données des 4 fichiers d'extraction que j'ai copiées dans les 4 onglets de ce 5° fichier.

Aujourd'hui, je copie manuellement les données des 4 fichiers d'extraction dans mon 5°, en remplacement des données de la veille.

Je souhaite ne plus copier manuellement les données des 4 fichiers d'extraction dans mon 5° fichier.

Mon problème est que le nom de ces 4 fichiers change tous les jours.

Il faut donc que la macro aille chercher les données des 4 fichiers d'extraction en faisant abstraction de la fin du nom (le début étant toujours le même).

Suis-je plus clair ?

Cdt

Bertrand

indicateur

Re,

Merci de ces explications bien claires

Pour le mettre à jour, je clique sur un bouton (situé sur ce 5° fichier)

C'est mieux de faire cela plutôt que de faire le transfère automatiquement à l'ouverture du fichier 5 comme tu le précisais avant.

Le fait que ton nom change chaque jour ne gêne pas puisque je vois maintenant le nom des onglets qui est repris dans le nom de fichier. Juste pour confirmer dans le fichier 5 le nom onglet est bien BAD ou est M2_TO_DATE_REQUIREMENT_(BAD) ?

Je suppose que la structure des 4 fichiers correspond à la structure de la feuille concernée dans le fichier 5.

A te relire

Bonsoir Dan

En fait c'est plutôt l'inverse : le nom des onglets peut (si nécessaire) reprendre le nom des fichiers d'extraction.

Je n'ai pas le choix du nom des fichiers d'extraction (......sinon je n'aurais pas de problème) mais je peux choisir ce que je veux comme nom pour les onglets.

Actuellement les onglet sont en français mais je peux mettre au choix

M2_TO_DATE_REQUIREMENT_(BAD) ou BAD ou Besoins

M2_LINKS ou LINKS ou Liens

M2_INVENTORIES ou INVENTORIES ou Stocks

M2_ORDERS ou ORDERS ou Ordres

Pour la structure, là encore, je reprends dans le fichier 5, la structure des 4 fichiers d'extraction par un simple copier-coller.

La macro se charge de faire le tri dans toutes ces données.

Cdt

Bertrand

Re,

Voici un code à essayer et à associer avec ton bouton

Sub test()
'Dan pour legrandb
Dim wb As Workbook
For Each wb In Workbooks
    If Workbooks.Count = 1 Then MsgBox "les fichiers M2... à transférer ne sont pas ouverts !!"
    If wb.Name <> ThisWorkbook.Name Then
        On Error Resume Next
        Select Case Left(wb.Name, Len(wb.Name) - 13)

        Case Is = UCase("M2_TO_DATE_REQUIREMENT_(BAD)")
            'ici le code pour transférer les données vers onglet BAD

        Case UCase("M2_LINKS")
            'ici le code pour transférer les données vers onglet LINKS

        Case UCase("M2_INVENTORIES")
            'ici le code pour transférer les données vers onglet INVENTORIES

        Case UCase("M2_ORDERS")
            'ici le code pour transférer les données vers onglet ORDERS

        End Select
    End If
Next
End Sub

Il te faudra ajouter le code pour le transfère des données vers chaque feuille en question. Là je ne peux t'aider plus sans voir le fichier recap en question.

A ta dispo si besoin.

Amicalement

Bonsoir Dan

Bon ! Je ne suis pas un pro de VBA !!!

J'ai mis ça, mais lorsque je lance la macro "test", il ne se passe rien (?)

J'ai loupé un truc ?

Merci de ton aide

Bertrand

Sub test()

'Dan pour legrandb

Dim wb As Workbook

For Each wb In Workbooks

If Workbooks.Count = 1 Then MsgBox "les fichiers M2... à transférer ne sont pas ouverts !!"

If wb.Name <> ThisWorkbook.Name Then

On Error Resume Next

Select Case Left(wb.Name, Len(wb.Name) - 13)

Case Is = UCase("M2_TO_DATE_REQUIREMENT_(BAD)")

'ici le code pour transférer les données vers onglet BAD

Columns("A:T").Select

Selection.Copy

Sheets("BAD").Select

Range("A1").Select

ActiveSheet.Paste

Case UCase("M2_LINKS")

'ici le code pour transférer les données vers onglet LINKS

Cells.Select

Selection.Copy

Sheets("Links").Select

Range("A1").Select

ActiveSheet.Paste

Case UCase("M2_INVENTORIES")

'ici le code pour transférer les données vers onglet INVENTORIES

Cells.Select

Selection.Copy

Sheets("Inventories").Select

Range("A1").Select

ActiveSheet.Paste

Case UCase("M2_ORDERS")

'ici le code pour transférer les données vers onglet ORDERS

Cells.Select

Selection.Copy

Sheets("Orders").Select

Range("A1").Select

ActiveSheet.Paste

End Select

End If

Next

End Sub

Re,

A chaque "case", le code doit savoir dans quel fichier aller faire l'opération que tu demandes.

Exemple :

Cells.Select
Selection.Copy
Sheets("Links").Select
Range("A1").Select
ActiveSheet.Paste

Excel ne sait pas où il doit prendre l'info..

Comme je vois ce que tu veux faire je vais te donner les instructions pour adapter.

PS : Lorsque tu places un code, utilises les balises prévues et sélectionnant le code puis en cliquant sur le bouton "Code"

Amicalement

Re,

Essaie comme ceci :

Sub test()
'Dan pour legrandb
Dim wb As Workbook

For Each wb In Workbooks
    If Workbooks.Count = 1 Then MsgBox "les fichiers M2... à transférer ne sont pas ouverts !!"
    If wb.Name <> ThisWorkbook.Name Then
        On Error Resume Next
        Select Case Left(wb.Name, Len(wb.Name) - 13)

        Case Is = UCase("M2_TO_DATE_REQUIREMENT_(BAD)")
        Workbooks(wb.Name).ActiveSheet.Columns("A:T").Copy _
            ThisWorkbook.Sheets(UCase("bad")).Range("A1")

        Case UCase("M2_LINKS")
        Workbooks(wb.Name).ActiveSheet.Cells.Copy _
            ThisWorkbook.Sheets(UCase("Links")).Range("A1")

        Case UCase("M2_INVENTORIES")
        Workbooks(wb.Name).ActiveSheet.Cells.Copy _
            ThisWorkbook.Sheets(Ucase("Inventories")).Range("A1")

        Case UCase("M2_ORDERS")
        Workbooks(wb.Name).ActiveSheet.Cells.Copy _
            ThisWorkbook.Sheets(ucase("Orders")).Range("A1")

        End Select
    End If
Next
End Sub

Note que là tu copies des feuilles entières y compris les cellules vides et qu'il serait parfois plus simple de ne copier réellement les données. Mais le code sera plus conséquent bien sûr

Oublie pas de cloturer si ok

Amicalement

Désolé Dan.

J'ai mis le code sans succès.

J'ai mis la macro en pas à pas. Elle "boucle" 5 fois.

La première fois elle passe directement de la ligne

If wb.Name <> ThisWorkbook.Name Then

à

[b]End if

Next[/b]

Puis fait 4 fois la boucle en passant successivement sur chaque ligne de code commençant par

Case Is = UCase .......

mais sans passer sur les 2 lignes de code situées dessous

Au bout de la 4° boucle, on arrive à

End sub

Re,

La première fois elle passe directement de la ligne....

tant mieux

Pour le reste je ne comprends pas car j'ai tout de même testé le code avant de le poster et je n'ai aucun souci. ton code est bien placé dans le fichier 5 et ce, dans un module ??

essaie :

  • en enlevant le "on error resume next" du code pour voir où tu as une erreur.
  • vérifie le nom de tes feuilles dans ton fichier 5. Pas d'espace dans le nom des onglets. Il doit correspondre à Bad, Links, ....

sinon mets tes deux fichiers en ligne que je fasse le test en réel.

A te relire

Salut Dan

J'ai toujours le même souci.

Ci dessous :

- La liste des fichiers Excel ouverts :

nom fichiers

- Le nom des onglets du fichier dans lequel transférer les données des 4 fichiers "M2_ ...." :

nom onglets

- Le code que tu m'as transmis et que j'ai copié dans le module1 :

code

Est-ce que tu vois quelquechose qui ferait que ça bloque ?

D'autre part, je ne vois pas de "paste". après : ThisWorkbook.Sheets(UCase("BAD")).Range("A1")

Merci

Bertrand

Bonsoir

Bien que Dan aurait pu te répondre

Tes noms de fichier ne correspondent pas trop à ce que tu avais indiqué

Remplace cette ligne

Select Case Left(wb.Name, Len(wb.Name) - 13)

par celle-ci

Select Case Left(wb.Name, InStrRev(wb.Name, "_") - 1)

Bonne soirée

Ca marche !

Merci Dan pour ton aide.

Banzai, tu auras reconnu ma demande de fin février, dont j'essayais d'automatiser les transerts de données.

Cet indicateur fonctionne aujourd'hui avec 5 clics.......... c'est tout.

Merci de votre aide précieuse à tous les 2 ...........

......... à bientôt, sans doute, pour une nouvelle demande.

Bien amicalement

Bertrand

re,

Ben comme dit Banzai, tes infos mentionnaient que le fichier se terminait par une date et là je vois 3 caractères en plus ... [1]

Donc dans cette instruction Select Case Left(wb.Name, Len(wb.Name) - 13), on peut remplacer le 13 par 16.

D'autre part, je ne vois pas de "paste". après : ThisWorkbook.Sheets(UCase("BAD")).Range("A1")

Il n'y a pas besoin du "paste" car dans ce cas excel voit qu'il faut coller l'info. Ceci n'est pas valable en cas d'un "paste special" où là il faut mentionner le "paste…"

Amicalement

Rechercher des sujets similaires à "macro activer fichier utilisant debut nom"