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 / Coller entre 2 fichiers excel


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 17
    Points : 3
    Points
    3
    Par défaut Copier / Coller entre 2 fichiers excel
    Bonjour,

    Dans le cadre de mon travail, je suis régulièrement amené à faire des statistiques. Par exemple, on compare 2 populations sur 1 paramètre donné afin de voir s'il y a une différence significative ou non entre les deux populations. Pour cela on utilise deux fichiers excel qui se trouvent sur le bureau (A.xls et B.xls).
    - Le fichier A contient les données des deux populations sous la forme d'un tableau de 9 colonnes (A à I) et de 22 lignes. La ligne 11 sert de séparateur entre les 2 populations. La ligne 22 contiendra les résultats de nos statistiques généré par le fichier B.
    - Le fichier B contient une formule statistique relativement complexe.

    Pour faire les statistiques, il y a tout un travail de copier/coller à effectuer entre les fichier A et B qui est assez répétitif et fastidieux. Je voulais voir avec vous s'il était possible d'automatiser la procédure via une macro.

    En pratique, Les valeurs comprises entre les cellules A1 et A10 du fichier A sont copiées et collées dans la colonne D du fichier B, à partir de la cellule D2 (verticalement). On fait de même avec la population 2, les valeurs comprises entre les cellules A12 à A21 du fichier A sont copiées et collées dans la colonne E du fichier B, à partir de la cellule E2 (verticalement). Dans la cellule A25 du fichier B se trouve un formule qui va générer une valeur qui dépendra des données collées dans les colonnes D et E. Une fois que cette valeur est générée, on copie la valeur de la cellule A25 (et non la formule) qu'on colle dans la cellule A22 du fichier A. Si la valeur d'une cellule de la ligne 22 est "p>0.05" remplacer alors la valeur de la cellule par "NS" en noir gras.
    On procède de la même façon pour les autres colonnes du fichier A (B à I). Au final, toute les cellules de la lignes 22 du tableau seront pleines. En fin de macro, le fichier A reste ouvert, le fichier B se ferme automatiquement, sans enregistrer les modifications qu'on a pu lui apporter lors de l'exécution de la macro.

    J'espère avoir été clair, merci pour votre aide.

    Fichier A :


    Fichier B :


    A bientôt.

  2. #2
    Membre chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut
    Bonjour,
    voici un code qui devrait faire ce que tu as expliqué, mais il faut que les deux classeurs soient ouvert avant de lancer la macro.
    A mettre dans un module Standard:
    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
    Sub copier_coller()
    Dim wkA As Workbook, wkB As Workbook
    Dim fichierA As String, fichierB As String
    Dim i As Integer
     
    fichierA = "A.xls"
    fichierB = "B.xls"
     
    Set wkA = Workbooks(fichierA)
    Set wkB = Workbooks(fichierB)
     
    With wkA.Sheets("Feuil1")
      For i = 1 To 9
       .Range(.Cells(1, i), .Cells(10, i)).Copy wkB.Sheets("Feuil1").Range("D2")
     
       .Range(.Cells(12, i), .Cells(21, i)).Copy wkB.Sheets("Feuil1").Range("E2")
     
       .Cells(22, i).Value = wkB.Sheets("Feuil1").Range("D25").Value
     
       If .Cells(22, i) = "p>0.05" Then
        .Cells(22, i).Value = "NS"
        .Cells(22, i).Font.Bold = True
       End If
     
     Next i
    End With
     
    End Sub
    Il faut bien entendu adapter le nom des fichiers et le nom des feuilles en fonction de tes classeurs.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 17
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Merci rvtoulon pour cette réponse rapide et complète. Tout marche parfaitement. J'aurai voulu apporter une légère modification à la macro. Notre tableau initial peut contenir un nombre de ligne et de colonne très variable selon les cas. Est-il possible de définir des plages de cellules pour les lignes et les colonnes. Par exemple, pour le i (colonnes), faire en sorte que la plage s'arrête lorsqu'elle rencontre une colonne vide. Et pour les lignes, ne copier que les cellules pleines dans les colonnes D2 et E2 du fichier B.

    La population 1 commence toujours à la ligne 1.
    La population 2 commence à partir d'une ligne qui est variable, cette ligne correspondra à la première ligne pleine après la dernière ligne pleine de la population 1.

    Voilà, j'espère avoir été clair. Merci pour votre aide.

    A bientôt.

  4. #4
    Membre chevronné Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Points : 2 003
    Points
    2 003
    Par défaut
    pour le i (colonnes), faire en sorte que la plage s'arrête lorsqu'elle rencontre une colonne vide
    adapte le code avec ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With wkA.Sheets("Feuil1")
      dercolon = .Columns(.Columns.Count).End(xlToLeft).Column
      For i = 1 To dercolon
    pour :
    La population 2 commence à partir d'une ligne qui est variable, cette ligne correspondra à la première ligne pleine après la dernière ligne pleine de la population 1.
    1) Combien peut-il y avoir de ligne vide entre ces deux lignes?
    2) A quel ligne s'arrête population 2 ? Est-ce un ligne fixe ou Aléatoire?

    pour le 1) fait une recherche dans l'aide vba (F1) sur "range.end"

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 17
    Points : 3
    Points
    3
    Par défaut
    Bonjour rvtoulon,

    1/ Concernant le point 1, j’ai modifié le code en suivant tes indications, mais je n’ai malheureusement pas réussi à obtenir ce que je souhaitais. En effet, la macro semble vouloir coller seulement les valeurs de la ligne 1 du fichier A dans le Colonne D du fichier B en omettant les autres valeurs de la population 1. Rien n’est collé en dessous de la cellule D2 du fichier B. Je n’arrive pas à solutionner le problème.

    2/ En fait tout cela dépend de l’effectif de la population B étudié. On peut donc dire que la population 2 s’arrête à une ligne aléatoire. Dans notre exemple, la population 2 s’arrête au niveau de la ligne 21, mais cela aurait très bien pu être une autre ligne. – Pour savoir à partir de quelle ligne commence la population 2, on peut déterminer un n comme étant le nombre maximum de ligne que peut avoir la population 1, connaissant n, on pourra dire que la population 2 commencera à partir de la ligne n+2.

    3/Je me demandais s’il était possible d’intégrer au début de la boucle une fonction qui permettrait d’effacer systématiquement les valeurs qui pourrait se trouver en dessous des cellules D1 et E1 du fichier B.

    Merci à bientôt !

    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
    Sub copier_coller()
    Dim wkA As Workbook, wkB As Workbook
    Dim fichierA As String, fichierB As String
    Dim i As Integer
    Dim Plage As Range
     
    fichierA = "A.xls"
    fichierB = "B.xls"
     
    Set wkA = Workbooks(fichierA)
    Set wkB = Workbooks(fichierB)
     
     
    With wkA.Sheets("Feuil1")
      dercolon = .Columns(.Columns.Count).End(xlToLeft).Column
      For i = 1 To dercolon
     
    Set Plage = .Range(.Cells(1, i), .Cells(.Rows.Count, i).End(xlDown))
    wkB.Sheets("B").Range("D2").Value = Plage.Value
     
     
       .Range(.Cells(12, i), .Cells(21, i)).Copy wkB.Sheets("Feuil1").Range("E2")
     
       .Cells(22, i).Value = wkB.Sheets("Feuil1").Range("D25").Value
     
       If .Cells(22, i) = "p>0.05" Then
        .Cells(22, i).Value = "NS"
        .Cells(22, i).Font.Bold = True
       End If
     
     Next i
    End With
     
    End Sub

Discussions similaires

  1. [XL-2010] Copier/coller Entre deux classeurs excel VBA
    Par Benjen dans le forum Excel
    Réponses: 11
    Dernier message: 19/09/2014, 15h58
  2. [XL-97] Copier coller d'un fichier Excel '.xlsm' vers un fichier .csv
    Par TraderAS dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/03/2013, 12h18
  3. Copier coller entre deux fichiers excel par macro
    Par miss-o-21 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/11/2009, 14h45
  4. Réponses: 1
    Dernier message: 21/05/2009, 12h38
  5. boucle avec copier coller dans un fichier excel
    Par Chalu_C_Momo dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 20/11/2008, 16h45

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