IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Excel Discussion :

VBA: ouvrir un fichier dont le nom contient le texte de la cellule selectionnée


Sujet :

Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    technicien BE
    Inscrit en
    Mai 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : technicien BE

    Informations forums :
    Inscription : Mai 2014
    Messages : 25
    Points : 13
    Points
    13
    Par défaut VBA: ouvrir un fichier dont le nom contient le texte de la cellule selectionnée
    Bonjour,

    Depuis un fichier Excel (liste de toutes machines vendues) muni d’un bouton, faire une macro pour afficher le fichier Excel propre à la machine demandée.
    Procedure :
    Sur le fichier « liste », choisir cellule ( contenant le N° de machine)
    Faire un copier
    Utiliser le navigateur windows pour accéder au répertoire contenant le fichier excel de la machine
    Utiliser la case « rechercher » , Taper « * », coller et Taper « * ».
    L’adresse du fichier demandé apparait
    Fin de macro
    Ouvrir ce fichier

    Merci d’avance

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    En macro VBA, ça ne se traduirait pas comme ça. Ce serait plutôt :

    Utiliser la fonction Dir pour connaitre tous les fichiers du répertoire visé contenant ce nom de machine (récupéré avec un selection.value, en utilisant les symboles joker "*".
    Le mieux est de constituer ce nom dans une variable de type String

    D'après ce que je comprends, il n'y aura qu'un fichier. Donc tu récupères le nom avec Dir et tu utilises un Workbooks.Open pour l'ouvrir.

  3. #3
    Membre à l'essai
    Homme Profil pro
    technicien BE
    Inscrit en
    Mai 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : technicien BE

    Informations forums :
    Inscription : Mai 2014
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par Menhir Voir le message
    En macro VBA, ça ne se traduirait pas comme ça. Ce serait plutôt :

    Utiliser la fonction Dir pour connaitre tous les fichiers du répertoire visé contenant ce nom de machine (récupéré avec un selection.value, en utilisant les symboles joker "*".
    Le mieux est de constituer ce nom dans une variable de type String

    D'après ce que je comprends, il n'y aura qu'un fichier. Donc tu récupères le nom avec Dir et tu utilises un Workbooks.Open pour l'ouvrir.
    merci pour la reponse aussi rapide
    J'esperais le faire en faisant "enregistrer Macro" et j'ai vu que ce n'était pas possible. Alors j'ai fait appel à vous
    je me trouve trop tendre en VBA
    j'aurais besoin de quelques codes pour m'en sortir...

  4. #4
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Pour chercher un fichier dans un répertoire, c'est la fonction Dir.
    Pour récupérer une valeur dans une cellule, on utilise la propriété Value avec l'objet Cells ou Range.
    Pour pointer sur la cellule sélectionnée, on utilise Selection.
    Pour ouvrir un fichier, on utilise la méthode Open de l'objet Workbooks (au pluriel, avec un "s" à la fin).

    Regarde tous ces termes dans l'aide VBA Excel.

    Mais si vraiment tu es totalement débutant, je te conseille de récupérer un tutorial pour apprendre au moins les bases : comment définir une macro, les variables, les structures de base (If ... Then, For ... to, While, Select Case, etc.).

  5. #5
    Membre à l'essai
    Homme Profil pro
    technicien BE
    Inscrit en
    Mai 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : technicien BE

    Informations forums :
    Inscription : Mai 2014
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Bonjour et merci pour la reponse

    J'ai avancé un peu:
    Comme je suis sur Excel2007 , j'ai du activer le complement Classefilesearch


    Puis , j'ai enregistré simplement cette macro:


    Sub recherchemachine040614()
    '
    ' recherchemachine040614 Macro
    '
    '
    'Range("E464").Select ( à supprimer)
    Selection.Copy
    Application.CutCopyMode = False
    ActiveCell.FormulaR1C1 = "50630110"
    Range("E465").Select
    Workbooks.Open Filename:= _
    "N:\Diffusion\BE_vibrants\_Spécifs\Complètes\TS\TS300\TS302_50630110_MMSE_Svyotogor.xls"
    End Sub


    Mais je ne sais pas remplacer : " ActiveCell.FormulaR1C1 = "50630110" " par un paste ...



    Merci pour votre aide

    Bonne journée

  6. #6
    Membre expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 869
    Points : 3 442
    Points
    3 442
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Pour te répondre j'ai besoin de savoir si tes classeurs a ouvrir sont tous dans :
    N:\Diffusion\BE_vibrants\_Spécifs\Complètes\TS\TS300\

    sinon dans quel(s) dossiers sont-ils ?

    @ bientôt

  7. #7
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par gaby12 Voir le message
    Comme je suis sur Excel2007 , j'ai du activer le complement Classefilesearch
    Etant donné ce qu'il y a dans ton code, je ne vois pas l'utilité de ce complément.

    'Range("E464").Select ( à supprimer)
    Selection.Copy
    Ca, je suppose que ça vient de l'enregistreur de macros, non ?
    Il est plus simple d'écrire :
    Les Select, moins on en utilise, mieux on se porte.

    Application.CutCopyMode = False
    Je ne comprends pas pourquoi tu fais un Copy et que tu l'annules juste après sans avoir fait de coller.

    ActiveCell.FormulaR1C1 = "50630110"
    Ta cellule E464, c'était la source ou la destination de ta copie ? Le fait que tu fasses dessus un Copy laisse penser que c'est la source et le fait que tu y mette une formule laisse penser que c'est la destination.

    Je ne comprends pas non plus pourquoi tu utilises la propriété FormulaR1C1 alors que tu ne mets dans cette cellule qu'une valeur et non une formule.
    Pour mettre une simple valeur dans une cellule, on utilise la propriété Value.
    Range("E465").Select
    Workbooks.Open Filename:= "N:\Diffusion\BE_vibrants\_Spécifs\Complètes\TS\TS300\TS302_50630110_MMSE_Svyotogor.xls"
    Là, je ne comprends pas du tout ce que tu veux faire.

    Mais je ne sais pas remplacer : " ActiveCell.FormulaR1C1 = "50630110" " par un paste ...
    Voir la méthode PasteSpecial de l'objet Range dans l'aide VBA.

  8. #8
    Membre à l'essai
    Homme Profil pro
    technicien BE
    Inscrit en
    Mai 2014
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : technicien BE

    Informations forums :
    Inscription : Mai 2014
    Messages : 25
    Points : 13
    Points
    13
    Par défaut
    Reponse à la question de Igloobel:


    Merci d'abord

    Pour être précis, tous les fichiers Excel de chaque machine sont dans ce repertoire

    N:\Diffusion\BE_vibrants\_Spécifs\Complètes\

    il y a de multiples sous repertoires correspondant à des types de machines divisés par des tailles de chaque type

    la recherche ne pourra se faire qu'à ce niveau
    il n'y aura qu'une seule reponse

    @+

  9. #9
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Ouvrir un fichier en VBA, ça n'a rien de compliqué une fois qu'on connait le nom : Workbooks.Open(nom)

    En revanche, recherche un nom de fichier dans une arborescence de sous-dossier sans connaitre exactement la profondeur, c'est une autre paire de manche.

    Malheureusement, l'objet Folder de FileSystem n'a pas de méthode de recherche. Ses méthodes se limitent à Copy, Delete, Move.
    Par ses propriétés, il est possible de connaitre les fichiers ou les sous-dossiers qu'il contient : pour les fichiers s'obtiennent avec la commande Dir et les sous-dossiers (un niveau) par la propriété Subfolder.

    Je ne sais pas s'il est possible, avec VBA Excel, d'accéder à la librairie d'objets de l'explorer Windows.
    Peut-être en Express VB...

    En VBA Excel, la seule méthode que je vois pour réaliser ta recherche, c'est de peler l'arborescence des fichiers comme un oignon, en examinant chaque peau successive. Mais c'est un algorithme très complexe et je ne suis pas sûr que ce soit à ta portée vu ton niveau de développeur.

  10. #10
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Bonjour, bonjour !

    Le plus rapide est une fonction récursive utilisant la fonction Dir, mais pas vraiment à la portée d'un débutant …


    Par contre un débutant a tout le loisir de suivre le tutoriel Manipulation des fichiers en VBA

    dans lequel est abordée une fonction récursive de recherche de fichiers via FileSystemObject

    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

  11. #11
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Très intéressant comme document !!!
    Si j'avais pensé à le consulter il y a un an, ça m'aurait fait gagné pas mal de temps.

    Par contre, pour le code de recherche de fichier, il faut quand même un peu le comprendre pour l'adapter. Ce n'est pas pas simple pour un débutant mais faisable quand même avec un peu de patience et de persévérance (surtout si on prend la peine de lire tout ce qui précède au lieu de se jeter sur le code pour faire un copier/coller).

  12. #12
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut


    Normalement il n'y a rien à adapter avec le code du chapitre III-A …

    Par expérience, pour des fichiers normaux, utiliser FileSystemObject peut s'avérer bien plus lent que la fonction Dir.


    __________________________________________________________________________________________
    We are all very ignorant, what happens is that not all ignore the same things … (Albert Einstein)

Discussions similaires

  1. Ouvrir fichier dont le nom contient espace
    Par laetisam dans le forum Général Java
    Réponses: 3
    Dernier message: 15/05/2012, 10h27
  2. Ouvrir fichier dont le nom contient des parenthèses
    Par Alphonse87 dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 26/03/2010, 09h35
  3. Réponses: 3
    Dernier message: 05/12/2008, 23h14
  4. [VBA-E]ouvrir un fichier dont le nom est determiné par sa date de création
    Par olivertwist dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 17/04/2007, 17h29
  5. comment télécharger fichier dont le nom contient &
    Par issaivo dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 29/12/2006, 23h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo