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 :

fermer un fichier autre que celui où se trouve la macro


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 491
    Par défaut fermer un fichier autre que celui où se trouve la macro
    Bonjour,

    Je viens vers vous pour demander une petite aide car j'ai essayé plusieurs choses mais sans résultat.

    Le code permet via un fichier excel (classeur3.xls):
    - d'ouvrir un fichier excel (fichier)
    - de copier les valeurs de ce fichier (toutes celles en dessous de la ligne en-tête)
    - de coller ces valeurs dans le 1er fichier (classeur3.xls) et ce en dessous de la dernière ligne du tableau
    - de fermer le fichier excel (fichier) où ont été copiées les valeurs

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    Sub Impoter_Bordereaux()
    '
    ' Macro1 Macro
    ' Macro enregistrée le 17/12/2009 par Nicolas Baudry
    '
    Dossier = "C:\Bordereau de visites"
     
     
        Sheets("Recherche").Select
     
        Rep = Range("A1")
        Representant = Range("F2")
        Jour = Day(Range("D5")) & "-" & Month(Range("D5")) & "-" & Year(Range("D5"))
     
        fichier = (Dossier & "\Bordereau de visites_" & Rep & "_" & Jour & ".xls")
     
     
     
        If fichier = "" Then
            MsgBox ("Il n'y a de bordereau de visites pour cette date et ce représentant")
     
        End If
     
        Workbooks.OpenText Filename:=fichier
        Range("A10").Select
     
        ActiveCell.Offset(rowOffset:=0, columnOffset:=10).Select
        Range(Selection, Selection.End(xlToLeft)).Select
        Range(Selection, Selection.End(xlToLeft)).Select
        Range(Selection, Selection.End(xlToLeft)).Select
        Range(Selection, Selection.End(xlToLeft)).Select
        Range(Selection, Selection.End(xlToLeft)).Select
        Range(Selection, Selection.End(xlToLeft)).Select
        Range(Selection, Selection.End(xlToLeft)).Select
        Range(Selection, Selection.End(xlToLeft)).Select
        Range(Selection, Selection.End(xlToLeft)).Select
        Range(Selection, Selection.End(xlDown)).Select
     
        Selection.Copy
     
        Windows("classeur3.xls").Activate
        Sheets("Bordereau de visites").Select
        Range("A9").Select
     
        Selection.End(xlDown).Select
        ActiveCell.Offset(1, 0).Select
        ActiveSheet.Paste
     
        Windows(fichier).Close False
     
     
     
    End Sub
    le problème se situe uniquement sur la dernière ligne du code - il ne veut pas fermer le fichier 'fichier'
    Erreur d'execution 9 : L'indicide n'appartient pas à la selection

    A savoir que mon code est dans un module avec comme code
    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
     
    Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" _
            (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, _
             ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    Private Declare Function GetActiveWindow Lib "user32" () As Long
    Private Const SW_SHOW = 5
     
     
     
    Public Sub OpenFindFile(Optional pFolder As String, Optional pFile As String, Optional pFindIn As String)
    Call ShellExecute(GetActiveWindow, "find", pFolder, vbNullString, vbNullString, SW_SHOW)
    If pFile <> "" Then
        SendKeys pFile, True
    End If
    If pFindIn <> "" Then
        SendKeys "{TAB}" & pFindIn, True
    End If
    End Sub
    Je pense que c tout simple mais je bloque par manque d'expérience

    Est-ce que qq1 peux m'aider ?

    Merci par avance

    Liop

  2. #2
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    Tu peux essayer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim wbk as excel.workbook
    ...
    Set wbk = application.workbooks.opentext(...)
    ...
    wbk.Close false
    ...
    Set wbk = nothing
    PGZ

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 491
    Par défaut
    désolé mais là je suis perdu ?

  4. #4
    Membre Expert Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Par défaut
    bonjour liop49 pgz le forum essai comme cela si j ai compris

    ton code.....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Selection.Copy
     
        Windows("classeur3.xls").Activate
        Sheets("Bordereau de visites").Select
        Range("A9").Select
     
        Selection.End(xlDown).Select
        ActiveCell.Offset(1, 0).Select
        ActiveSheet.Paste
     
    Windows("fichier.xls").Activate
      ActiveWindow.Close
    end sub
    ps tu met bien extension .xls?? autrement
    Windows("fichier.xls").Close False devrait suffire

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 491
    Par défaut
    @laeticia : nan cela ne change rien

    et je ne mets pas .xls car fichier est définie plus haut en fonction de différentes variables



    Faut-il que je déclare "fichier" qq part ?

  6. #6
    Membre Expert Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 403
    Par défaut
    Salut,
    la solution de PGZ est impec.

    j'essaie de t'expliquer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim wbk as excel.workbook
    a mettre en haut de ta sub Impoter...
    NB : tu ne déclares pas tes variables. Très mauvaise habitude....

    a mettre à la place de ton Workbooks.OpenText Filename:=fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set wbk = application.Workbooks.OpenText Filename:=fichier
    a mettre à la place de ton windows(fichier).close
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    wbk.Close false  
    Set wbk = nothing


    cela devrait fonctionner.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 491
    Par défaut
    je viens de faire un test

    en mettant en dur le fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Windows("Bordereau de visites_PDU_20-11-2008.xls").Activate
    ca marche


    le problème c'est que ce fichier n'est pas toujours celui-ci et c'est le début de mon code qui permet de le définir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dossier = "C:\Bordereau de visites"
     
     
        Sheets("Recherche").Select
     
        Rep = Range("A1")
        Representant = Range("F2")
        Jour = Day(Range("D5")) & "-" & Month(Range("D5")) & "-" & Year(Range("D5"))
     
        fichier = (Dossier & "\Bordereau de visites_" & Rep & "_" & Jour & ".xls")

    Qq1 peux m'aider ?


    Merci

    Liop à poil

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

Discussions similaires

  1. Sauvegarde de fichier autre que Word et Excel
    Par cfidko dans le forum VBA Access
    Réponses: 4
    Dernier message: 08/09/2007, 12h38
  2. Partager un calendrier autre que celui par défaut
    Par bong03 dans le forum Outlook
    Réponses: 9
    Dernier message: 01/08/2007, 12h07
  3. Réponses: 3
    Dernier message: 08/06/2007, 16h32
  4. Réponses: 3
    Dernier message: 18/07/2006, 11h32
  5. Réponses: 12
    Dernier message: 27/06/2005, 20h06

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