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 :

Etrange problème sur l'import d'une Wsheet externe ! [Macro VBA]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    enquiquineur d'unparia
    Inscrit en
    Février 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : enquiquineur d'unparia

    Informations forums :
    Inscription : Février 2014
    Messages : 82
    Par défaut Etrange problème sur l'import d'une Wsheet externe ! [Macro VBA]
    Bonjour!

    J'ai peut être un petit peu trop "le nez dans le guidon" cependant je n'arrive pas à identifier mon erreur !

    Voilà, je cherche à importer une feuille particulière d'un fichier vers le miens. Lorsque ma macro s'éxécute aucun problème, mais alors que j'espérais avoir ma copie dans une feuille bien précise, ma macro préfère créer une nouvelle feuille et mettre ses résusltats dedans!
    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
     
    Sub ImportWorksheet()
     
        ' This macro will import a file into this workbook
        Worksheets(1).Select
        PathName = "G:\COMMUN SERVICES\DEV\VALVE\HALF_LIFE_3\"
        Filename = "INFO_TOP_SECRET.xls"
        TabName = "THIS_IS_NO_FAKE"
        ControlFile = "JUSTKIDDING.xls"
     
        Workbooks.Open Filename:=PathName & Filename
        Workbooks(Filename).Worksheets(TabName).Copy Before:=Workbooks(ControlFile).Worksheets(2)
     
        Workbooks(Filename).Close SaveChanges:=False
     
    End Sub

    Merci !

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    j'espérais avoir ma copie dans une feuille bien précise, ma macro préfère créer une nouvelle feuille et mettre ses résusltats dedans!
    C'est tout à fait normal dans ta ligne de code (ligne 12), tu fais une copie de feuille et pas de cellules de plus tu indiques dans l'instruction d'insérer la feuille avant la deuxième de l'autre classeur.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Expert éminent 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
    Par défaut
    C'est logique puisque tu copies la Worksheet et non son contenu (tu places la méthode Copy sur l'objet Worksheet).

    C'est un peu comme si, manuellement, tu faisais glisser un onglet d'un classeur à un autre. Ce n'est pas ça qui te permettrait de copier le contenu de ta feuille source dans un feuille existante.

    Il faudrait que tu décrives mieux ce que tu souhaites faire comme copie pour qu'il soit possible de t'orienter vers la bonne procédure mais ça devrait être quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Workbooks(Filename).Worksheets(TabName).cells.copy
    Workbooks(ControlFile).Worksheets(2).cells(1,1).PasteSpecial  XlPasteType:=xlPasteAll
    Si tu veux conserver les largeurs de colonnes, il faudra passer par Columns plutôt que par Cells.

  4. #4
    Membre confirmé
    Homme Profil pro
    enquiquineur d'unparia
    Inscrit en
    Février 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : enquiquineur d'unparia

    Informations forums :
    Inscription : Février 2014
    Messages : 82
    Par défaut
    Bonjour, et merci de ton aide!

    Et bien je souhaite copier une feuille spécifique X vers une feuille Y de mon classeur.
    (Je travaille depuis le classeur Y)
    En plus si possible j'aimerais importer une zone assez spécifique de ma feuille X, c'est à dire les colonnes A à M
    J'ai bien essayé ton code, mais comme à chaque fois, je rencontre une erreur 1004...

    Le code n'a pas évolué de façon significative depuis la dernière fois.

    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Workbooks.Open Filename:=PathName & Filename
    Workbooks(Filename).Worksheets(TabName).Range("A:M").Copy
    Workbooks(ControlFile).Worksheets(2).Range("A:M").PasteSpecial XlPasteType:=xlPasteAll
    ça ne marche pas, mais ne montre aucun signe d'erreur!
    Cependant, un petit message annexe m'embête, message concernant la quantité importante d'info dans le Presse Papier.

  5. #5
    Invité
    Invité(e)
    Par défaut Bonjour,
    test ça
    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
    Sub ImportWorksheet()
     Dim WsCible As Worksheet
     Dim WbSource As Workbook
        ' This macro will import a file into this workbook
        Set WsCible = Worksheets(1)
        PathName = "G:\COMMUN SERVICES\DEV\VALVE\HALF_LIFE_3\"
        Filename = "INFO_TOP_SECRET.xls"
        TabName = "THIS_IS_NO_FAKE"
        ControlFile = "JUSTKIDDING.xls"
     
        Set WbSource = Workbooks.Open(Filename:=PathName & Filename)
        WbSource.Worksheets(TabName).UsedRange.Copy WsCible.Range("A1")
     
      WbSource .Close SaveChanges:=False
     
    End Sub

  6. #6
    Expert éminent 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
    Par défaut
    Citation Envoyé par MonSavon Voir le message
    Et bien je souhaite copier une feuille spécifique X vers une feuille Y de mon classeur.
    (Je travaille depuis le classeur Y)
    Là, tu ne fais que répéter ce que tu as écrit dans ton premier message. Heureusement, le code que tu as écris ensuite est plus parlant.

    Si j'ai bien compris, tu comptes copier les données se trouvant dans les colonnes A à M de ta feuille TabName du classeur Filename pour le mettre remplacer les colonnes A à M du deuxième onglet du classeur ControlFile en écrasant un contenu éventuel.
    C'est bien ça ?

    J'ai bien essayé ton code, mais comme à chaque fois, je rencontre une erreur 1004...
    Comment l'as-tu inséré ?
    C'est sur cette ligne que l'erreur s'est déclenchée ?
    Il n'y avait pas un petit bout de texte avec le code d'erreur ?

    ça ne marche pas, mais ne montre aucun signe d'erreur!
    Ca, on peut dire que c'est précis comme description de problème...

    Essaye de remplacer les "Range" de ton code par des "Columns".

  7. #7
    Membre confirmé
    Homme Profil pro
    enquiquineur d'unparia
    Inscrit en
    Février 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : enquiquineur d'unparia

    Informations forums :
    Inscription : Février 2014
    Messages : 82
    Par défaut
    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
     
     
    Sub ImportWorksheet()
     
        ' This macro will import a file into this workbook
        Worksheets(1).Select
        PathName = "L:\...\...\...\"
        Filename = "YY.xls"
        TabName = "xx"
        ControlFile = "Classeur1.xls"
     
        On Error Resume Next
        Open PathName & Filename For Binary Access Read Write Lock Read Write As #1
        Close #1
        If Err.Number <> 0 Then
            Err.Clear
            MsgBox "Fichier " & Filename & "; ouvert, ou utilisé."
            GoTo fichierOuvert
        End If
     
        Workbooks.Open Filename:=PathName & Filename
        Workbooks(Filename).Worksheets(TabName).Range("A:M").Copy
        Workbooks(ControlFile).Worksheets(2).Columns("A:M").PasteSpecial XlPasteType:=xlPasteAll
        Workbooks(Filename).Close SaveChanges:=False
     
    fichierOuvert:
    End Sub

    Avec ce code, il n'y a plus d'erreurs, cependant, rien ne s'affiche sur la feuille de destination...
    Généralement l'erreur 1004 avait lieu à la ligne du "PasteSpecial".

  8. #8
    Expert éminent 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
    Par défaut
    Citation Envoyé par MonSavon Voir le message
    Avec ce code, il n'y a plus d'erreurs,
    Introduire un On Error dans le code ne fait que masquer le problème sans le résoudre et empêche d'obtenir les renseignements permettant de le résoudre. Il vaut donc mieux éviter.

    Essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        Workbooks.Open Filename:=PathName & Filename
     
        Workbooks(Filename).Worksheets(TabName).Columns("A:M").Copy
        Workbooks(ControlFile).Worksheets(2).Columns("A:M").PasteSpecial (xlPasteAll)
     
        Workbooks(Filename).Close SaveChanges:=False
     
    End Sub
    Cela dit, la solution avec un USedRange proposée par rdurupt est plus élégante et plus légère pour la quantité copiée.
    Mais elle a le défaut de ne pas limiter la copie à la colonne M (ce qui est sans conséquence si tu n'as rien au dela de cette colonne).

    Petit conseil aussi : tu devrais déclarer tes variables avec des Dim, ce serait plus propre.

  9. #9
    Membre confirmé
    Homme Profil pro
    enquiquineur d'unparia
    Inscrit en
    Février 2014
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : enquiquineur d'unparia

    Informations forums :
    Inscription : Février 2014
    Messages : 82
    Par défaut
    Problème Résolu !

    La fonction 'IsFileOpen' provient du F.A.Q.

    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
     
    Function IsFileOpen(ByVal strFic As String) As Boolean
     
        Dim fic As Integer
     
        On Error Resume Next
     
        fic = FreeFile()
        Open strFic For Input Access Read Lock Read Write As fic
     
        If Err.Number = 0 Then
            IsFileOpen = False
            Close fic
        Else
            IsFileOpen = True
        End If
    End Function
     
    Sub ImportWorksheet()
     
    ' This macro will import a file into this workbook
     
    ' Définition des variables, chemin, et fichier cible
        Dim PathName As String, Filename As String, TabName As String, ControlFile As String
     
        PathName = "L:\...\....\"
        Filename = "UUU.xls"
        TabName = "target"
        ControlFile = ActiveWorkbook.Name
     
    ' Cas où le fichier est déjà ouvert, ou utilisé, gère l'erreur et continu
        If (IsFileOpen(PathName & Filename) = True) Then GoTo fichierOuvert
     
    ' Dans le cas où le fichier n'est pas ouvert, transfert de la zone de worksheet désirée
        Workbooks.Open Filename:=PathName & Filename
        ' Utilisation et remplissage du PRESSE-PAPIER
        Workbooks(Filename).Worksheets(TabName).Columns("A:M").Copy
        Workbooks(ControlFile).Worksheets(2).Columns("A:M").PasteSpecial (xlPasteAll)
        ' On vide le P-P
        Application.CutCopyMode = False
        Workbooks(Filename).Close SaveChanges:=False
     
    fichierOuvert:
    End Sub

Discussions similaires

  1. [VB.Net] Problème sur (re)dessin d'une feuille
    Par tomnie dans le forum Windows Forms
    Réponses: 21
    Dernier message: 11/09/2006, 16h52
  2. Encore un problème sur le format d'une date!
    Par bygui dans le forum Langage
    Réponses: 1
    Dernier message: 26/06/2006, 08h41
  3. problème sur l'enregistrement d'une instance
    Par Génie dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 12/05/2006, 10h48
  4. Problème sur export import fromuser touser
    Par tomsawyer dans le forum Oracle
    Réponses: 3
    Dernier message: 19/12/2005, 11h15
  5. Problème sur la réalisation d'une requête
    Par soso78 dans le forum Access
    Réponses: 1
    Dernier message: 06/10/2005, 13h17

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