copier/coller tout bête...

  • Initiateur de la discussion Thomas
  • Date de début
T

Thomas

Guest
Re-bonjour à tous, c'est re-moi et j'ai re-besoin de votre aide...

Je voudrais copier le contenu (toutes les feuilles qu'il contient) d'un fichier excel et les coller dans un autre fichier excel (celui à partir duquel je crée la macro)... Je parviens à copier ce que g besoin mais pas moyen de le coller dans l'autre fichier (si ca se trouve, je me trompe depuis le début...) Est-ce que qqun pourrait me conseiller svp?

Merci d'avance
Thomas
 
S

Syl

Guest
Bonjour Thomas, bonjour le fil

Je ne suis pas sure d'avoir compris ta question, mais voici une méthode pour déplacer des feuilles d'un classeur à un autre manuellement
Si tu veux simplement copier des feuilles d'un classeur dans un autre, tu commences par ouvrir tes deux classeurs, puis tu clique droit sur l'onglet d'une de tes feuilles du classeur à copier, clique ensuite sur sélectionner toutes les feuilles, reclique droit sur les onglets, sélectionne déplaceer ou copier, choisi ton classeur de réception sélectionne la place où tu veux le mettre et clique sur créer une copie

J'espère répondre à ta question

Syl
 
T

Thomas

Guest
Bonjour Syl, re-bonjour le forum

Merci pour ton aide syl, c'est pas mal du tout ce truc mais c'est pas exactement ce qu'il me faut (à moins que je parvienne à automatiser cette tache)...parce que pour un fichier ca va, mais j'en ai plus ou moins une 40 à copier dans le même fichier!!!! De plus, j'aimerais copier tout ces fichiers (et les feuilles qu'ils contiennent) sur UNE feuille (l'un en dessous de l'autre)... Si t'as une idée, n'hésite pas!!! Ca fait plaisir de voir qu'on est pas tout seul et qu'on peut compter sur les autres...

Merci
Thomas
 
@

@+Thierry

Guest
Bonjour Thomas

Donc si j'ai bien compris tu veux copier toutes les feuilles de tous les classeur ouverts sauf celui contenant la Macro, et ceci vers une feuille de ce même classeur contenant la Macro...

Ceci va le faire, à condition que tu aies une feuille qui se nomme "Cible" dans le classeur où tu mettra cette macro :

Sub CopierClasseur()
Dim WBCible As Workbook, WB As Workbook
Dim WSCible As Worksheet, WS As Worksheet
Dim L As Integer

Set WBCible = ThisWorkbook
With WBCible
Set WSCible = .Sheets("Cible")
End With

For Each WB In Workbooks
If WB.Name <> ThisWorkbook.Name Then
For Each WS In WB.Sheets
L = WSCible.Range("A65536").End(xlUp).Row + 1
WS.UsedRange.Copy Destination:=WSCible.Range("A" & L)
Next WS
End If
Next WB
End Sub

Bonne fin d'aprèm

@+Thierry
 
T

Thomas

Guest
Bonjour Thierry, bonjour le fil,

c'est exactement ca que je veux faire!!! J'essaie ca tout de suite et je vous tient au courant
Un grand merci en tout cas (qu'est-ca que je ferais sans vous?!)
Thomas
 
T

Thomas

Guest
Re-bonjour,

c'est génial!!!! Ca fonctionne!!!!! Merci beaucoup!!! Franchement, vous êtes super!!! Merci thierry, merci syl, merci le forum, merci à tous!!

Je peux me permettre de demander encore qqch? Je voudrais laisser deux colonnes libres devant mes collages, dans lesquelles se recopierait automatiquement :
colonne 1 : le nom du classeur ou on a été cherché la feuille collée
colonne 2 : le nom de la feuille
Est-ce que c'est possible d'après vous?

Merci d'avance
 
@

@+Thierry

Guest
Bonjour Thomas, Syl et le Forum


Bon alors donc voici un code qui va recopier toutes les feuilles de tous les classeurs ouverts sauf celui contenant la Macro, et ceci vers une feuille "Cible" de ce même classeur en prenant soin de reporter sur cette feuille "Cible", en Colonne "A" (à la ligne du commencement de la copie) le nom du classeur "Source" et, en Colonne "B", le Nom de la Feuille "Source" , les copies, quant à elles, s'incrémenteront en colonne "C"...

Tout ceci est tout de même subordonné à ce que tes données sources soient plus ou moins stucturées de la même manière.

Option Explicit

Sub CopierClasseurAvecNoms()
Dim WBCible As Workbook, WB As Workbook
Dim WSCible As Worksheet, WS As Worksheet
Dim L As Integer

Set WBCible = ThisWorkbook
With WBCible
Set WSCible = .Sheets("Cible")
End With

For Each WB In Workbooks
If WB.Name <> ThisWorkbook.Name Then
WSCible.Range(Range("C65536").End(xlUp).Address).Offset(1, -2) = WB.Name
For Each WS In WB.Sheets
WSCible.Range(Range("C65536").End(xlUp).Address).Offset(1, -1) = WS.Name
L = WSCible.Range("C65536").End(xlUp).Row + 1
WS.UsedRange.Copy Destination:=WSCible.Range("C" & L)
Next WS
End If
Next WB
End Sub

Bonne Matinée
@+Thierry
 
T

Thomas

Guest
Bonjour thierry et tous les autres...

J'ai essayé ta dernière proposition mais ca ne fonctionne pas :-( Au fait, tout ce colle bien à partir de la colonne "C", donc ca, pas de problème... Par contre, le remplissage des deux premières colonnes ne réussit que pour la dernière feuille du dernier classeur ouvert...
Quand tu dis "tes données sources soient plus ou moins stucturées de la même manière", qu'est-ce que tu entends par là? c'est peut-être ca mon problème? Mes données sources sont toutes contenues dans un même dossier... Par contre, le nombre de colonne (et de lignes aussi, évidemment!!) varie d'un classeur à l'autre... est*-ce ca qui pose problème?

Merci pour ton aide!
Thomas
 
@

@+Thierry

Guest
Salut Thomas, le Forum

Huum je n'ai pas trop de temps mais par acquis de conscience je viens d'ouvrir 50 fichiers xls contenant tous chacun une feuille ou deux feuilles formatée(s) avec des données de type linéaire, de la colonne "A" à la colonne "J"... Une fois la procédure ci dessus effectuée j'ai bien ceci dans ma feuille "Cible":

Colonne "A" : nom de fichier
Colonne "B" : nom de feuille
Colonne "C" à Colonne "L" les données (des dix colonnes d'origine)

Et j'ai donc, à chaque rupture de dossier, les Cellules de la colonne A et B qui m'indiquent le nom du fichier et de la feuille respectivement.

Pour que l'exécution d'un code comme celui-ci se déroule sans erreur il est primordial que les données soient structurée dans les fichiers parcourrus. Et c'est à mon avis ce qui te pose un problème pour que celà ne fonctionne pas...

La première évidente cause d'échec serait que tes fichiers "Sources" ne contiennent pas de données de type linéaire.

La seconde évidente cause d'erreur serait que tes fichiers "Sources" ne contiennent des "vides" en fin de zone de la colonne A... Ce qui aurait pour effet de faire une erreur sur la localisation de la dernière cellule vide en feuille "Cible" (Range("C65536").End(xlUp))...

Voilà grosso modo ton ou tes problèmes...

Bon Courage et bonne fin d'après midi
@+Thierry
 
@

@+Thierry

Guest
Oups

Supprimer la négation de la phrase : "La seconde évidente cause d'erreur serait que tes fichiers "Sources" ne contiennent des "vides"

Ce qui donne : "La seconde évidente cause d'erreur serait que tes fichiers "Sources" contiennent des "vides"

Sorry, mais du coup voici un complément d'info :

En fait si la colonne "A" contient des vides, c'est que l'on est déjà en face d'une base de données non linéaire...

A ce moment là... il faut prendre en référence la colonne pour laquelle on sera certain de la présence d'un enregistrement (ne pas oublier que "B" sur un des classeurs source, devient "D" sur la feuille Cible...)

Enfin voilà...
@+Thierry
 
T

tristan

Guest
salut

help !
je vois que que vous etes bien lancés dans la manip sous excel .... c'est loin d'etre mon cas : une question, sans doute toute bete ... comment faire pour copier le contenu d'une cellule (formule ou valeur) d'une feuille à une autre ???

merci.aloha.
 
T

Thomas

Guest
Bonjour à tous,

Thierry, merci pour tout ce temps que tu me consacres!!! C'est vraiment sympa! Je vais essayé d'obtenir des classeurs semblables (mais pas aujourd'hui!! je sature un peu...)
Encore un grand merci

Salut tristan,
moi je débute dans exel mais dès que g un peu de temps, je jèterai un oeil, on ne sait jamais... si je peux t'aider, je serai ravi.
A+
Thomas
 

Discussions similaires

Réponses
6
Affichages
571

Statistiques des forums

Discussions
314 121
Messages
2 106 128
Membres
109 495
dernier inscrit
jerome bonneau