Lier des fichiers excel

boubou_7711 Messages postés 7 Date d'inscription samedi 16 juin 2007 Statut Membre Dernière intervention 19 juin 2007 - 16 juin 2007 à 22:09
mab2010 Messages postés 7 Date d'inscription jeudi 1 avril 2010 Statut Membre Dernière intervention 20 juillet 2010 - 13 juil. 2010 à 08:30
bonjour à tous,

je suis débutant.
J'ai 2 fichiers sous excel et je voudrais récupérer les données du premier fichier vers le 2e fichier
Mon fichier 1 : classeur1.xls
Mon fichier 2 : classeur 2.xls

Dans le classeur 2 :
je voudrais récupérer les données du classeur 1 des cellules A1,B1,C1, etc.
MAIS je veux créer pour chaque ligne du classeur 1 une nouvelle feuille dans mon classeur 2 en gardant la même mise en page que celle du classeur 2 feuille1.

Par avance, merci pour votre aide

11 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 21
17 juin 2007 à 16:07
Pour conserver la mise en page, le plus simple est de faire une copie de la feuille originale. Utilise l'enregistreur de macro, clique droit sur l'onglet dont tu veux copier la mise en page, sélectionne "Déplacer ou copier", coche "Créer une copie", choisis le fichier dans lequel tu veux effectuer la copie et la position par rapport aux feuilles existantes et clique OK. Une nouvelle feuille (Copie conforme) aura donc été ajoutée.

Bien sûr la copie inclura les données. Comme tu ne veux que conserver les entêtes, il reste à éliminer les lignes superflues.

Autre méthode,
Tu crées une procédure de mise en page qui inclut la police, les bordures, marges, ...
Et tu appelles cette procédure à chaque fois que tu crées une feuille et y copie les données d'entêtes.

Avant d'aller plus avant, tu devrais déterminer la méthode que tu veux utiliser et nous revenir, avec éventuellement un bout de code...

MPi
0
boubou_7711 Messages postés 7 Date d'inscription samedi 16 juin 2007 Statut Membre Dernière intervention 19 juin 2007
17 juin 2007 à 18:29
Merci MPi pour ton aide.
Ce n'est pas tout à fait ce que je veux mais néanmoins j'ai appris qqch de plus.

voilà le code que j'ai :

Sub Macro1()
'
    Windows("Classeur1").Activate
    Windows("Classeur2").Activate
    Sheets("Feuil1").Select
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "=[Classeur1]Feuil1!R2C1"
    Range("B2").Select
    ActiveCell.FormulaR1C1 = "=[Classeur1]Feuil1!R2C2"
    Range("D1").Select
    ActiveCell.FormulaR1C1 = "=[Classeur1]Feuil1!R2C3"
    Sheets("Feuil2").Select
    ActiveCell.FormulaR1C1 = "=[Classeur1]Feuil1!R3C1"
    Range("B2").Select
    ActiveCell.FormulaR1C1 = "=[Classeur1]Feuil1!R3C2"
    Range("D1").Select
    ActiveCell.FormulaR1C1 = "=[Classeur1]Feuil1!R3C3"
    Range("D2").Select
End Sub

Je voudrais automatiser pour toutes les lignes de mon classeur 1 cette opération car je retrouve toujours les même données
Par exemple :
je retrouve les données du classeur 1 A2,B2,C2 dans mon classeur2 fichier 1
ainsi que les données du classeur 2 A3,B3,C3 dans mon classeur2 fichier 2. Ce deuxième fichier doit avoir la même mise en page que mon fichier 1 classeur 2 et ainsi de suite.
Je pense que je dois faire une boucle, d'après ce que j'ai pu lire.... Je fais mes premiers pas. C'est pas si simple que ça.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 21
17 juin 2007 à 20:16
Avant d'aller plus loin, es-tu certain des cellules que tu sélectionnes ?
Tu sélectionnes B1, B2 et D1 de Feuil1
Puis ensuite, B2, D1 et D2 de Feuil2

Ce ne serait pas plutôt B1, B2 et B3 de chaque feuille du classeur 2 ?
ou encore A2, B2 et C2 ???

1- Si les cellules dans lesquelles tu veux copier ne suivent aucun ordre précis (ou identique), tu ne pourras pas utiliser de boucles.
2- Est-ce important de mettre des formules plutôt que des valeurs ?
3- Est-ce important de faire ça en VBA ? si oui, c'est seulement pour apprendre ?

MPi
0
boubou_7711 Messages postés 7 Date d'inscription samedi 16 juin 2007 Statut Membre Dernière intervention 19 juin 2007
17 juin 2007 à 20:56
Merci, effectivement il y a une erreur!
Dans la feuil2 j'aurais du selectionner B1 B2 ET D1 comme dans la feuil1

J'ai 3 colonnes A B C, je veux pour chaque ligne des 3 colonnes A,B,C les recopier dans mon 2e classeur avec une ligne correspondant à une feuille de mon 2e classeur.

Ex :
Classeur 1 :
A            B            C
1            2            bonjour
3            4               au revoir

Classeur 2 feuil1 je voudrais avoir
B1 :      1            D1 bonjour
B2:        2

Classeur 2 feuil 2 je voudrais avoir en gardant la même mise en page que dans ma feuil 1
B1:      3            D1: au revoir 
B2:      4

Je ne sais pas vraiment comment je dois m'y prendre car :
mon classeur 1 comporte plus de 100 lignes
il bouge régulièrement et je voudrais donc qu'il se mette à jour par la suite dans le classeur 2 en fonction des changements du classeur 1

Merci encore MPi pour tes réponses, et oui je veux bien apprendre, car je n'y connais pas gd chose :s
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 21
17 juin 2007 à 22:38
Pour faire au plus simple, disons que tu as un classeur qui se nomme Classeur2 et qui contient les feuilles "Feuil1" à "Feuil3"  (par défaut...)
On peut donc se fier aux numéros de feuilles pour copier les données et créer de nouvelles feuilles en conservant le même genre de nom... "Feuil" + un index

Pour que tout fonctionne bien, il est préférable d'ouvrir ce Classeur2 au préalable. On pourrait procéder autrement, mais pour un début, tu en auras assez de ceci, je pense...

Copie ce code dans la partie de code de ta feuille où les données se trouvent

Option Explicit

Sub Copie()  ' Procédure de départ
    Dim I As Long, nbLignes As Long
    Dim CurSheet As Worksheet, DestBook As Workbook, Fenetre As Window
    Dim Trouvé As Boolean
   
    Set CurSheet = ActiveSheet  'feuille de départ (current sheet)
   
    'Vérifier si le Classeur2 est déjà ouvert
    For Each Fenetre In Windows
        If Fenetre.Caption = "Classeur2" Then
            Trouvé = True
            Fenetre.Activate
            Set DestBook = ActiveWorkbook  'classeur de destination
            Exit For
        End If
    Next
   
    ' Si le classeur n'est pas ouvert, quitter la procédure
    If Not Trouvé Then
        MsgBox "Ouvrir le Classeur2"
        Exit Sub
    End If
   
    'retourner dans le classeur de départ et compter le nombre de lignes
    CurSheet.Activate
    nbLignes = Cells(Rows.Count, "A").End(xlUp).Row
   
    'Boucler chaque ligne
    For I = 1 To nbLignes  ' 1 ou 2 selon qu'il y a des entêtes...
        'si la feuille n'existe pas, la créer
        If Not FeuilleExist(DestBook, I) Then CreerFeuille DestBook, I
       
        'Copier les données
        DestBook.Sheets("Feuil" & I).Range("B1") = Range("A" & I)
        DestBook.Sheets("Feuil" & I).Range("B2") = Range("B" & I)
        DestBook.Sheets("Feuil" & I).Range("D1") = Range("C" & I)
    Next
   
    MsgBox "Terminé"
End Sub

Function FeuilleExist(Classeur As Workbook, Numéro As Long) As Boolean
    Dim WkSh As Worksheet
   
    'Boucler toutes les feuilles pour voir si la feuille à inscrire existe
    For Each WkSh In Classeur.Worksheets
        If WkSh.Name = "Feuil" & Numéro Then
            FeuilleExist = True
            Exit For
        End If
    Next
End Function

Sub CreerFeuille(Classeur As Workbook, Numéro As Long)
    'Ajouter une feuille et la renommer si elle n'existait pas
    Classeur.Worksheets.Add
    Classeur.ActiveSheet.Name = "Feuil" & Numéro
End Sub

MPi
0
boubou_7711 Messages postés 7 Date d'inscription samedi 16 juin 2007 Statut Membre Dernière intervention 19 juin 2007
18 juin 2007 à 22:17
Merci MPi pour ton code.
J'ai testé et hélàs je n'y suis arrivé.
A chaque fois, j'ai une pop-up qui me dit ouvrir le classeur 2 mais celui-ci est déjà ouvert.
Qu'est-ce que j'ai mal fait, ou aurais-je du faire à la place?

Par avance, merci
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 21
18 juin 2007 à 23:58
Peut-être est-ce à cause de la version sous laquelle tu travauilles (?)

Change le bout de code au début de la procédure pour
    'Vérifier si le Classeur2 est déjà ouvert
    For Each Fenetre In Windows
       Msgbox Fenetre.Caption  ' pour vérifier comment ta version affiche les Caption
        If Fenetre.Caption = "Classeur2" Then

Si le message affiche "Classeur2 .xls "
il faudrait alors ajouter cette extension, ce qui donnerait
    For Each Fenetre In Windows
        If Fenetre.Caption = "Classeur2.xls" Then

Si tu n'y arrives pas, dis-moi exactement ce qu'affiche le MsgBox que je t'ai demandé d'ajouter.

MPi
0
boubou_7711 Messages postés 7 Date d'inscription samedi 16 juin 2007 Statut Membre Dernière intervention 19 juin 2007
19 juin 2007 à 18:54
Encore merci pour les indications.

J'ai modifié le code et j'ai toujours dans les MsgBox le message suivant
classeur2.xls
puis
classeur1.xls
puis
ouvrir le classeur2 alors qu'il est ouvert:-(
0
boubou_7711 Messages postés 7 Date d'inscription samedi 16 juin 2007 Statut Membre Dernière intervention 19 juin 2007
19 juin 2007 à 21:52
ah non mea culpa! ca fonctionne MPi :-)

Est-ce que tu sais comment faire pour faire en sorte que lorsque les onglets se copie on garde la même mise en page de l'ensemble de l'onglet (par exemple :une bordure, image, ou peu importe vu que je voudrais garder la même mise en page)

Est ce que tu penses que dans cette partie :

Sub CreerFeuille(Classeur As Workbook, Numéro As Long)
    'Ajouter une feuille et la renommer si elle n'existait pas
    Classeur.Worksheets.Add
    Classeur.ActiveSheet.Name = "Feuil" & Numéro
End Sub

on puisse renommer les onglets autre que "Feuil"& Numéro et de prendre en considération pour chaque onglet une case précise du classeur 1.
Par exemple :
pour l'onglet 1 : la valeur de la case A2
pour l'onglet 2 : la valeur de la case A3

j'ai composé ça :
 On Error Resume Next
For I = 1 To n
Sheets(sht.Name).Name = Sheets(sht.Name).[A1]
Next
 
Il ne me renomme pas les feuilles du classeur 2 mais la feuille du classeur 1 et ne me prend en considération que la case A1( normal c'est ce que je lui demande... mais je sais pas faire pour lui dire de renommer l'ensemble de Ai to An).
J'ai encore du faire une bêtise, pour changer..

Par avance, merci

 
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 21
20 juin 2007 à 02:00
Pour conserver la mise en page, le plus simple est de copier la feuille
Click droit sur l'onglet, sélectionner Déplacer ou copier, coche la case Créer une copie, indique où tu veux la copier puis OK

Si tu fais ça en utilisant l'enregistreur de macro, tu auras la méthode à utiliser...

MPi
0
mab2010 Messages postés 7 Date d'inscription jeudi 1 avril 2010 Statut Membre Dernière intervention 20 juillet 2010
13 juil. 2010 à 08:30
Bonjour,
j'ai le même problème , càd avec 3 fichiers différents qui contiennent chacun un tableau, il faut copier une partie du tableau1(du fichier1)par expmle les 3 premiéres colonnes puis mettre en commun les 2 premiers tableaux ds le 3 ème tableau(3ème fichier)de manière automatique par exple en mettant un bouton et en cliquant sur le bouton ça met à jour directement le tableau3.
je vous prie de m'aider car j'ai baucoups cherché mais je ne comprend pas car tous les codes que j'ai utilisé soit ça bog ou ça ne fait pas ce que je veux.
0