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 :

copier des données d'un Fichier Excel à un a autre automatiquement


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    mai 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2008
    Messages : 147
    Points : 58
    Points
    58
    Par défaut copier des données d'un Fichier Excel à un a autre automatiquement
    Bonsoir,

    Je dispose d'un très grand nombre de fichier Excel contenant des informations situées toujours au même endroit (même ligne et colonne pour une même donnée). Ces fichiers ont un nom qui commence toujours par "calcul par" et sont situés dans des dossiers différents. On va dire que ces fichiers sont les fichiers A
    Je dispose d'un autre fichier qui récupère les informations de tous ces fichiers (copiées pour le moment un à un et à la main). Chaque onglet de ce fichier à un nom de la façon suivante "moisAnnée" MMAA. Appelons le fichierB.

    Je voudrais trouver un moyen pour réaliser, à partir d'Excel, une exportation des données d'une plage d'un onglet du fichierA () et de les exporter vers une plage donnée du fichierB.

    Pour résumer, est-ce qu'il est possible :
    - de transférer automatiquement une plage d'un fichierA vers une plage d'un fichierB
    - de réaliser ce transfert dans un nouvel onglet du fichierB et lui donner un nom (à saisir dans boite message ou automatiquement)

    - et en supplément, comment supprimer des lignes Excel avec des conditions (si colonne 1 = X et colonne 2 = Y alors supprimer ligne)

    Merci d'avance de votre aide

  2. #2
    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 268
    Points
    15 268
    Par défaut
    Déjà, pour lister les fichiers d'un répertoire et de ses sous-répertoires, je te propose ça. Tu auras un filtre à ajouter afin de vérifier le début du nom commence par "calcul par" pour n'avoir que les fichiers qui t'intéressent.

    Je passe à
    et en supplément, comment supprimer des lignes Excel avec des conditions (si colonne 1 = X et colonne 2 = Y alors supprimer ligne)
    Pour faire ça, tu peux utiliser le code qui se trouve ici mais tu as une autre solution consistant à chercher la valeur X dans la colonne A dans une boucle à l'aide de Find, et de vérifier la valeur colonne 2.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub test()
        Critere1 = "X"
        Critere2 = "Y"
        With Worksheets(1).Range("A1:A" & Range("A65536").End(xlUp).Row)
            Set c = .Find(Critere1, LookIn:=xlValues, Lookat:=xlWhole, SearchDirection:=xlNext)
            If Not c Is Nothing Then
                Ad = c.Address
                Do
                    If c.Offset(0, 1) = Critere2 Then c.EntireRow.Delete
                    Set c = .Find(Critere1, LookIn:=xlValues, Lookat:=xlWhole, SearchDirection:=xlNext)
                Loop While Not c Is Nothing
            End If
        End With
    End Sub
    Déclare les variables

    Pour la copie de plage, je manque d'nfos. Lignes complètes ? Colonne complètes ? Plage à coller où ? En milieu de page ? A la suite les unes des autres ?
    Plus de détails serait un plus

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    mai 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2008
    Messages : 147
    Points : 58
    Points
    58
    Par défaut
    je viens seulement de voir ce que tu as écrit. Je vais déjà regardé ce que tu m'as donné.
    Les plages de chacun des fichiers devront être copiées à un endroit précis sûrement en F5 ou qqch comme ça. et pour chaque fichier "calcul par", une feuille différente dans le fichierB

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    mai 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2008
    Messages : 147
    Points : 58
    Points
    58
    Par défaut
    personne pour m'aider?

    Est-ce que quelqu'un sait également comment remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       With Worksheets(1).Range("E2:E1923")
    Par la même chose mais pour qu'au lieu de s'appliquer sur la feuille 1, que ça s'applique sur la feuille courante?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    mai 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2008
    Messages : 147
    Points : 58
    Points
    58
    Par défaut
    c bon, j'ai trouvé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.Range("E2:E1923")
    N'empêche qu'il n'y a toujours personne pour m'aider à copier une plage d'un fichier à un autre?

  6. #6
    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 268
    Points
    15 268
    Par défaut
    On manque de précision mais si c'est simplement pour copier la plage G5:I55 d'une feuille dans l'autre, alors tu peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Workbooks("LeBook1.xls").Worksheets("feuil1").range("G5:I55").copy _
    Workbooks("LeBook2.xls").Worksheets("feuil2").range("D2")
    Ce code copie la plage G5:I55 de feuil1, du classeur LeBook1.xls, à partir de la cellule D2 de la feuil2 du classeur LeBook2.xls

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    avril 2008
    Messages
    633
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : avril 2008
    Messages : 633
    Points : 877
    Points
    877
    Par défaut
    Bonjour

    La formulation pour copier une plage d'un fichier à un autre est celle ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Workbooks(fichier1).Sheets(Num_feuille).Range(plage).Copy _
      Workbooks(fichier2).Sheets(Num_feuille).Range("F5")
    avec fichier1 celui ou tu récupères les données et fichier2 celui ou tu les colles

    [Edit] petites corrections

    bonne journée
    Cordialement.

    N'oubliez pas de cliquer sur Résolu quand vous avez obtenu la réponse à votre question.
    Citation
    Il y a 10 sortes de gens au monde : ceux qui connaissent le binaire et les autres » - Anonyme
    Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer

  8. #8
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    bonjour,

    question: les données à récupérer sur le fichier A sont toujours les mêmes ou sont variables?
    Alleï Bonjour chez vous!

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    mai 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2008
    Messages : 147
    Points : 58
    Points
    58
    Par défaut
    Merci zyhack, je vais essayer tout de suite!!

    Sinon mayekeul; les données à récupérer dans le fichierA sont toujours de même type, dans le même onglet, mais les données commencent toujours en B3 mais la longueur est variable (de B31 à B34). En dessous, il y a des lignes vides puis d'autres données que je n'utilise pas.

  10. #10
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    je driais donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub To_B_or_not_to_B()
     
    Dim wsa As Worksheet, wsb As Worksheet
    Dim wba As Workbook, wbb As Workbook
     
        Set wba = Workbooks.Open("A")
        Set wbb = Workbooks.Open("B")
        Set wsb = wbb.Sheets.Add(After:=Sheets("X"))
        wba.Sheets("A").Range("B3").CurrentRegion.Copy
        wsb.Range("B3").PasteSpecial xlPasteAll
     
    End Sub
    sinon, on peux carrément copier toute la feuille comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Sheet1").Copy Before:=Workbooks("B").Sheets(1)
    Alleï Bonjour chez vous!

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    mai 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2008
    Messages : 147
    Points : 58
    Points
    58
    Par défaut
    je viens de me rendre compte que le fichier dans lequel je récupère les valeurs utilise une formule sur des cases qui utilisent des formules etc....
    ouskelnor, ton code fonctionne mais est-ce qu'on peut remplacer le "copy"
    par un collage spécial de valeurs????

  12. #12
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    alors, comme ça!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub To_B_or_not_to_B()
     
    Dim wsa As Worksheet, wsb As Worksheet
    Dim wba As Workbook, wbb As Workbook
     
        Set wba = Workbooks.Open("A")
        Set wbb = Workbooks.Open("B")
        Set wsb = wbb.Sheets.Add(After:=Sheets("X"))
        wba.Sheets("A").Range("B3").CurrentRegion.Copy
        wsb.Range("B3").PasteSpecial xlPasteValues
     
    End Sub
    Alleï Bonjour chez vous!

  13. #13
    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 268
    Points
    15 268
    Par défaut
    Regarde le code de Mayekeul, il a mis l'argument xlPasteAll, remplace par xlPasteValuesAndNumberFormats

    Edit
    Grillé par "lui-même" mais je mettrais plutôt xlPasteValuesAndNumberFormats que xlpastevalues

  14. #14
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    aussi
    Alleï Bonjour chez vous!

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    mai 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2008
    Messages : 147
    Points : 58
    Points
    58
    Par défaut
    on voit les pros discuter lool.
    j'essaye

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    mai 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2008
    Messages : 147
    Points : 58
    Points
    58
    Par défaut
    J'ai un p'tit pb, par quoi est-ce que je dois remplacer le "X" dans :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set wsb = wbb.Sheets.Add(After:=Sheets("X"))
    Car j'ai l'erreur suivante : "l'indice n'appartient pas à la sélection"

  17. #17
    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 268
    Points
    15 268
    Par défaut
    Tu as une feuille qui se nomme "X" ? Sinon, remplace-le par le nom de la feuille concernée

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    mai 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mai 2008
    Messages : 147
    Points : 58
    Points
    58
    Par défaut
    non mais quand je donne le nom d'une feuille existante, j'ai la même erreur

  19. #19
    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 268
    Points
    15 268
    Par défaut
    Curieux, je viens de tester ça sans erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test()
    Dim wbb As Workbook
    Dim wsb As Worksheet
    Set wbb = ActiveWorkbook
        Set wsb = wbb.Sheets.Add(After:=Sheets("feuil1"))
    End Sub
    Tu as bien laissé les déclarations mises par Mayekeul ?

  20. #20
    Membre expérimenté Avatar de mayekeul
    Inscrit en
    août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : août 2005
    Messages : 1 369
    Points : 1 665
    Points
    1 665
    Par défaut
    on peux ne rien mettre à la place d' "after"
    par défaut, elle se placera juste avant la feuille courante.
    Alleï Bonjour chez vous!

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

Discussions similaires

  1. [XL-2003] Copier des données d'un fichier Excel à un autre
    Par Banshor dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 14/05/2014, 09h15
  2. [XL-2003] Bouton pour transférer des données d'un fichier Excel vers un autre
    Par Alfred23 dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 07/09/2011, 17h46
  3. [XL-2002] Recuperer des données d'un fichier excel vers un autre
    Par labinocle81 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/08/2009, 12h36
  4. Copier des données d'une feuille excel vers plusieurs autres
    Par LeeBamboo dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 25/08/2008, 16h46
  5. Copier des données d'un fichier Excel vers des tableau Word
    Par drthodt dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 23/05/2008, 15h57

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