Parmi fichiers choix onglet choix colonnes vers un fichier, un seul onglet, colonnes

meleto

XLDnaute Nouveau
Bonjour à tous,

J'ai parcouru plusieurs forums. J'ai trouver des choses intéressantes mais rien n'y fait. Je souhaite donc me lancer auprès de vous.
Pour le contexte : j'ai 50 fichiers Excel (nommés par leur date) qui contiennent 3 onglets. Seul chaque premier onglet m'intéresse.
Et dans chaque onglet, seules les colonnes A et G me concernent.
Je souhaiterai un fichier excel "synthèse" qui contienne une macro qui puisse placer dans son seul premier onglet :
colonne A, colonne G (du premier fichier) , colonne de séparation, colonne A, colonne G (du deuxième fichier), colonne de séparation, colonne A, colonne G (du troisième fichier) etc.
J'ai bien trouvé une macro qui ressemblait à un début de soluce mais arrangée par mes "soins" ça ne marche pas/plus.

Sub import()
Dim nf As String
Dim strPath As String
Dim des_fichiers_un_onglet As Workbook
Dim wbkSource As Workbook
Dim wksSource As Worksheet

strPath = ActiveWorkbook.Path
Set des_fichiers_un_onglet = ActiveWorkbook
nf = Dir(strPath & "\*.xlsm")
ChDir ActiveWorkbook.Path
nfa = Dir("*.xlsx")

Do While nf <> ""
Workbooks.Open Filename:=nfa
If wksSource.Name = "Feuil1" Then

wksSource.Copy After:=des_fichiers_un_onglet.Sheets(des_fichiers_un_onglet.Sheets.Count)
End If
nfa = Dir
Loop

End Sub

Plutôt que des ChDir ou des strPath je préfèrerais si possible de bon vieux chemins. Mes fichiers à traiter seront par exemple dans C:\Users\chat\Document1\
et mon fichier final sera dans C:\Users\chat\Document2\

Cerise sur le gâteau qui fera originale par rapport aux autres requêtes proches : comme chaque fichier fait 40 Mo (vous avez bien lu) minimum,
j'ai lu sur un forum qu'il était possible de passer par "la mémoire" d'excel/ du pc sans avoir à ouvrir chaque fichier.


Heu...que pensez-vous de tout ça ? Je joins un fichier .zip (bien fichue votre messagerie) si vous voulez ; Excel 2010 utilisé.



En vous félicitant pour les conseils et solutions que vous nous apportez, je vous remercie par avance pour votre aide.

Meleto
 

Pièces jointes

  • synthèse.xlsx
    21.2 KB · Affichages: 30
  • Dek_07_01_2014.zip
    142.2 KB · Affichages: 23
  • Dek_07_02_2014.zip
    142.2 KB · Affichages: 19
  • Dek_07_03_2014.zip
    253.2 KB · Affichages: 19
  • synthèse.xlsx
    21.2 KB · Affichages: 39
  • synthèse.xlsx
    21.2 KB · Affichages: 41

camarchepas

XLDnaute Barbatruc
Re : Parmi fichiers choix onglet choix colonnes vers un fichier, un seul onglet, colo

Bonjour ,

1 conseil :

Etant débutant , je te conseille d'utiliser un chemin du genre c:\temp\traitement qui lui est un chemin facile à utiliser ,

Si vraiment tu veux utiliser un dossier dans l'arborescence de mes documents , tu vas te procurer du travail supplémentaire , ce sont des répertoires spéciaux .

j'ai créé une petite fonction :

Function LieuMesDoc() As String
'Récupération du chemin de mes documents
Dim WshShell As Object
'
Set WshShell = CreateObject("WScript.Shell")
LieuMesDoc = WshShell.SpecialFolders("MyDocuments")
Set WshShell = Nothing
End Function

a appeler dans le module utilisateur de la façon suivante :

'Récupére le chemin de mes documents
CheminDoc = LieuMesDoc

et oui , aprés c'est toi qui vois

Bon pour le sujet à proprement parlé , je pense qu'il faut charger les valeur des différents classeurs dans une variable table,
et ensuite restituer cette table dans l'onglet synthese (Gros gain de temps)

si personne ne passe par ici te donner une solution , j'essayerai de revenir en soirée.
 

meleto

XLDnaute Nouveau
Re : Parmi fichiers choix onglet choix colonnes vers un fichier, un seul onglet, colo

Bonsoir Camarchepas,

Merci pour ta réponse. Bon conseil que voilà :) : ok, je vais mettre mes fichiers de données selon ce chemin. En cas de déménagement je sais comment modifier la macro finale en conséquence. Je vais quand même tester la macro que tu m'as envoyée, juste pour comprendre un peu mieux qui appelle qui/quoi et comment.
Ah...une variable table. Bon ça fait chinois pour moi mais je vois le truc, je fais le rapprochement avec MatLab. A programmer sur en VBA par contre...heu ...d'où ma venue ici.
Encore merci pour ton aide.

Meleto



Vieux proverbe : "80% des problèmes informatiques se situent entre le siège et le clavier"
 

camarchepas

XLDnaute Barbatruc
Re : Parmi fichiers choix onglet choix colonnes vers un fichier, un seul onglet, colo

Bonsoir ,

Pas testé , mais voici une solution, reste à voir si j'ai pris les bonnes colonnes .....

Code:
Sub regroupe()
Dim Info() As String
Dim Nom As String
Dim LigneFin As Long
Dim Position As Long
Nom = Dir("c:\temp\traite\*.xlsx")
Position = -2
Do
 workbooks.open "c:\temp\traite\" & nom
 With Workbooks(Nom & ".xlsx").Sheets(Nom)
   Position = Position + 2
   LigneFin = .Range("A" & Rows.Count).End(xlUp).Row
   .Range("A1:B" & LigneFin).Copy Destination:=ThisWorkbook.Sheets("synthèse").Range("A1").Offset(0, Position)
   ThisWorkbook.Sheets("synthèse").Range("B1").Offset(0, Position) = Nom
   Nom = Dir
 End With
Loop Until Nom = ""

End Sub
 

meleto

XLDnaute Nouveau
Re : Parmi fichiers choix onglet choix colonnes vers un fichier, un seul onglet, colo

Bonjour Camarchepas,

Merci pour ta réponse. Alors la macro s'arrête au niveau de la ligne

With Workbooks(Nom & ".xlsx").Sheets(Nom)

et me dit comme message d'erreur : Erreur d'exécution '9'. L'indice n'appartient pas à la sélection. J'ai essayé en mettant des guillemets un peu partout sur cette ligne mais rien n'y fait. C'est grave docteur ?

A bientôt

Meleto
 

camarchepas

XLDnaute Barbatruc
Re : Parmi fichiers choix onglet choix colonnes vers un fichier, un seul onglet, colo

Bonjour ,

La partie suivante est bien sur à adapter à ton arborescence :
Nom = Dir("c:\temp\traite\*.xlsx")
Position = -2
Do
workbooks.open "c:\temp\traite\" & nom
 

meleto

XLDnaute Nouveau
Re : Parmi fichiers choix onglet choix colonnes vers un fichier, un seul onglet, colo

Bonjour Camarchepas,

La macro m'ouvre correctement un fichier de données -> Dek_07_01_2014.xlsx par exemple. La partie :
Nom = Dir("c:\temp\traite\*.xlsx")
Position = -2
Do
workbooks.open "c:\temp\traite\" & nom

me semble bonne. C'est à la ligne :
With Workbooks(Nom & ".xlsx").Sheets(Nom)

que ça bloque. Pour le Workbooks(Nom & ".xlsx") je ne vois pas où est l'erreur d'indice. Et pour le ".Sheets(Nom) non plus : le premier onglet a le même nom que le fichier excel : Dek_07_01_2014. La macro ne te dit rien quand tu l'as fait marcher ?

Encore merci pour ton aide

Meleto
 

camarchepas

XLDnaute Barbatruc
Re : Parmi fichiers choix onglet choix colonnes vers un fichier, un seul onglet, colo

Bonjour ,

Ok , petit oubli de ma part .
il faut modifier la ligne chargeant la variable nom afin de ne pas avoir l'extention .xlsx

Nom = Replace(Dir("c:\temp\*.xlsx"), ".xlsx", "")
 

meleto

XLDnaute Nouveau
Re : Parmi fichiers choix onglet choix colonnes vers un fichier, un seul onglet, colo

Bonjour Camarchepas,

Effectivement, ça va un peu mieux. le programme rentre dans la sous-boucle "With". Ceci fait, voici ce qu'il se passe : la sous-boucle "With" est suivie. VBA va dans le fichier excel ouvert (avec le "Do" que tu as mis) prend les 2 premières colonnes et les copie sur le fichier maître "synthèse". La fin de la boucle 3with" arrive et avec ton "Until" VBA revient au "Do". Il ouvre un autre fichier excel. Et juste après ça bugue. Ce me dit "erreur d'execution '9'. L'indice n'appartient pas à la sélection."

Qu'en penses-tu ?

Merci pour ton aide

Meleto
 

camarchepas

XLDnaute Barbatruc
Re : Parmi fichiers choix onglet choix colonnes vers un fichier, un seul onglet, colo

Bonjour ,

Alors encore un truc , j'ai ajouté la fermeture du fichier de données :

Workbooks(Nom & ".xlsx").Close False 'Fermeture du classeur sans sauvegarde

Code:
Sub regroupe()
 Dim Info() As String
 Dim Nom As String
 Dim LigneFin As Long
 Dim Position As Long

Nom = Replace(Dir("c:\temp\*.xlsx"), ".xlsx", "") 
 Position = -2
 Do
  workbooks.open "c:\temp\traite\" & nom
  With Workbooks(Nom & ".xlsx").Sheets(Nom)
    Position = Position + 2
    LigneFin = .Range("A" & Rows.Count).End(xlUp).Row
    .Range("A1:B" & LigneFin).Copy Destination:=ThisWorkbook.Sheets("synthèse").Range("A1").Offset(0, Position)
    ThisWorkbook.Sheets("synthèse").Range("B1").Offset(0, Position) = Nom
    Nom = Dir
  End With
  Workbooks(Nom & ".xlsx").Close False
 Loop Until Nom = ""
 
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 046
Messages
2 084 850
Membres
102 686
dernier inscrit
Franck6950