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 Excel}Ouvrir copier et fermer plusieurs fichiers excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 208
    Points : 86
    Points
    86
    Par défaut {VBA Excel}Ouvrir copier et fermer plusieurs fichiers excel
    Voila mon code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub recopie()
    Dim A180_PROD_1_LOT_7083004 As Workbook
    Dim fl As Worksheet
    Dim Cell As Range
        Set thomas = Workbooks.Open("C:\Documents and Settings\S8746037\Bureau\Etude\Programme Excel Stephane\JB\Archivage\A180_PROD_1_LOT_7083004.xls")
        Set fl = thomas.Worksheets("5")
        Workbooks("thomas.xls").Sheets("Feuil1").Range("A1").Value = _
          fl.Range("A14").Value
     
    End Sub
    ce code me permet d'ouvrir un fichier et de copier une cellule

    je voudrais trouver une solution pour que ce code ouvre plusieurs fichier qui ont le meme nom A180_PROD_1_LOT_7083004 mais pas le meme numero de fin (en rouge)

    et de copier la cellule A14 de tous ces fichier dans le fichier thomas a la suite
    et apres de fermer les fichiers excel

    Est ce possible de faire cette opération en caché?


    J'ai deja essayer de remplacer les numéros par des * ou des # car ils ont tous le meme nombre de numéro mais ca ne marche pas

    si vous avez une idée pour m'aiguiller

    merci d'avance

  2. #2
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    Points : 4 299
    Points
    4 299
    Par défaut
    Regarde du coté de la fonction Dir, tu peux parcourir des fichiers dans un dossier

    A c emoment la tu pourra écrire un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    dim fic as string
    fic = Dir("C:\Documents and Settings\S8746037\Bureau\Etude\Programme Excel Stephane\JB\Archivage\A180_PROD_1_LOT*.xls")
    Do Until fic = ""
    'ta procédure
    fic = Dir
    Loop
    Pour plus d'informations sur la fonction Dir, tu peux regarder dans l'aide en ligne tout cela est parfaitement expliqué et très clair

  3. #3
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 208
    Points : 86
    Points
    86
    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
    Sub compter()
    Dim fic As String
    thomas = Dir("C:\Documents and Settings\S8746037\Bureau\Etude\Programme Excel Stephane\JB\Archivage\A180_PROD_1_LOT*.xls")
    Do Until thomas = ""
    
    Set fl = thomas.Worksheets("5")
        Workbooks("thomas.xls").Sheets("Feuil1").Range("A1").Value = _
          fl.Range("A14").Value
    
    thomas = Dir
    Loop
    
    End Sub

    mais ca me marque une erreur en me disant "objet requis"

  4. #4
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Dir renvoie une String...

    Et une string n'a pas de propriété ni de collections de même qu'on ne peut pas lui appliquer une méthode.

    Autrement dit, n'a aucun sens.

  5. #5
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    Points : 4 299
    Points
    4 299
    Par défaut
    Normal, déja thomas tu l'as pas défini

    je pense que tu voulais le définir comme suit :

    t'a juste oublié de le définir

    du coup ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set fl = thomas.Worksheets("5")
    est faux car thomas n'est pas un classeur, mais un NOM de classeur, et il faut l'utiliser comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set fl = workbooks(thomas).sheets("5")
    mais fl il faut le définir auparavant tu l'as pas fait :


  6. #6
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    Points : 4 299
    Points
    4 299
    Par défaut
    Citation Envoyé par AlainTech
    Dir renvoie une String...

    Et une string n'a pas de propriété ni de collections de même qu'on ne peut pas lui appliquer une méthode.

    Autrement dit, n'a aucun sens.

    Alain, au vu de ce que tu dis, je sais que la fonction dir renvoie une string, mais est-ce qu'on peut quand meme le définir directement comme un workbook ? ou faut quand meme le définir avant, en faisant par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim w as workbook
    set w = workbooks(thomas)
    ?

  7. #7
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 208
    Points : 86
    Points
    86
    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
    Sub compter()
    Dim fic As String
    Dim fl As Worksheet
    
    fic = Dir("C:\Documents and Settings\S8746037\Bureau\Etude\Programme Excel Stephane\JB\Archivage\A180_PROD_1_LOT*.xls")
    Do Until fic = ""
    
       Set fl = Workbooks(thomas).Sheets("5")
        Workbooks("thomas.xls").Sheets("Feuil1").Range("A1").Value = _
          fl.Range("A14").Value
    
    thomas = Dir
    Loop
    
    End Sub

    ca me marque l'indice n'appartient pas a la selection
    la je suis completement perdus

  8. #8
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    Points : 4 299
    Points
    4 299
    Par défaut
    Normal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set fl = Workbooks(thomas).Sheets("5")
    thomas tu l'as définit ou ?

  9. #9
    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
    Points : 15 546
    Points
    15 546
    Par défaut
    Pour écrire ça,
    Set fl = Workbooks(thomas).Sheets("5")
    ta feuille de calculs doit se nommer "5"
    As-tu une feuille de calculs qui se nomme "5" ?

  10. #10
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 208
    Points : 86
    Points
    86
    Par défaut
    oui justement ma feuille de calcul est nommé "5"



    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 compter()
    Dim fic As String
    Dim fl As Worksheet
    Dim thomas As Worksheet
     
    fic = Dir("C:\Documents and Settings\S8746037\Bureau\Etude\Programme Excel Stephane\JB\Archivage\A180_PROD_1_LOT*.xls")
    Do Until fic = ""
     
       Set fl = Workbooks(thomas).Sheets("5")
        Workbooks("thomas.xls").Sheets("Feuil1").Range("A1").Value = _
          fl.Range("A14").Value
     
    fic = Dir
    Loop
     
    End Sub

    voila j'ai definit thomas sur l'exemple j'ai mis WorsSheets mais j'ai aussi essaye Worbooks

    mais ca me marque incompabilité de type

  11. #11
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    Points : 4 299
    Points
    4 299
    Par défaut
    Au lieu de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set fl = Workbooks(thomas).Sheets("5")
    écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set fl = Workbooks(fic).Sheets("5")
    thomas tu l'as déifnit nulle part c'est normal qu'il te trouve rien..

  12. #12
    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
    Points : 15 546
    Points
    15 546
    Par défaut
    Thomas est une feuille de calculs, pas un classeur.
    Un peu de syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim CL1 as Workbook
    Dim FL1 as Worksheet
    Set CL1 = Workbooks("NomDuClasseur.xls")
    Set FL1 = Worksheets("NomDeLaFeuille")
    que tu peux aussi écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set FL1 = CL1.Worksheets("NomDeLaFeuille")
    pour avoir la feuille "NomDeLaFeuille" du classeur "NomDuClasseur.xls"
    Mais j'ai une question : Tu l'ouvres quand ton classeur ?
    A+

  13. #13
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    Points : 4 299
    Points
    4 299
    Par défaut
    Oui, ousk a raison en plus et je l'ai meme pas vu, faut ouvrir ton classeur avant (merci Ousk, heureusement que t'arrive )

    la fonction Dir ne t'ouvre pas le classeur, elle t'aide juste a trouver le nomd e ton classeur

  14. #14
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 208
    Points : 86
    Points
    86
    Par défaut
    d'accord

    moi je pensais que la fonction dir ouvrais le classeur

    ben justement je ne l'ouvre pas
    a aucun moment



    ce que je voudrais c'est que ma macro comme la premiere que j'ai poste
    face la meme fonction mais avec une boucle qui ouvre tous les classeurs la meme cellule dans ces classeurs et ensuite ferme ces classeurs


    et c'est sur ce probleme que je bloque

  15. #15
    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
    Points : 15 546
    Points
    15 546
    Par défaut
    Citation Envoyé par Thomas69
    d'accord

    moi je pensais que la fonction dir ouvrais le classeur

    ben justement je ne l'ouvre pas
    a aucun moment

    ce que je voudrais c'est que ma macro comme la premiere que j'ai poste
    face la meme fonction mais avec une boucle qui ouvre tous les classeurs la meme cellule dans ces classeurs et ensuite ferme ces classeurs


    et c'est sur ce probleme que je bloque
    En effet, c'est très clair... Tu fais quoi une fois qu'il a trouvé la même cellule ?
    Pour ouvrir et fermer, c'est facile avec 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
    14
    15
    16
    17
    18
    19
    20
    Sub compter()
    Dim fic As String
    Dim CL1 as Workbook, Chemin
    Dim fl As Worksheet
    'Dim thomas As Worksheet
    Chemin = "C:\Documents and Settings\S8746037\Bureau\Etude\Programme Excel Stephane\JB\Archivage\"
    fic = Dir(Chemin & "A180_PROD_1_LOT*.xls")
    Do Until fic = ""
         Set CL1 = Workbooks.Open Filename:=Chemin & fic
         DoEvents
         Set fl = CL1.Worksheets("5")
         'Workbooks("thomas.xls").Sheets("Feuil1").Range("A1").Value = _
         fl.Range("A14").Value
          fic = Dir
         CL1.Close True 'si tu enregistres le fichier ouvert -> Sinon c'est False
         DoEvents 
    Loop
    Set CL1 = NoThing
    Set fl = Nothing
    End Sub
    Ce que j'ai mis en remarque c'est ce que je n'ai pas compris
    Thomas est un classeur ou une feuille de calculs ?
    Dans quel fichier places-tu "Range("A14").Value" et où ? Là tu places la donnée sur la même cellule, la dernière remplace la précédente, en admettant que le reste du code soit correct...
    Tu dis
    A+

  16. #16
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 208
    Points : 86
    Points
    86
    Par défaut
    Thomas est un classeur ou une feuille de calculs ?
    Thomas est un classeur je pensais que tu avais compris quand je l'est definit par workbook

    Dans quel fichier places-tu "Range("A14").Value" et où ? Là tu places la donnée sur la même cellule, la dernière remplace la précédente, en admettant que le reste du code soit correct...
    je copie la cellule A14 de la feuille 5 dans mon classeur Thomas feuil1 dans la cellule A1 pour commencer et les autres a la suitre a2;a3;a4.......


    voila en esperant etre plus claire


    J'ai essayer le 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
    19
    20
    Sub compter()
    Dim fic As String
    Dim CL1 As Workbook, Chemin
    Dim fl As Worksheet
    'Dim thomas As Worksheet
    Chemin = "C:\Documents and Settings\S8746037\Bureau\Etude\Programme Excel Stephane\JB\Archivage\"
    fic = Dir(Chemin & "A180_PROD_1_LOT*.xls")
    Do Until fic = ""
         Set CL1 = Workbooks.Open Filename:=Chemin & fic
         DoEvents
         Set fl = CL1.Worksheets("5")
         'Workbooks("thomas.xls").Sheets("Feuil1").Range("A1").Value = _
         fl.Range("A14").Value
          fic = Dir
         CL1.Close True 'si tu enregistres le fichier ouvert -> Sinon c'est False
         DoEvents
    Loop
    Set CL1 = Nothing
    Set fl = Nothing
    End Sub
    par contre il y une erreur de syntaxe

  17. #17
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 208
    Points : 86
    Points
    86
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
         Set CL1 = Workbooks.Open.Filename = "Chemin & fic"
    j'ai retape le code
    maintenant ca m'a'affiche

    Argument non facultatif

  18. #18
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    Points : 4 299
    Points
    4 299
    Par défaut
    Citation Envoyé par Thomas69
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
         Set CL1 = Workbooks.Open.Filename = "Chemin & fic"
    j'ai retape le code
    maintenant ca m'a'affiche

    Argument non facultatif

    Essaye ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      Set CL1 = Workbooks.Open(Chemin & fic)

  19. #19
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 208
    Points : 86
    Points
    86
    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
    Sub compter()
    Dim fic As String
    Dim CL1 As Workbook, Chemin
    Dim fl As Worksheet
    'Dim thomas As Worksheet
    Chemin = "C:\Documents and Settings\S8746037\Bureau\Etude\Programme Excel Stephane\JB\Archivage\"
    fic = Dir(Chemin & "A180_PROD_1_LOT*.xls")
    Do Until fic = ""
         Set CL1 = Workbooks.Open(Chemin & fic)
         DoEvents
         Set fl = CL1.Worksheets("5")
         Workbooks("thomas.xls").Sheets("5").Range("A1").Value = _
         fl.Range("A14").Value
          fic = Dir
         CL1.Close True 'si tu enregistres le fichier ouvert -> Sinon c'est False
         DoEvents
    Loop
    Set CL1 = Nothing
    Set fl = Nothing
    End Sub
    j'ai fait ta modification illight
    ca marche pas tout as fait

    on recopie seulement la valeur du 1er classeur pas des autres

  20. #20
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Points : 24 327
    Points
    24 327
    Par défaut
    Euh, Thomas69...

    Tu ne chercherais pas un peu par toi-même au lieu de venir nous poster chaque erreur que tu rencontres?

    Utilises-tu l'aide de temps en temps?

    On peut te donner des pistes de recherches mais pas écrire tout ton code pour toi.

    Un coup de F1 sur Dir et Open aurait dû te mettre sur la voie pour tes erreurs précédentes.

    Pour celle-ci, fais du pas à pas et regarde pourquoi tu ne traites qu'un fichier.

    Un petit coup de pouce, parce que je suis dans un bon jour:
    Tu n'as pas l'impression d'écrire les valeurs de tous tes fichiers au même endroit?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2010] Tableau Excel réalisant la synthèse de plusieurs fichiers Excel
    Par Phil_57 dans le forum Excel
    Réponses: 8
    Dernier message: 05/10/2014, 00h00
  2. [XL-2010] Macro pour Ouvrir un fichier Excel a partir d'un autre fichier Excel
    Par jérémyp8 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/06/2013, 13h27
  3. Réponses: 4
    Dernier message: 27/06/2013, 08h09
  4. [XL-2010] Ouverture d'un fichier Excel au lancement d'un autre fichier Excel
    Par shakapouet dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 27/07/2012, 14h04
  5. [VBA-E]une macro unique pour plusieurs fichiers excel
    Par fanchic29 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/04/2006, 16h20

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