Construire un classeur à partir d'autres classeurs

Fermé
Aussie44 - 28 juin 2013 à 12:44
 Aussie44 - 29 juin 2013 à 07:02
Bonjour,

Je dispose de 4000 classeurs (aux noms incompréhensibles !) composés exactement de la même façon (même nb de lignes -5789- et même nb de colonnes -6-).
J'ai besoin de regrouper les infos contenues dans chaque classeur dans un classeur global de la manière suivante :
1) dans la Feuil1, j'ai besoin de reporter les données de la colonne D de chaque classeur autrement dit la colonne D du classeur 1, puis la colonne D du classeur 2 et ainsi de suite...
2) dans la Feuil2, j'ai besoin de reporter les données de la colonne E de chaque classeur autrement dit la colonne E du classeur 1, puis la colonne E du classeur 2 et ainsi de suite...
3) dans la feuil3, reporter les données de la colonne F de chaque classeur, autrement dit la colonne F du classeur 1, puis la colonne F du classeur 2 et ainsi de suite...
Est-ce que quelqu'un aurait une solution à m'apporter car je patauge complètement !!!

2 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
28 juin 2013 à 13:30
Bonjour,

Un tel classeur de récap sera impossible à gérer.
J'explique :
Feuil1 de ton nouveau classeur, tu récupères les infos de la colonne D de 4000 classeurs.
Donc 2 choix, soit tu obtiens, dans ta feuille 1, une seule colonne de 23 156 000 lignes, soit 4000 colonnes de 5789 lignes.
Tu vois le topo?
Et ceci sur 3 feuilles....

Alors question subsidiaire, que dois tu faire à partir de cette masse de données???
1
Ce que j'aimerais c'est avoir 4000 colonnes de 5789 lignes.
Maintenant c'est possible de reconstruire non pas sur 3 feuilles mais sur 3 classeurs.
Réponse question subsidiaire, j'ai besoin de ces données pour appliquer des modèles à facteurs dynamiques.
Tu penses que ce n'est pas envisageable?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
28 juin 2013 à 14:20
Tu penses que ce n'est pas envisageable?
Je penses qu'Excel n'est pas fait pour traiter autant de données.

Réalisons un petit test.
Tes données représentent 4000 colonnes sur 5788 lignes. Le plus rapide pour réaliser ceci est de passer par une variable tableau qui mémorise toutes tes données.
Cette macro remplit et restitue, dans une feuille excel, le nombre de données que tu souhaites.
Essaye là et dis nous le résultat :

Option Explicit

Sub remplir()
Dim Lign As Long, Col As Long, TablDonnées(4000, 5789)
Dim t

t = Timer
'remplir
For Lign = 0 To 5788
    For Col = 0 To 3999
        TablDonnées(Col, Lign) = 1
    Next
Next
'restituer
Application.ScreenUpdating = False
Range("A1").Resize(UBound(TablDonnées, 2), UBound(TablDonnées, 1)) = Application.Transpose(TablDonnées)
Application.ScreenUpdating = True
MsgBox "réalisé en : " & Timer - t & " secondes"
End Sub


Pour l'utiliser :
- fermer toutes les applications,
- ouvrir un nouveau classeur excel,
- taper ALT+F11
- insertion/Module
- copier-coller le code dans le module
- fermer la fenêtre visual basic editor
- depuis n'importe qu'elle feuille du classeur excel taper ALT+F8
- choisir remplir
- cliquer sur exécuter

Pour info, chez moi, avec Excel 2010, Seven et un bon petit pc, le message d'erreur : "mémoire insuffisante, veuillez fermer toutes les applications blablabla" apparaît...
Si quelqu'un d'autre sait comment je peux y remédier...
1
Je viens d'essayer avec excel 2007 et j'ai le message suivant "Erreur d'exécution 1004 - Erreur définie par l'application ou par l'objet".
Incompatibilité excel 2007 et excel 2010?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 751
28 juin 2013 à 14:51
Je ne vois rien d'incompatible, et je viens de retester, ça fonctionne avec moins de données.
Essaye :
Option Explicit

Sub remplir()
Dim Lign As Long, Col As Long, TablDonnées(400, 578)
Dim t

t = Timer
'remplir
For Lign = 0 To 578
    For Col = 0 To 399
        TablDonnées(Col, Lign) = 1
    Next
Next
'restituer
Application.ScreenUpdating = False
Range("A1").Resize(UBound(TablDonnées, 2), UBound(TablDonnées, 1)) = Application.Transpose(TablDonnées)
Application.ScreenUpdating = True
MsgBox "réalisé en : " & Timer - t & " secondes"
End Sub
0
Oui ca fonctionne ! J'ai essayé avec 1000 colonnes et 5800 lignes et c'est ok.
Dans ce cas, ne serait-il pas possible de scinder mon échantillon en plusieurs sous-échantillons. Au lieu de regrouper mes données dans un classeur avec 3 feuilles composées chacune de 4000 colonnes et 5788 lignes, ne peut-on pas les regrouper par colonnes de 1000 ce qui me ferait 4 classeurs au lieu d'un seul.
Je pourrais ensuite concaténer les fichiers.
0