Ajouter nom de classeur inconstant en variable

Bonjour,

Pour expliquer le contexte, je dois récupérer des données depuis un classeur au nom variable MAIS la particularité est que ce fichier n'ai pas enregistré sur le PC, simplement ouvert depuis un export par mail.

Je cherche donc à affecter le nom du classeur inconstant (fichier01.xlsx, fichier02.xlsx, fichier03.xlsx...) dans une variable afin de contourner ce problème de nom qui change.

Je ne sais pas si c'est la meilleure solution mais je suis partie sur cette idée :

Dim Class1 As Workbook
Dim Class2 As Workbook
Dim nomFichier As String

nomFichier = "fichier" & ".xlsx"

Set Class1 = ThisWorkbook
Set Class2 = Workbooks(nomFichier)

La ligne Set Class2 = Workbooks(nomFichier) ne permet pas de détecter mon classeur et je ne trouve pas de solution après de multiples tentatives de bidouillages.

Merci à ceux qui pourront m'aiguiller si jamais je fais fausse route

Cdt,

Kh0uby

Bonjour,

Si je comprends bien, ton fichier de travail est déjà ouvert et un second fichier est ouvert sans que tu ne connaisses son nom ...

As-tu déjà testé :

Set Class2 =Workbooks(2)

Bonjour James,

Cette option fonctionne parfaitement, c'est même ce que j'utilisais jusqu'à maintenant.

Cependant, à terme, j'aurai un 3eme classeur ouvert dans le même cas que mon fichier01.xlsx mais avec des données différentes à extraire.

Pour résumer, dans mon classeur de travail de base je souhaite importer :

  • Les données de fichierXX.xlsx
  • Les données de fichierAutreXX.xlsx

Ces 2 fichiers étant reçu par mail tous les jours (nom qui évolue donc) afin de renseigner mon classeur de travail quotidien.

Je souhaitais donc optimiser la macro afin qu'elle puisse détecter les 2 fichiers ouverts en même temps au lieu faire l'un après l'autre.

J'espère être assez précis dans mon explication, je reste à disposition si besoin.

Cdt,

Kh0uby

Bonjour,

Vous pourriez essayer ce code :

    Dim classeurs As New Collection
    Dim classeur As Workbook
    Dim i As Integer, clé As String

    classeurs.Add ThisWorkbook, "1"
    i = 2
    For Each classeur In Workbooks
        If Not classeur Is ThisWorkbook Then clé = i: classeurs.Add classeur, clé: i = i + 1
    Next
    ' classeurs(1) représente donc le classeur où est votre code
    ' classeurs(2) et classeurs(3) représentent vos classeurs importés.

Bonjour thev,

Merci pour votre retour, sauf erreur de ma part j'ai un doute avec cette méthode pour mon besoin.

En effet, les 3 classeurs seront bien affectés aux variables :

classeurs(1) --> Classeur principal

classeurs(2) --> Classeur importé

classeurs(3) --> Second classeur importé

Cependant, dans la suite de mon code, lorsque je voudrai faire appel aux classeurs à importer et sachant que les données à récupérer sont totalement différentes, je ne vois pas comment savoir à quel classeur classeurs(2) ou classeurs(3) fera-t-il référence.

A part si je dois faire attention à l'ordre d'ouverture des classeurs pour éviter ce désagrément

Cdt,

Kh0uby

Re,

Est-ce-que tou ouvres tes fichiers dans une séquence donnée ou au hasard ... ?

Si c'est au hasard, il faut trouver une caractéristique qui permette de les différentier ... pour être en situation de faire le test nécessaire à l'identification ....

J'espère que ce n'est pas trop confus ...

Re James,

C'est une tâche vouée à être exécuter par des personnes différentes, donc j'aurai préféré que l'ordre d'ouverture n'est aucun impact sur le déroulement de la macro. C'est pas que je n'ai pas confiance hein

Donc à part le titre des classeurs, je ne vois pas d'autre option viable pour les différencier.

D'où la tentative de nomFichier = "fichier" & ".xlsx"

Enfin dans ma tête c'était le plus simple et logique en tout cas.

Re,

Tu dis

Donc à part le titre des classeurs, je ne vois pas d'autre option viable pour les différencier.

mais tu dis aussi

sachant que les données à récupérer sont totalement différentes

Donc ... une fois ouverts ... en ayant ces deux fichiers sous les yeux ... je pense que tu peux trouver une caractéristique constante de l'un ou de l'autre ... qui permette de conclure (après test) ... c'est lui ... et pas l'autre ...

Bonsoir,

Vous pourriez opérer une distinction entre vos 2 classeurs selon l'auteur, la date de création, la date de dernière modification ou le nombre de feuilles :

    auteur = classeurs(i).BuiltinDocumentProperties("Author")
    date_création = classeurs(i).BuiltinDocumentProperties("Creation Date")
    date_dernière_modif = classeurs(i).BuiltinDocumentProperties("Last save time")
    nombre_feuilles = classeurs(i).Worksheets.Count

Re,

Alors...j'ai l'impression d'être dans le pire des cas puisque en fait, dans les deux classeurs, les champs de l'entête des tableaux sont parfaitement identiques (colonnes A à Z) MAIS le contenu de ces tableaux est quant à lui différent et extrait selon un certain nombre de critère...

J'aurai donc souhaité évité de me baser sur le contenu des mes tableaux qui change et évolue tous les jours.

De plus je ne pense pas avoir le niveau pour partir sur une telle option

Si cela peut aider, je peux partager des fichiers exempts de données sensibles afin de reproduire ce cas de figure.

Cdt,

Kh0uby

[QUOTE]

Bonsoir,

Vous pourriez opérer une distinction entre vos 2 classeurs selon l'auteur, la date de création, la date de dernière modification ou le nombre de feuilles :

auteur = classeurs(i).BuiltinDocumentProperties("Author")

date_création = classeurs(i).BuiltinDocumentProperties("Creation Date")

date_dernière_modif = classeurs(i).BuiltinDocumentProperties("Last save time")

nombre_feuilles = classeurs(i).Worksheets.Count

[/QUOTE]

Thev,

Les classeurs qui me servent à compléter mon classeur de suivi sont des exports depuis un serveur interne tous les jours à la même heure et ne possèdent qu'une unique feuille pour les deux.

Tous ces critères sont donc inutilisables

RE,

Si maintenant tout est rigoureusement identique ... dans ces deux fameux fichiers ... et que rien ne peut les différentier ...

qu'est-ce-qui va faire que le traitement de l'un doit être totalement différent du traitement de l'autre ... ???

Etrange ...

J'avoue que la cohérence du raisonnement m'échappe ...

James,

Non pas tout justement, uniquement le format du tableau avec des entêtes du genre : Titre, Date, Groupe, Type...etc

On peut donc se dire, et à juste titre, que tout est identique.

Seulement, la différence se fait car il s'agit de 2 environnements distincts --> un classeur prioritaire et un classeur secondaire (dans l'idée).

Du coup dans mon classeur principal, je récupère ces 2 classeurs mais ne traite pas les données importées de la même manière par la suite.

Moi qui souhaitais faire au plus simple, je me suis embarqué dans un truc

Si vraiment il n'y a que cette méthode, j’essaierai de reprendre le sujet demain afin d'ajouter un champs qui permettra de bien distinguer mes 2 classeurs.

En tout cas, un grand merci de vous être pencher sur ma problématique mais une nuit de repos s'impose !

Cdt,

Kh0uby

Bonjour,

Il me semble que pour sortir de ce brouillard ... tu es en possession de tous les éléments ...

Bon Courage pour la suite ...

Bonjour,

Pour info, puisqu'à priori mon idée est impossible à mettre en place ; j'ai contourné la problématique (avec la méthode de Thev) en ajoutant une feuille vide lors de l'export de l'un de mes deux classeurs.

Ce n'est pas très propre mais cela fonctionne

Merci à vous deux.

Cdt,

Kh0uby

Bonjour,

Content que tu aies pu résoudre ton problème ...

Rechercher des sujets similaires à "ajouter nom classeur inconstant variable"