boubou_7711
Messages postés7Date d'inscriptionsamedi 16 juin 2007StatutMembreDernière intervention19 juin 2007
-
16 juin 2007 à 22:09
mab2010
Messages postés7Date d'inscriptionjeudi 1 avril 2010StatutMembreDernière intervention20 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.
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201822 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...
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.
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201822 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 ?
boubou_7711
Messages postés7Date d'inscriptionsamedi 16 juin 2007StatutMembreDernière intervention19 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
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201822 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
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
boubou_7711
Messages postés7Date d'inscriptionsamedi 16 juin 2007StatutMembreDernière intervention19 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?
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201822 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.
boubou_7711
Messages postés7Date d'inscriptionsamedi 16 juin 2007StatutMembreDernière intervention19 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:-(
boubou_7711
Messages postés7Date d'inscriptionsamedi 16 juin 2007StatutMembreDernière intervention19 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..
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201822 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...
mab2010
Messages postés7Date d'inscriptionjeudi 1 avril 2010StatutMembreDernière intervention20 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.