Se connecter avec
S'enregistrer | Connectez-vous
Votre question
Résolu

Comment copier ou fusionner 98 Feuilles excel d'un même fichier

Dernière réponse : dans Programmation
Partagez
30 Juin 2010 22:22:50

Bonsoir,
j'ai converti un PDF en XLS (appel d'offres) mais malheureusement mon fichier s'est converti en 98 Feuilles ! je voudrais donc faire une copie de ces 98 Feuilles dans une seule feuille. En gros je voudrais que mon tableau tienne sur une seule feuille. Comment faire, merci de votre aide je dois rendre l'appel d'offre trés rapidement. Merci de votre réponse
30 Juin 2010 23:32:44

Je te dirait copier coller serait surement la plus logique des facons, par contre elle serai tres longue ...
m
0
l
a b L Programmation
1 Juillet 2010 10:21:13

Salut,

@abswindows7, tu peux te dispenser de réponse de ce genre dans la catégorie Programmation

@eve2411 change le titre de ton message, s'il te plaît. Je regarde ton problème.
m
0
l
Contenus similaires
1 Juillet 2010 12:10:43

abswindows7 a dit :
Je te dirait copier coller serait surement la plus logique des facons, par contre elle serai tres longue ...


Oui, merci !!!! c est pour éviter celà que j'ai posé la question :( 
m
0
l
1 Juillet 2010 12:11:52

zeb a dit :
Salut,

@abswindows7, tu peux te dispenser de réponse de ce genre dans la catégorie Programmation

@eve2411 change le titre de ton message, s'il te plaît. Je regarde ton problème.


OK c'est fait - merci par avance de ton aide, je suis sur le problème depuis 48H ca me rend folle, je trouve pas.
m
0
l

Meilleure solution

1 Juillet 2010 14:41:57

Bonjour,
Une petite macro :
  1. Option Explicit
  2. Sub test2()
  3. Dim ws As Worksheet
  4. For Each ws In Worksheets
  5. If ws.Name <> "recap" Then
  6. Application.ScreenUpdating = False
  7. ws.Activate
  8. Range("A1:" & [a1].SpecialCells(xlCellTypeLastCell).Address).Copy
  9. Sheets("NOM DE LA FEUILLE OU VOUS SOUHAITEZ TOUT RECUPERER").Activate
  10. Range("A65536").End(xlUp).Offset(1, 0).Select
  11. ActiveSheet.Paste
  12. Application.CutCopyMode = False
  13. End If
  14. Next ws
  15. End Sub

Je viens de la tester et ça fonctionne. :hello: 
partage
1 Juillet 2010 16:41:01

bonjur et merci, mais je vais paraitre plus qu'idiote, je ne maitrise pas trés bien les macros !!!! sauf les toutes simples ;)  pourriez juste m'indiquer ou et comment l'insérer, merci d'avance.

:hello: 

zorinhosantiago a dit :
Bonjour,
Une petite macro :

Option Explicit
Sub test2()
Dim ws As Worksheet
For Each ws In Worksheets
If ws.Name <> "recap" Then
Application.ScreenUpdating = False
ws.Activate
Range("A1:" & [a1].SpecialCells(xlCellTypeLastCell).Address).Copy
Sheets("NOM DE LA FEUILLE OU VOUS SOUHAITEZ TOUT RECUPERER").Activate
Range("A65536").End(xlUp).Offset(1, 0).Select
ActiveSheet.Paste
Application.CutCopyMode = False
End If
Next ws
End Sub

Je viens de la tester et ça fonctionne. :hello: 

m
0
l
1 Juillet 2010 17:23:27

Je suis (très) loin d'être un pro également et ne sachant pas si vous avez office 2007, office 2003 ou autre, je vais tenter de faire au plus clair.

Je pars sur la base d'office 2007 qui est la version que j'ai, en espagnol, donc désolé par avance si la traduction n'est pas l'exacte de ce que vous voyez.
Sous l'onglet "vue" vous avez tout au bout une icône "macros". Il faut commencer par cliquez sur "créer" qui ne vous permet que de mettre un nom à votre macro puis ensuite cliques sur "voir les macros", sélectionnez celle que vous venez d'ajouter (et qui est donc vierge) et cliquez sur "modifier".
Un nouvel écran apparaît alors, copier-coller ce code dans l'écran, pensez à mettre le nom de la feuille ou vous souhaitez voir tout fusionner puis repasser à votre classeur excel, cliquez sur "macro" sélectionnez votre macro et cliquez sur "exécuter" et le miracle technologique s'accomplit, merci au forum ou je l'ai trouvé :)  .

Je suis toutefois surpris que votre convertisseur de PDF à XLS ne vous ai pas demandé si vous souhaitiez tout importer sur la même feuille.
m
0
l
1 Juillet 2010 18:51:48

GENIAL ca marche, tu es formidable :bounce:  merci beaucoup, je n'ai plus qu'à modifier ma mise en page et j'ai mes 2900 Lignes sur une même feuille. Je te fais un énorme bisou :pt1cable:  :pt1cable:  MERCIIIIIII - je vais essayer de trouver des tutos sur le VBA, mais y'a du boulot.
Merci encore passe une bonne soirée.
Eve.
m
0
l
1 Juillet 2010 19:04:23

Euh, eh bien, y'a pas de quoi ! :) 

Ceci dit, celui qui est à remercier c'est celui qui à inventé ce genre de truc, j'espère qu'il est bien payé !!! :pt1cable: 
m
0
l
1 Juillet 2010 20:47:11

Meilleure réponse sélectionnée par eve2411.
m
0
l
2 Juillet 2010 09:01:30

eve2411 a dit :
Meilleure réponse sélectionnée par eve2411.

n
n :p  Merci !
m
0
l
a b L Programmation
2 Juillet 2010 15:09:01

Salut,

Je n'ai pas eu le temps de m'en occuper que zorinhosantiago proposait une bonne réponse. Tant mieux.

Cependant, zorinhosantiago, merci de respecter le règlement. Tu dois présenter tout code proposé en le mettant entre les balises [code][/code]. Il te reste donc à modifier ton message.

m
0
l
a b L Programmation
2 Juillet 2010 15:28:10

Oh, je viens de regarder ton code, zorinhosantiago !
Tu es un hérétique de la programmation !
De quel droit te permets-tu de remplir le presse-papier de l'utilisateur à son insu ?
De plus parce que tu utilises les objets en cours de sélection, tu ralentis énormément ton programme au point que tu es obligé d'utiliser ScreenUpdating.

Je te propose de voir TON code, légèrement revu à la lumière des éléments précédents :
  1. ' // Ca, c'est très bien !!! :)
  2. Option Explicit
  3.  
  4. ' // Le code zorinhosantiago, revu pour ne
  5. ' // pas utiliser le presse papier.
  6. Sub test2()
  7. Dim ws As Worksheet
  8.  
  9. For Each ws In Worksheets
  10. If ws.Name <> "recap" Then
  11. ws.Range(ws.Range("A1"), _
  12. ws.Range("A1").SpecialCells(xlCellTypeLastCell)).Copy _
  13. Destination:=Worksheets("recap").Range("A65536").End(xlUp).Offset(1, 0)
  14. End If
  15. Next
  16. End Sub


Voici ce que je propose, et qui n'est pas mieux que le précédent :
  1. Option explicit
  2. ' // Code équivalent, plein de variables inutiles pour bien comprendre
  3. Sub test_3()
  4. Dim ws As Worksheet
  5. Dim ws_recap As Worksheet
  6. Dim cell_source_1er As Range
  7. Dim cell_source_der As Range
  8. Dim cell_recap_cible As Range
  9.  
  10. Set ws_recap = Worksheets("recap")
  11.  
  12. For Each ws In Worksheets
  13. If ws <> ws_recap Then
  14. Set cell_source_1er = ws.Range("A1")
  15. Set cell_source_der = cell_source_1er.SpecialCells(xlCellTypeLastCell)
  16. Set cell_recap_cible = ws_recap.Range("A65536").End(xlUp).Offset(1, 0)
  17.  
  18. ws.Range(cell_source_1er, cell_source_der).Copy Destination:=cell_recap_cible
  19. End If
  20. Next
  21. End Sub
m
0
l
7 Juillet 2010 13:07:12

zeb a dit :
Oh, je viens de regarder ton code, zorinhosantiago !
Tu es un hérétique de la programmation !
De quel droit te permets-tu de remplir le presse-papier de l'utilisateur à son insu ?
De plus parce que tu utilises les objets en cours de sélection, tu ralentis énormément ton programme au point que tu es obligé d'utiliser ScreenUpdating.

Je te propose de voir TON code, légèrement revu à la lumière des éléments précédents :
  1. ' // Ca, c'est très bien !!! :)
  2. Option Explicit
  3.  
  4. ' // Le code zorinhosantiago, revu pour ne
  5. ' // pas utiliser le presse papier.
  6. Sub test2()
  7. Dim ws As Worksheet
  8.  
  9. For Each ws In Worksheets
  10. If ws.Name <> "recap" Then
  11. ws.Range(ws.Range("A1"), _
  12. ws.Range("A1").SpecialCells(xlCellTypeLastCell)).Copy _
  13. Destination:=Worksheets("recap").Range("A65536").End(xlUp).Offset(1, 0)
  14. End If
  15. Next
  16. End Sub


Voici ce que je propose, et qui n'est pas mieux que le précédent :
  1. Option explicit
  2. ' // Code équivalent, plein de variables inutiles pour bien comprendre
  3. Sub test_3()
  4. Dim ws As Worksheet
  5. Dim ws_recap As Worksheet
  6. Dim cell_source_1er As Range
  7. Dim cell_source_der As Range
  8. Dim cell_recap_cible As Range
  9.  
  10. Set ws_recap = Worksheets("recap")
  11.  
  12. For Each ws In Worksheets
  13. If ws <> ws_recap Then
  14. Set cell_source_1er = ws.Range("A1")
  15. Set cell_source_der = cell_source_1er.SpecialCells(xlCellTypeLastCell)
  16. Set cell_recap_cible = ws_recap.Range("A65536").End(xlUp).Offset(1, 0)
  17.  
  18. ws.Range(cell_source_1er, cell_source_der).Copy Destination:=cell_recap_cible
  19. End If
  20. Next
  21. End Sub


Désolé !

Ceci dit, un message privé aurait été du plus bel effet, surtout que si je n'étais pas venu refaire un tour sur le post, je ne l'aurai jamais su.

Bonne journée :hello: 
m
0
l
a b L Programmation
7 Juillet 2010 14:44:18

Ah mais non cher ami,

Je propose à tous une alternative, que j'estime meilleure (c'est subjectif et on peut en discuter), et ce n'est que pour la rhétorique que je m'adresse à toi, aidé en cela il est vrai par le fait que je me base sur une critique (objective ;)  ) de ton code.

Par ailleurs, si tu as la fibre pour filer de temps en temps un coup de patte, tu reviendras souvent et tu ne manqueras pas de visiter en premier les sujets signalés d'un . Ce sont ceux auxquels tu as participé.

A te lire :hello: 
m
0
l
13 Septembre 2010 19:01:21

Bonjour,

Désolé de remonter le sujet,

Mais cette question m'avait beaucoup intéressé, et les code VBA proposé fonctionnent bien

Cependant, mon problème personnel complique la chose: j'aurais aimé savoir s'il serait possible d'avoir lemême code, pour prendre tous les tableaux des feuilles, excepté la première ligne de chacune des feuilles. Puisqu'elle comporte les titre des colonnes.

Merci d'avance!
m
0
l
a b L Programmation
14 Septembre 2010 15:34:05

Bonjour Stipulo,

Ne sois pas désolé. Ici, si les topics ne sont pas fermés automatiquement au bout d'un certain temps, c'est pour qu'on puisse les remonter.

Bon, par contre, ici, nous discutons entre développeurs. Et les codes proposés sont non pas à utiliser tels quels mais à étudier, à comprendre et éventuellement à adapter.

Etudie le dernier code proposé. On y utilise une cellule de référence (A1) qu'il te suffit d'adapter pour que le reste du code fonctionne comme tu le voudrais.
m
0
l
14 Septembre 2010 18:38:22

Ok, je te remercie de ta réponse zeb.
J'ai trouvé ma réponse sur un autre forum.

Et effectivement je ne sais absolument pas programmer en VBA donc tant que je n'aurais aps pris de cours je m'abstiendrais de poster ici ^^

Merci quand même, bye.
m
0
l
a b L Programmation
15 Septembre 2010 11:03:26

Mais les novices sont les bienvenus.
Et l'effort que je te proposais est à la portée d'un grand débutant. (D'autant que je t'ai précisé quoi regarder !)
m
0
l
16 Avril 2012 09:26:44

Bonjour,

Merci beaucoup pour cette macro. J'avais 2798 feuilles à regrouper, et après quelques adaptation et difficultés, j'ai réussi.
Si on appelle la feuille de regroupement RECUP, voici la macro modifié.

  1. Option Explicit
  2. Sub FusionOnglets()
  3. Dim ws As Worksheet
  4. For Each ws In Worksheets
  5. If ws.Name <> "RECUP" Then
  6. Application.ScreenUpdating = False
  7. ws.Activate
  8. Range("A1:" & [a1].SpecialCells(xlCellTypeLastCell).Address).Copy
  9. Sheets("RECUP").Activate
  10. Range("A65536").End(xlUp).Offset(1, 0).Select
  11. ActiveSheet.Paste
  12. Application.CutCopyMode = False
  13. End If
  14. Next ws
  15. End Sub

m
0
l
a b L Programmation
16 Avril 2012 10:20:55

Salut Jojo
Sois le bienvenu.

Va lire le règlement ! Il est interdit de présenter du code sans le mettre en forme.
Il faut utiliser la balise [code=VB][/code].

[:zeb:6]
m
0
l
16 Avril 2012 11:27:06

Désolé, je ne savais pas.

J'ai voulu voir, mais quand on clique dans "Réglement de programmation" en bas de ta réponse, on arrive sur une erreur 404 ?
m
0
l
a b L Programmation
16 Avril 2012 12:05:42

Oh merde^W saperlipopette !!!

Depuis le chambardement du forum, je n'avais jamais vérifié les liens dans ma signature. :/ 
Merci à toi pour ça.

Bon, sinon, quand on débarque quelque part, on peut se renseigner un minimum.
Tout en haut du forum programmation, il y a un topic qui s'appelle Quelques règles simples à respecter -- /!\ A lire avant de poster !
C'est clair, non ?
Le bon lien est ici : http://www.presence-pc.com/forum/ppc/Programmation/quelques-regles-simples-respecter-lire-poster-sujet-1356-1.htm

Et je vais changer ma signature.
Je t'invite à modifier ton message.
m
0
l
30 Avril 2012 16:38:19

Bonjour,

Je me permets de revenir sur ce sujet car je ne comprends pas trop comment fonctionnent les "macros".
La mienne pose problème à la ligne suivante: "Sheets" Nom de la feuille,....
Pourriez-vous m'expliquer pats à pats, la manière de résoudre ce problème ?
Dois-je créer un nouveau fichier avant même de faire cette macro ?

Un tout grand merci de votre aide !

Rodolphe,
eve2411 a dit :
bonjur et merci, mais je vais paraitre plus qu'idiote, je ne maitrise pas trés bien les macros !!!! sauf les toutes simples ;)  pourriez juste m'indiquer ou et comment l'insérer, merci d'avance.

:hello: 

zorinhosantiago a dit :
Bonjour,
Une petite macro :

Option Explicit
Sub test2()
Dim ws As Worksheet
For Each ws In Worksheets
If ws.Name <> "recap" Then
Application.ScreenUpdating = False
ws.Activate
Range("A1:" & [a1].SpecialCells(xlCellTypeLastCell).Address).Copy
Sheets("NOM DE LA FEUILLE OU VOUS SOUHAITEZ TOUT RECUPERER").Activate
Range("A65536").End(xlUp).Offset(1, 0).Select
ActiveSheet.Paste
Application.CutCopyMode = False
End If
Next ws
End Sub

Je viens de la tester et ça fonctionne. :hello: 



zorinhosantiago a dit :
Je suis (très) loin d'être un pro également et ne sachant pas si vous avez office 2007, office 2003 ou autre, je vais tenter de faire au plus clair.

Je pars sur la base d'office 2007 qui est la version que j'ai, en espagnol, donc désolé par avance si la traduction n'est pas l'exacte de ce que vous voyez.
Sous l'onglet "vue" vous avez tout au bout une icône "macros". Il faut commencer par cliquez sur "créer" qui ne vous permet que de mettre un nom à votre macro puis ensuite cliques sur "voir les macros", sélectionnez celle que vous venez d'ajouter (et qui est donc vierge) et cliquez sur "modifier".
Un nouvel écran apparaît alors, copier-coller ce code dans l'écran, pensez à mettre le nom de la feuille ou vous souhaitez voir tout fusionner puis repasser à votre classeur excel, cliquez sur "macro" sélectionnez votre macro et cliquez sur "exécuter" et le miracle technologique s'accomplit, merci au forum ou je l'ai trouvé :)  .

Je suis toutefois surpris que votre convertisseur de PDF à XLS ne vous ai pas demandé si vous souhaitiez tout importer sur la même feuille.


m
0
l
10 Janvier 2013 10:49:15

zorinhosantiago a dit :
Bonjour,
Une petite macro :
  1. Option Explicit
  2. Sub test2()
  3. Dim ws As Worksheet
  4. For Each ws In Worksheets
  5. If ws.Name <> "recap" Then
  6. Application.ScreenUpdating = False
  7. ws.Activate
  8. Range("A1:" & [a1].SpecialCells(xlCellTypeLastCell).Address).Copy
  9. Sheets("NOM DE LA FEUILLE OU VOUS SOUHAITEZ TOUT RECUPERER").Activate
  10. Range("A65536").End(xlUp).Offset(1, 0).Select
  11. ActiveSheet.Paste
  12. Application.CutCopyMode = False
  13. End If
  14. Next ws
  15. End Sub

Je viens de la tester et ça fonctionne. :hello: 


Bonjour zorinhosantiago,

Votre Macro fonctionne à peu près et je vous en remercie. Je dis à peu près car la compilation apparait 2 fois à la suite dans mon onglet de destination. Comme je ne comprends pas le language basic, je ne sais pas trop ce qu'il faut supprimer...
Pourriez-vous m'aider sur ce point ?

Audrey

m
0
l
10 Janvier 2013 10:49:59

Précision : je suis en Excel 2010 !
m
0
l
29 Septembre 2013 18:18:24

Bonjour à tous les membres de ce forum,
Je suis totalement novice en VBA!
J'ai le même problématique postée précédemment, à savoir fusionner plusieurs feuilles excel (n'ayant pas de titre) en une seule feuille.

J'ai donc copié le code de Zeb, (merci Zeb) sur l'éditeur de macro sur mon classeur Excel
Malheureusement, lorsque j'exécute la macro, la ligne du code *Set ws_recap = Worksheets("recap")* est en jaune, ce qui veut dire que le programme ne reconnait pas cette partie du code.
Quelqu'un pourrait-il m'éclairer?
Un grand MERCI
m
0
l
29 Septembre 2013 18:25:13

voila le code entier que Zeb avait proposer pour fusionner plusieurs feuilles excel en une seule


Option Explicit
' // Code équivalent, plein de variables inutiles pour bien comprendre
Sub test_3()
Dim ws As Worksheet
Dim ws_recap As Worksheet
Dim cell_source_1er As Range
Dim cell_source_der As Range
Dim cell_recap_cible As Range

Set ws_recap = Worksheets("recap")

For Each ws In Worksheets
If ws <> ws_recap Then
Set cell_source_1er = ws.Range("A1")
Set cell_source_der = cell_source_1er.SpecialCells(xlCellTypeLastCell)
Set cell_recap_cible = ws_recap.Range("A65536").End(xlUp).Offset(1, 0)

ws.Range(cell_source_1er, cell_source_der).Copy Destination:=cell_recap_cible
End If
Next
End Sub

la ligne Set ws_recap = Worksheets("recap") est en surbrillance lors de l'exécution, et donc le programme n'est pas exécuté
merci pour votre aide
m
0
l
a b L Programmation
1 Octobre 2013 15:15:06

Salut Diane, et merci pour ton merci.
:jap: 

Dis-donc, il me semble avoir déjà dit qu'ici, les morceaux de code VB doivent être encadré par les balises [code=vb] et [/code].
Il te reste à modifier ton message en conséquence.
[:zeb:4]

--------------------------------------

J'ai proposé ce bout de code à quelqu'un qui voulait faire un récapitulatif dans une feuille qui s'appelait "recap". D'où le nom de la variable.
Si tu n'as pas de feuille appelée "recap", Il va falloir t'adapter.
1°) c'est facile, tu devrais pouvoir le faire toute seule :o 
2°) on peut d'aider quand même ;) 
m
0
l