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 cellules de plusieurs fichiers et les trier automatiquement


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 23
    Points : 29
    Points
    29
    Par défaut Copier des cellules de plusieurs fichiers et les trier automatiquement
    Bonjour tout le monde !

    Je suis débutant dans ce domaine, mais j'ai pour projet de faire une macro excel 2007 visant à récupérer certaines cellules de plusieurs fichiers Excel et les copier dans le fichier Excel où est exécuté ma macro.

    J'ai récupéré le début d'un code me permettant de bien commencer.
    Cependant, je bute sur quelque chose de relativement simple c'est à dire:
    Le code récupère les données et les placent sur A1, A2, A3 ... Et du coup je ne parviens pas a les placer automatiquement ou je veux (mettons G5, G6, G7).

    Si possible, j'aimerai que les cellules que je récupère des différents fichiers soient placés dans les cellules que je désire et non pas directement sur A1, A2 et A3.

    J'ai peur d'être un peu flou, je vous propose donc le code source de la macro. Le module se présente comme ci (il est activé par un bouton placé sur la feuille Excel):

    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
     
    Sub CopierCellule()
        Range("C10").Select
        Selection.Value = "Info 1"
        Range("D10").Select
        Selection.Value = "Info 2"
        Range("E10").Select
        Selection.Value = "Info 3"
     
        Dim X As Integer, nbFichiers As Integer, Y As Integer
        Dim Tableau() As String
        Dim Direction As String
     
        Application.ScreenUpdating = False
        Direction = Dir("C:\fichiers excel\*.xls")
     
        Do While Len(Direction) > 0
            nbFichiers = nbFichiers + 1
            ReDim Preserve Tableau(1 To nbFichiers)
            Tableau(nbFichiers) = Direction
            Direction = Dir()
        Loop
     
        If nbFichiers > 0 Then
            For X = 1 To nbFichiers
                If Tableau(X) <> ThisWorkbook.Name Then
                    Y = Y + 1
                    With ActiveSheet.Cells(Y, 1)
     
                       .Formula = "='C:\fichiers excel\[" & Tableau(X) & "]Feuil1" & "'!" & "H74"
                       .Value = .Value
                       Range("A1:A20").Copy ([C11])
     
                       .Formula = "='C:\fichiers excel\[" & Tableau(X) & "]Feuil1" & "'!" & "H85"
                       .Value = .Value
                       Range("A1:A20").Copy ([D11])
     
                       .Formula = "='C:\fichiers excel\[" & Tableau(X) & "]Feuil1" & "'!" & "H89"
                       .Value = .Value
                       Range("A1:A20").Copy ([E11])
     
     
                    End With
                End If
            Next X
        End If
     
        Application.ScreenUpdating = True
    End Sub
    Ici, je prédéfinie certaines cases en leur mettant le nom Info 1, info 2, et Info 3 respectivement C10, D10 et E10. Jusque la OK

    - En dessous de C10 (Info 1), il doit y avoir la cellule H74 de tous les fichiers présents dans C:\fichiers excel\. Automatiquement, il va prendre la cellule H74 du fichier 1 dans A1, du fichier 2 dans A2 et du fichier 3 dans A3. Dans le code j'ai fais un Range("A1:A20").Copy ([C11]) pour que ces données soient copiés sur C11, C12 et C13. Je fais le même traitement pour la cellule H85 et H89 mais cela ne fonctionne pas car en effet, les cellules A1, A2 et A3 sont déjà prises (et j'ai aussi un problème si j'essaie d'effacer les cellules A*).

    Par conséquent, l'idéal serait que les données récupérés soient directement copiées dans les cellules correspondantes (donc C11, C12, et C13) plutôt qu'A1, A2 et A3...


    Est-ce que vous avez une idée pour remédier à mon problème ?
    Merci d'avance

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 23
    Points : 29
    Points
    29
    Par défaut
    Bonjour !

    Comme je ne trouve pas de solution à mon problème, j'ai essayé de faire en sorte de copier les cellules A1 (etc.) dans une autre et de la supprimer ensuite.

    Le processus est donc:
    - Cellule H74 du fichier 1 copié dans A1
    - Cellule H74 du fichier 2 copié dans A2
    - Cellule H74 du fichier 3 copié dans A3
    - Copie de A1,A2 et A3 dans C11, C12 et C13
    - Supprimer les cellules A1, A2, A3
    - recommencer le processus avec une autre cellule (après H74, H85):
    - Cellule H85 du fichier 1 copié dans A1
    - Cellule H85 du fichier 2 copié dans A2
    - Cellule H85 du fichier 3 copié dans A3
    - Copie de A1,A2 et A3 dans D11, D12 et D13
    - Supprimer les cellules A1, A2, A3

    etc ...

    Autant dire que niveau optimisation c'est moyen. Le problème est que après avoir supprimé A1 par exemple, il supprime aussi C11 !
    C'est la raison pour laquelle j'aimerai opter pour un trie automatique des cellules de mon fichier lorsque je récupère les cellules demandées des autres fichiers. Plutôt que d'essayer de les copier ...

    Et je bloque vraiment à ce stade. Si vous avez quelques idées je suis preneur. Merci

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 23
    Points : 29
    Points
    29
    Par défaut
    bon j'ai trouvé une solution je la met pour faire profiter tout le monde. C'était vraiment très simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    With ActiveSheet.Cells(Y, 1)
     
      .Formula = "='C:\fichiers excel\[" & Tableau(X) & "]Feuil1" & "'!" & "H74"
      .Range("C11").Value = .Range("A1").Value
     
      .Formula = "='C:\fichiers excel\[" & Tableau(X) & "]Feuil1" & "'!" & "H85"
      .Range("D11").Value = .Range("A1").Value
     
      .Formula = "='C:\fichiers excel\[" & Tableau(X) & "]Feuil1" & "'!" & "H89"
      .Range("E11").Value = .Range("A1").Value
     
     
    End With
    Ensuite il faut juste clear de A1 a A infini. C'est pas très propre mais ça fonctionne.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 17/03/2011, 21h42
  2. Réponses: 1
    Dernier message: 15/12/2008, 19h50
  3. Copier des cellules de 2 fichiers excels
    Par peofofo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/06/2008, 11h28
  4. copier des cellules de 2 fichiers Excel identiques
    Par Fab2008 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 25/06/2008, 23h05
  5. Macro copier des cellules d'un fichier à l'autre
    Par Tof XXX dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 12/01/2008, 13h45

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