Importer les donnees de 30 feuilles dans une seule feuille (résolu)

MADO

XLDnaute Junior
Bonjour les amis
J'ai besoin de votre expertise pour régler une problème.

Dans le fichier joint, je souhaiterai, à l'aide d'une formule, avoir dans la feuille 4, à partir de la cellule A2 toutes les données des feuilles 1, 2 et 3 respectivement les unes en dessous des autres et en sautant une ligne à chaque fois avant de mettre les données de la feuille suivante.
Les données contenues dans les feuilles commencent toutes de A2 à Y2 mais le nombre de lignes peut différer d'une feuille à une autre. Toutefois, elles bougent d'un mois à un autre et le nombre de lignes le plus important pour le moment est de 5600.

Est-ce possible ?:confused:

Merci encore.
 

Pièces jointes

  • A faire.xlsx
    27.3 KB · Affichages: 38
Dernière édition:

MADO

XLDnaute Junior
Re : Importer les donnees de 30 feuilles dans une seule feuille

Merci Hieu pour cette réponse rapide.
Si je mets mes données concernant les 30 feuilles, j'appuie juste sur le bouton et c'est fini ?
Est-ce que je peux l'utiliser sous une autre version d'Excel aussi ?

PS :j'utilise en ce moment Excel 2015 sur macbook, j'ai mis les données mais quand j'appuie sur le bouton il me dit continuer, abandonner ou déboguer. Au boulot la version d'Excel est celle que j'ai communiqué.

You guys rock !
 
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : Importer les donnees de 30 feuilles dans une seule feuille

Bonjour le fil, bonjour le forum,

Comme ton titre parlait de 30 feuilles, je te propose un code très similaire à celui de Hieu mais peut-être un peu plus rapide à exécuter. Il commence par créer un onglet Récap en dernier pour venir y renvoyer les données de tous les autres onglets du classeur :

Code:
Sub Macro1()
Dim OC As Worksheet 'déclare la variable OC (Onglet Cible)
Dim O As Worksheet 'déclare la variable O (Onglets)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)

Sheets.Add after:=Sheets(Sheets.Count) 'ajoute un onglet vierge en dernière position
ActiveSheet.Name = "Récap" 'renomme l'onglet
Set OC = ActiveSheet 'définit l'onglet OC
For Each O In Sheets 'boucle sur tous les onglets du classeur
    If Not O.Name = "Récap" Then 'condition : si le nom de l'onglet est différent de "Récap"
        TV = O.Range("A2").CurrentRegion 'définit le tableau de valeurs TV
        'définit la cellule de destination DEST (A2, si A2 est vide, sinon la seconde cellule vide de la colonne 1 (=A) de l'onglet OC
        Set DEST = IIf(OC.Range("A2").Value = "", OC.Range("A2"), OC.Cells(Application.Rows.Count, 1).End(xlUp).Offset(2, 0))
        DEST.Resize(UBound(TV, 1), UBound(TV, 2)).Value = TV 'renvoie les valeurs du tableau des valeurs TV dans DEST redimensionnée
    End If 'fin de la condition
Next O 'prochain onglet de la boucle
End Sub
 

Hieu

XLDnaute Impliqué
Re : Importer les donnees de 30 feuilles dans une seule feuille

Quand tu cliques sur déboguer,
quelle ligne est surlignée ??

J'avais pas vu, qu'il y avait plus de feuilles;

Du coup,
Code:
Sub lkjhg()
Application.ScreenUpdating = False
Sheets("recap").Select
ligne = 0
For Each o In Sheets
If Not o.Name = "recap" Then
    lig = o.Range("A65536").End(xlUp).Row
    o.Range("a2:y" & lig).Copy
    Range("a2").Offset(ligne, 0).Select
    ActiveSheet.Paste
    ligne = ligne + lig
End If
Next o
End Sub

avec les astuces de Robert !!
En partant du principe que ton bouton est sur la feuille recap (qui existe déjà)

et j'ai rajouté
Code:
Application.ScreenUpdating = False
pour le coté optimisé

Hieu
 

Pièces jointes

  • A faire_v1.xlsm
    21.9 KB · Affichages: 50

MADO

XLDnaute Junior
Re : Importer les donnees de 30 feuilles dans une seule feuille (résolu)

Bonsoir
J'ai essayé plusieurs données mais il ne respecte pas automatiquement le fait de sauter une ligne pour séparer les données des différentes feuilles et c'est important pour moi.
Je vois aussi des lignes de feuilles différentes se glisser dans un endroit ou elles ne devraient pas.
J’espère que Hieu et Robert pourront m'aider.
Merci de votre promptitude.
 
Dernière édition:

Si...

XLDnaute Barbatruc
Re : Importer les donnees de 30 feuilles dans une seule feuille

salut

Il peut y avoir des problèmes quand des lignes, des colonnes ont été supprimées.
Un autre exemple où la récapitulation dans l'onglet "Récap" (déjà créé) se fait à l'activation de celui-ci, en partant pour toutes les feuilles de la cellule A2 !
VB:
Private Sub Worksheet_Activate()
  Dim Sh As Worksheet, Nl As Long, Nc As Long
  Application.ScreenUpdating = 0
  [2:1000000].Rows.Delete
  For Each Sh In Sheets 'boucle sur tous les onglets du classeur
    If Not Sh.Name = "Récap" Then
      Nl = Sh.[A1000000].End(xlUp).Row: Nc = Sh.[XFD2].End(xlToLeft).Column
      Sh.[A2].Resize(Nl, Nc).Copy [A1000000].End(xlUp)(3)
    End If
 Next
End Sub

Private Sub Worksheet_Deactivate()
  [2:1000000].Rows.Delete
End Sub
Nota : la seconde macro permet de vider cet onglet à sa désactivation pour alléger le classeur si besoin.
 

Pièces jointes

  • Onglet Récap.xlsm
    21.7 KB · Affichages: 40

Hieu

XLDnaute Impliqué
Re : Importer les donnees de 30 feuilles dans une seule feuille

Salut,

Peut-etre en nettoyant la feuille avant ??
Le code màj

Code:
Sub lkjhg()
Application.ScreenUpdating = False
Sheets("recap").Select
Cells.ClearContents
ligne = 0
For Each o In Sheets
If Not o.Name = "recap" Then
    lig = o.Range("A65536").End(xlUp).Row
    o.Range("a2:y" & lig).Copy
    Range("a2").Offset(ligne, 0).Select
    ActiveSheet.Paste
    ligne = ligne + lig
End If
Next o
Application.CutCopyMode = False
End Sub

Fichier en pièce jointe.

Sinon, j'vois pas... j'suis limité ^^
 

Pièces jointes

  • A faire_v2.xlsm
    24.5 KB · Affichages: 47

Discussions similaires

Statistiques des forums

Discussions
314 210
Messages
2 107 301
Membres
109 798
dernier inscrit
NAJI2005