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

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

Dernière réponse : dans Programmation
Partagez

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
Contenus similaires

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.

Meilleure solution

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: 

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: 

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.

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.

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.

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

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: 

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: 

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!

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.

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.

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

  • JOJOV77 a édité ce message
  • JOJOV77 a édité ce message

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.

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.


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