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

Macros et VBA Excel Discussion :

[VBA-E]Simplifier avec des instances


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Par défaut [VBA-E]Simplifier avec des instances
    Bonjour,

    Pour des raisons de souplesse et de lecture de mon programme j'ai instancie toutes les worksheets que j'utilise dans mon code dans une procedure a part (comme ca si les noms changent, et ils vont changer, une seule procedure a modifier). Les chemins viennent de Application.GetOpenFilename.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Sub subSetFilesAndSheets()
     
    ''''open file and set workbooks
    Set wbModel = Workbooks.Open(ModelPath, 0, True)
        ChDir WorkingFolder
        ProgressForm.lblOpenModel.Caption = "Done"
        ProgressForm.Repaint
    Set wbLogistic = Workbooks.Open(LogisticPath, 0, True)
        ProgressForm.lblOpenLogistic.Caption = "Done"
        ProgressForm.Repaint
    Set wbQuality = Workbooks.Open(QualityPath, 0, True)
        ProgressForm.lblOpenQuality.Caption = "Done"
        ProgressForm.Repaint
    Set wbPurchasing = Workbooks.Open(PurchasingPath, 0, True)
        ProgressForm.lblOpenPurchasing.Caption = "Done"
        ProgressForm.Repaint
     
    ''''set model sheets
    Set wsModelSynthesis = wbModel.Sheets("Synthesis")
    Set wsModelLogistic = wbModel.Sheets("Logistics")
    Set wsModelQuality = wbModel.Sheets("Quality")
    Set wsModelPurchasing = wbModel.Sheets("Purchasing")
     
    ''''set program sheets
    Set wsNoQuality = ThisWorkbook.Sheets("No quality data")
    Set wsNoPurchasing = ThisWorkbook.Sheets("No purchasing data")
    Set wsTempPurchasing = ThisWorkbook.Sheets("Temp purchasing data")
     
    ''''set sources sheets
    Set wsSourceLogistic = wbLogistic.Sheets("Analiza")
     
    Set wsSourceENCR = wbQuality.Sheets("ENCR per supplier per month")
    Set wsSourceDPM = wbQuality.Sheets("DPM (e) per supplier")
    Set wsSourceQA = wbQuality.Sheets("Quality Alert per supplier")
     
    Set wsSourcePurchasing = wbPurchasing.Sheets("Sheet1")
     
    End Sub
    Comme vous voyez il y en a plein, ce que je voudrais faire c'est me passer des wb et plus generalement simplifier le programme. Or, une fois les fichiers ouverts (avec ou sans affectation des wb) si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set ws = workbooks(Chemin).Sheets("Ma sheet")
    ca ne marche pas parce qu'Excel attend le nom du fichier et pas le chemin.

    Des conseils pour simplifier tout ca ?

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    bonjour

    Les chemins viennent de Application.GetOpenFilename.
    ca ne marche pas parce qu'Excel attend le nom du fichier et pas le chemin.


    Si j'ai bien compris tu peux essayer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim Chemin As Variant
    Dim Classeur As String
     
    Chemin = Application.GetOpenFilename("Classeurs Excel (*.xls), *.xls")
    If Chemin = False Then Exit Sub
     
    MsgBox Dir(Chemin)

    michel

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Mais tu peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub ouvrir()
        Chemin = "d:\xls\liste pour fusion.xls"
        Set Ws = Workbooks.Open(Chemin).Sheets("Feuil1")
        Ws.Range("A1") = "Coucou"
    End Sub
    Tu peux aussi trouver le nom du seul fichier à partir de chemin.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Chemin = "d:\xls\liste pour fusion.xls"
    NomFich = Split(Chemin, "\")(UBound(Split(Chemin, "\")))
    Set Ws = Workbooks(NomFich).Worksheets("Feuil1")
    Ws.Range("A1") = "Coucou"
    Si j'ai bien compris ton pb

    Tu peux même faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Chemin = "d:\xls\liste pour fusion.xls"
    Set Ws = Workbooks(Split(Chemin, "\")(UBound(Split(Chemin, "\")))).Worksheets("Feuil1")
    Ws.Range("A1") = "Coucou"
    A+

  4. #4
    Membre émérite
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Par défaut
    Alors en fait j'ai les chemins avec une fonction qui fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function fctSelectFile(BoxName As String) As String
    Dim FilePath  As String
    FilePath = Application.GetOpenFilename("Excel Files (*.xls), *.xls", , BoxName) 
    If FilePath <> "False" Then
    fctSelectFile = FilePath
    Else: fctSelectFile = ""
    End If
    End Function
    Qui me retourne par exemple FilePath = "D:\mondossier\monfichier.xls" ce qui permet plus tard de l'ouvrir.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Ws = Workbooks.Open(Chemin).Sheets("Feuil1")
    Ca marche bien pour une feuille mais si je dois affecter plusieurs feuilles du meme classeur ca ne marche plus (ouverture, fermeture, reouverture...).

    Ce qu'il me faudrait donc c'est pouvoir utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Ws = Workbooks.(NomFichier).Sheets("Feuil1")
    qui ne fonctionne que si le fichier est ouvert et si l'argument "NomFichier" contient uniquement le nom du fichier sans le chemin complet.
    Split a l'air tres bien pour ca, je vais regarder et je vous dis dans quelques minutes.

  5. #5
    Membre émérite
    Inscrit en
    Avril 2007
    Messages
    667
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Avril 2007
    Messages : 667
    Par défaut
    Ca marche impeccable

    Merci a vous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Faire une formule simplifiée avec des conditions
    Par Akino974 dans le forum Conception
    Réponses: 0
    Dernier message: 29/07/2014, 14h03
  2. [VBA-E] Adaptation avec des listbox
    Par sebi78 dans le forum Macros et VBA Excel
    Réponses: 34
    Dernier message: 18/04/2007, 13h15
  3. [VBA-E]Problème avec des ToggleButton
    Par dilkas dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 05/03/2007, 11h15
  4. Réponses: 6
    Dernier message: 20/02/2007, 17h00
  5. [VBA-E] Problème avec des dates !
    Par yaya54 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 21/03/2006, 13h12

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