Macro pour compiler des données les unes a côté des autres

lila2005

XLDnaute Nouveau
Bonjour,

La macro suivante me permet de compiler des données les unes en dessous des autres :
Sub jj()
Dim sh As Worksheet
Application.DisplayAlerts = False
On Error Resume Next
Sheets("Compilation").Delete
Application.DisplayAlerts = True
On Error GoTo 0
Sheets.Add
ActiveSheet.Name = "Compilation"
[a1] = "Compilation"
For Each sh In ActiveWorkbook.Sheets
If sh.Name <> "Compilation" Then
Set plage = sh.Range("v7147:ac7191" & sh.Cells(Rows.Count, "a").End(3).Row)
plage.Copy
Sheets("Compilation").Range("a" & Sheets("Compilation").Cells(Rows.Count, "a").End(3).Row + 1).PasteSpecial Paste:=xlPasteAll
End If
Next
End Sub

J'aimerais compiler des données les unes à côté des autres. Je me suis dit qu'en remplacant "rows" par "columns" ca marcherait mais quand je fais ca l'application ne fonctionne plus. Quelqu'un aurait-il une piste?

Et merci pour le site, il est génial!!!:D
 

idiomea

XLDnaute Junior
Re : Macro pour compiler des données les unes a côté des autres

svp quelqu'un peut-il m'aider, mon chef m'a interdit d'aller voir le spécialiste en informatique de a boite pour lui demander de l'aide car veut prouver que l'on peut se passer de lui.

Par contre moi il faut que je trouve vite...


y aurait-il une ame charitable dans le forum ?


Cordialement
Guillaume


PS : désolé si je parais insistant mais la je suis bloqué
 

idiomea

XLDnaute Junior
Re : Macro pour compiler des données les unes a côté des autres

alors, y a t'il un XLDnaute Barbatruc pour m'aider dans la salle ????


je reposte la modification pour laquelle j'aimerais de l'aide, je joins un fichier qui explique ce que je cherche à faire
je sais que j'ai déjà posté au moins 4 messages à ce sujet mais j'ai besoin de trouver une solution à cet obstacle

le texte :
je souhaite copier toutes les colones L de chaque 1er onglet de tous les fichier présent dans un dossier contenant 3 sous niveaux.
cette colone est le résultat d'une somme, donc il faut oubien créer un lien ou alors un collage spécial.


le code (pas de moi) :
Code:
Sub jj()
  Dim sh As Worksheet
  Application.DisplayAlerts = False
  On Error Resume Next
  Sheets("Compilation").Delete
  Application.DisplayAlerts = True
  On Error GoTo 0
  Sheets.Add
  ActiveSheet.Name = "Compilation"
  [a1] = "Compilation"
  For Each sh In ActiveWorkbook.Sheets
    If sh.Name <> "Compilation" Then
      Dercol = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
      sh.Range("L1:L" & sh.Cells(Rows.Count, "L").End(3).Row).Copy Sheets("Compilation").Cells(1, Dercol + 1)
    End If
  Next
End Sub

la piece jointe est comentée pour plus de clareté :

Cordialement
Guillaume

toujours en attente d'un coup de main
Cordialement
Guillaume
 

Pièces jointes

  • Copie En 1 Onglet.zip
    34.5 KB · Affichages: 42
  • Copie En 1 Onglet.zip
    34.5 KB · Affichages: 42
  • Copie En 1 Onglet.zip
    34.5 KB · Affichages: 48

mromain

XLDnaute Barbatruc
Re : Macro pour compiler des données les unes a côté des autres

bonjour idiomea,

voici une base de travail :
> la macro est dans le Module1 du classeur "ClasseurMacro.xls"
elle copie les colonnes F des premiers ongles des calsseurs contenus dans le dossier racine du classeur "ClasseurMacro.xls", ainsi que des sous-dossiers à la suite des données de la Feuil2.


a+
 

Pièces jointes

  • Dossier_idiomea.zip
    46.3 KB · Affichages: 60

idiomea

XLDnaute Junior
Re : Macro pour compiler des données les unes a côté des autres

bonjour idiomea,

voici une base de travail :
> la macro est dans le Module1 du classeur "ClasseurMacro.xls"
elle copie les colonnes F des premiers ongles des calsseurs contenus dans le dossier racine du classeur "ClasseurMacro.xls", ainsi que des sous-dossiers à la suite des données de la Feuil2.


a+

Slt Mromain, cette macro est géniale, mais un peu longue, j'ai 230 fichier et elle a mis 8 minutes,
cependant, il y a un soucis, elle copie colle classiquement,

le probleme c'est que ma colone L ( et non F, mais la acro copie bien la L) est une somme (=somme(L14:CV14)) donc j'obtiens que des 0 dans la feuille de résultat.

Merci quand même de t'etre planché sur mon problème, sinon, j'ai eu un code très similaire au tiens, qui commence de la meme manière mais qui lui ne peux copier que des chiffre (et des blabla de test ^^) mais qui par contre pour l'instant ne peux copier que les feuilles nommées feuill1

je vais atcher de mixer les deux codes, merci Mromain,

je posterais ici le resultat final.

Merci encore le forum et mromain
Guillaume
 

idiomea

XLDnaute Junior
Re : Macro pour compiler des données les unes a côté des autres

@ mromain,

pourrais-tu modifier ta macro pour qu'elle fasse un copier coller spécial VALEUR,

en effet, malgrès la non rapidité (je ne me plainds pas c'est géniale) cela me copie la formule, qui donne des "0" vu que les cellules concernées ne sont pas renseigné dans la feuille de compliation.

vois tu ce que je veux dire ?

Guillaume

PS pour la modif de
Code:
Sheet("Feuil1")
en
Code:
Sheet(1)

et bien je ne sais pas quoi faire car
dans la macro vba il y a ça d'ecrit

Code:
Const NomFeuille As String = "Feuil1"
j'ai essaillé
Code:
Const NomFeuille As String = [COLOR="Red"]sheet(1)[/COLOR]
mais ça ne fonctionne pas
 

mromain

XLDnaute Barbatruc
Re : Macro pour compiler des données les unes a côté des autres

bonjour idiomea,

essaye avec ce code :
Code:
Sub test()
Dim listeFichiers As String, tableauFichiers() As String
Dim iFichier As Long
Dim fichierCourant As Workbook

    Application.ScreenUpdating = False
    Application.EnableEvents = False

    'récupérer la liste des fichiers Excel (.xls, .xlsx et .xlsm) contenu dans le
    'dossier où est enregistré ce classeur (ThisWorkbook) et les sous-dossiers
    listeFichiers = AnnalyseDisque.GetFilesList(ThisWorkbook.Path, "xls;xlsx;xlsm", True)
    
    'récupérer les fichiers trouvés dans un tableau
    tableauFichiers = Split(listeFichiers, ";")
    
    'définir sur quelle feuille vont être copiées les données
    With ThisWorkbook.Sheets("Feuil2")
        'boucler sur les fichiers récupérés
        For iFichier = LBound(tableauFichiers) To UBound(tableauFichiers)
            'tester qu'on ne traite pas ce classeur (ThisWorkbook)
            If AnnalyseDisque.GetFileName(tableauFichiers(iFichier), True) <> ThisWorkbook.Name Then
                'ouvrir le classeur (en "lecture seule")
                Set fichierCourant = Application.Workbooks.Open(tableauFichiers(iFichier), , True)
                'copier la colone L de la feuille 1 du classeur courant et la copier
                'à la suite de la feuille de ce classeur défilie plus haut (au niveau du With)
                fichierCourant.Sheets(1).Columns("L").Copy
                .Cells(1, .Cells.SpecialCells(xlCellTypeLastCell).Column).Offset(0, 1).PasteSpecial xlPasteValues
                'fermer le classeur courant
                fichierCourant.Close False
            End If
        Next iFichier
    End With
    
    Application.ScreenUpdating = True
    Application.EnableEvents = True

End Sub

a+
 

idiomea

XLDnaute Junior
Re : Macro pour compiler des données les unes a côté des autres

Bonjour Mromain,
je te remercie cela fonctionne, cependant
entre chaque copie, excel me demande si je veux conserver les données contenues dans le presse papier, il faut donc que je clique.

bref, cela ne me derange pas je n'ai que 250 fichier, mais pour celui qui à plus....


Merci beaucoup,
sauf si tu sais le faire sans que cela te prenne du temps pas la peine de rechanger le code je m'en contente.

@+
Guillaume
 

mromain

XLDnaute Barbatruc
Re : Macro pour compiler des données les unes a côté des autres

re,

essaye ce code :
Code:
Sub test()
Dim listeFichiers As String, tableauFichiers() As String
Dim iFichier As Long
Dim fichierCourant As Workbook

    Application.ScreenUpdating = False
    Application.EnableEvents = False

    'récupérer la liste des fichiers Excel (.xls, .xlsx et .xlsm) contenu dans le
    'dossier où est enregistré ce classeur (ThisWorkbook) et les sous-dossiers
    listeFichiers = AnnalyseDisque.GetFilesList(ThisWorkbook.Path, "xls;xlsx;xlsm", True)
    
    'récupérer les fichiers trouvés dans un tableau
    tableauFichiers = Split(listeFichiers, ";")
    
    'définir sur quelle feuille vont être copiées les données
    With ThisWorkbook.Sheets("Feuil2")
        'boucler sur les fichiers récupérés
        For iFichier = LBound(tableauFichiers) To UBound(tableauFichiers)
            'tester qu'on ne traite pas ce classeur (ThisWorkbook)
            If AnnalyseDisque.GetFileName(tableauFichiers(iFichier), True) <> ThisWorkbook.Name Then
                'ouvrir le classeur (en "lecture seule")
                Set fichierCourant = Application.Workbooks.Open(tableauFichiers(iFichier), , True)
                'copier la colone L de la feuille 1 du classeur courant et la copier
                'à la suite de la feuille de ce classeur défilie plus haut (au niveau du With)
                fichierCourant.Sheets(1).Columns("L").Copy
                .Cells(1, .Cells.SpecialCells(xlCellTypeLastCell).Column).Offset(0, 1).PasteSpecial xlPasteValues
[COLOR=Red][B]                Application.CutCopyMode = False
[/B][/COLOR]                'fermer le classeur courant
                fichierCourant.Close False
            End If
        Next iFichier
    End With
    
    Application.ScreenUpdating = True
    Application.EnableEvents = True

End Sub

a+
 

Discussions similaires

Statistiques des forums

Discussions
312 492
Messages
2 088 924
Membres
103 983
dernier inscrit
AlbertCouillard