Rassembler des donnees de plusieurs classeur fermer dans un meme tableau

Delux

XLDnaute Occasionnel
Bonjour a tous,

Desole pour les accents, je travaille sur clavier QWERTY.

En faisant quelques recherches, j'ai pu trouver une macro de MichelXLD qui permet de rassembler des donnees de plusieurs classeurs fermes dans un classeur general. Voici cette fameuse macro qui est geniale:

Code:
Option Explicit
Option Base 1
Sub ChercheFichiersFermesV01()
Dim X As Integer, NbFichiers As Integer, Y As Integer
Dim Tableau() As String
Dim Direction As String
Dim Valeur As Double

Application.ScreenUpdating = False
Direction = Dir(ThisWorkbook.Path & "\*.xls")
Do While Len(Direction) > 0 'liste tous les classeurs du repertoire
NbFichiers = NbFichiers + 1
ReDim Preserve Tableau(1 To NbFichiers)
Tableau(NbFichiers) = Direction
Direction = Dir()
Loop

If NbFichiers > 0 Then
For X = 1 To NbFichiers 'boucles sur les classeurs

    ' pour ne pas prendre en compte le classeur contenant la macro (synthese)
    If Tableau(X) <> ThisWorkbook.Name Then
    
    For Y = 1 To 120 'boucle sur les produits à récupérer
    'recupere la valeur deja existante dans le tableau de synthese
    Valeur = ActiveSheet.Cells(Y + 4, 2)
    
    With ActiveSheet.Cells(Y + 4, 2) 'ajout des nouvelles valeurs
    .Formula = "='" & ThisWorkbook.Path & "\[" & Tableau(X) & "]" & "Feuil1" & "'!" _
    & Cells(Y + 1, 2).Address
    .Value = .Value + Valeur
    End With
    
    Next Y
    
    End If
    Next X
End If

Application.ScreenUpdating = True
End Sub

Cependant je ne suis encore qu'un debutant en macro et je peine un peu a la comprendre et a la maitriser.
De plus elle fait un calcule des donnees provenant des classeurs fermes et ce n'est pas ce que je cherche.

Ma question est la suivante, est-il possible de l'adapter pour recuperer des informations dans plusieurs classeurs fermes dont le noms sera different (template - mag, template - clem, ...etc) et de les coller dans un fichier general (Excel for PESG coordination meeting.xls) les unes apres les autres.

Exemple: le classeur general ressemblera a ceux nommes template (je l'ai mis en piece jointe. Ne faites pas attention aux macros deja en place).
Colonne A: Item/Project
Colonne B: Owner
Colonne C: Action
Colonne D: Due date/Frequence
Colonne E: Comment

Les classeur fermes auront la meme mise en page que le classeur general, mais ne possederont que les informations remplies par un seul utilisateurs.

J'aimerais donc que tous les classeurs template se copient/collent dans le classeur general (MOM Following).

J'ai essaye de la modifer mais je ne la comprends pas integralement, ce qui pose donc probleme.

Si quelau'un auvait une idee pour la modifier ou pouvait me l'expliquer plus en details afin que je la modifie moi meme, je suis preneur.

Je vous remercie d'avance.

Cordialement,

Delux
 

Pièces jointes

  • Excel for PESG coordination meeting.xls
    51.5 KB · Affichages: 52
  • Excel for PESG coordination meeting.xls
    51.5 KB · Affichages: 59
  • Excel for PESG coordination meeting.xls
    51.5 KB · Affichages: 52
Dernière édition:

Delux

XLDnaute Occasionnel
Re : Rassembler des donnees de plusieurs classeur fermer dans un meme tableau

Salut Kjin,

Merci pour ce lien.
J'ai extrait les fichier exemple pour voir ce que ca donnerait mais lorsque j'appuis sur le bouton, cela ne fonctionne pas.

Faut entrer manuellement l'adresse?
Code:
pfile = ActiveWorkbook.Path & "\archive\" 'indiquer ici le chemin du répertoire

Si oui a quel endroit?

Merci beaucoup

Cordialement
 

kjin

XLDnaute Barbatruc
Re : Rassembler des donnees de plusieurs classeur fermer dans un meme tableau

Bonjour,
J'ai extrait les fichier exemple pour voir ce que ca donnerait mais lorsque j'appuis sur le bouton, cela ne fonctionne pas.
Il s'agissait d'un exemple et donc pas étonnant, et vaut mieux éviter....
Faut entrer manuellement l'adresse? Si oui a quel endroit?
Dans la macro, il faut indiquer le chemin vers le répertoire qui contient les fichiers à importer
Il faut l'indiquer dans la macro, sinon il faudra passer par une boite de dialogue pour choisir, donc tu nous diras
Ici, par exemple les fichiers sont dans le dossier archive, sous-dossier du répertoire qui contient le fichier actif
(celui qui contient la macro)
Code:
Sub zzzzzzzzz()
Application.ScreenUpdating = False
pfile = ActiveWorkbook.Path & "\archive\" 'indiquer ici le chemin du répertoire
nfile = Dir(pfile)
i = 2
Range("A2:E65000").ClearContents
Do Until nfile = ""
    Range("J1").Formula = "=COUNTA('" & pfile & "[" & nfile & "]sheet1'!$A$1:A2000)"
    j = Int(Range("J1")) + i - 1
    Range("A" & i & ":E" & j) = "='" & pfile & "[" & nfile & "]sheet1'!A2"
    i = j
    nfile = Dir()
Loop
Range("J1").Clear
With Range("A2:E" & Range("A65000").End(xlUp).Row)
    .Value = .Value
End With
End Sub
A+
kjin
 

Pièces jointes

  • delux.zip
    50.5 KB · Affichages: 44

Delux

XLDnaute Occasionnel
Re : Rassembler des donnees de plusieurs classeur fermer dans un meme tableau

kjin,

Un grand merci pour votre aide.
Je vais essayer d'appliquer la macro a mon fichier originel.
Je vous tiens au courrant.

Merci beaucoup

Cordialement,

Delux
 

Delux

XLDnaute Occasionnel
Re : Rassembler des donnees de plusieurs classeur fermer dans un meme tableau

Kjin,

Petit dernier coup de main, dans la macro qui me permet de filtrer (bouton 2) j'obtiens une erreur 400 alors que la macro a fonctionnee.

Pourriez-vous me dire d'ou vient l'erreur?

Aussi, est ce normal que, sur la derniere ligne, en utilisant votre macro un 0 apparaisse?

Merci d'avance

Cordialement,

Delux
 

Pièces jointes

  • Excel for PESG coordination meeting.xls
    66 KB · Affichages: 56
  • Excel for PESG coordination meeting.xls
    66 KB · Affichages: 66
  • Excel for PESG coordination meeting.xls
    66 KB · Affichages: 65
Dernière édition:

kjin

XLDnaute Barbatruc
Re : Rassembler des donnees de plusieurs classeur fermer dans un meme tableau

Petit dernier coup de main, dans la macro qui me permet de filtrer (bouton 2) j'obtiens une erreur 400 alors que la macro a fonctionnee.
Je ne peux pas dire, n'as tu pas d'autres types de fichiers ? voir la modif
Aussi, est ce normal que, sur la derniere ligne, en utilisant votre macro un 0 apparaisse?
Corrigé
Code:
Sub zzzzzzzzz()
Application.ScreenUpdating = False
pfile = ActiveWorkbook.Path & "\archive\" 'indiquer ici le chemin du répertoire
nfile = Dir(pfile & "*.xls") 'ou xlsx ou xlsm
i = 2
Range("A2:E65000").ClearContents
Do Until nfile = ""
    Range("J1").Formula = "=COUNTA('" & pfile & "[" & nfile & "]sheet1'!$A$1:A2000)"
    j = Int(Range("J1")) + i - 1
    Range("A" & i & ":E" & j - 1) = "='" & pfile & "[" & nfile & "]sheet1'!A2"
    i = j
    nfile = Dir()
Loop
Range("J1").Clear
With Range("A2:E" & Range("A65000").End(xlUp).Row)
    .Value = .Value
End With
End Sub
 

Delux

XLDnaute Occasionnel
Re : Rassembler des donnees de plusieurs classeur fermer dans un meme tableau

Kjin,

Merci pour votre aide.
Les 0 ont disparu.

L'erreur 400 venait du fait que mon code etait inscrit dans la Sheet1. j'ai cree un module et maintenant ca fonctionne parfaitement.

Merci beaucoup

Cordialement,

Delux
 

Delux

XLDnaute Occasionnel
Re : Rassembler des donnees de plusieurs classeur fermer dans un meme tableau

Bonjour Kjin,

Derniere petite question et promis je ne vous embete plus ^^.

Est-il possible de conserver le format de texte des fichier template?
Je m'explique, si par exemple dans le fichier Template - Clem.xls, certaines lignes sont en GRAS, est il possible qu'elles apparaissent en GRAS dans le classeur cible?
C'est surtout le GRAS qui m'interesse en fait ^^

Merci d'avance.

Cordialement,

Delux
 

Delux

XLDnaute Occasionnel
Re : Rassembler des donnees de plusieurs classeur fermer dans un meme tableau

Bonjour Kjin,

Pourriez-vous m'expliquer un peu plus en details votre macro car j'aimerais l'adapter a un autre document (deux tableaux differents):
Code:
Do Until nfile = ""
    Range("J1").Formula = "=COUNTA('" & pfile & "[" & nfile & "]sheet1'!$A$1:A2000)"
    j = Int(Range("J1")) + i - 1
    Range("A" & i & ":E" & j - 1) = "='" & pfile & "[" & nfile & "]sheet1'!A2"
    i = j
    nfile = Dir()
Loop
Range("J1").Clear
With Range("A2:E" & Range("A65000").End(xlUp).Row)
    .Value = .Value
End With

En effet, j'aimerais ne selectionner sur un tableau source que les elements contenus dans les colonnes N (donc N4& Range("A65000").End(xlUp).Row) et P (P4 & Range("A65000").End(xlUp).Row) et les coller respectivement dans les colonnes B (B2 & Range("A65000").End(xlUp).Row) et D (D2 & Range("A65000").End(xlUp).Row) de mon tableau cible.

J1 est libre sur les deux pour effectuer le COUNTA.

En vous remerciant par avance.

Cordialement,

Delux
 

Delux

XLDnaute Occasionnel
Re : Rassembler des donnees de plusieurs classeur fermer dans un meme tableau

Bonjour,

Finallement j'y suis arrive.
Voici ma solution pour information :

Code:
Sub Macro1()

Application.ScreenUpdating = False

pfile = ActiveWorkbook.Path & "\ECM\" 'indiquer ici le chemin du répertoire
nfile = Dir(pfile & "*.xls")

i = 2

Union(Range("A2:B500"), Range("D2:D500")).ClearContents

Do Until nfile = ""
    Cells(i, 20).FormulaArray = "=COUNTA('" & pfile & "[" & nfile & "]Comments'!$A$2:A2000)" 
    
    For j = 1 To Cells(i, 20)
        Cells(i, 2) = "='" & pfile & "[" & nfile & "]Comments'!$N$" & j + 3 
        If Cells(i, 2) = 0 Then Cells(i, 2) = ""
        Cells(i, 4) = "='" & pfile & "[" & nfile & "]Comments'!$P$" & j + 3
        If Cells(i, 4) = 0 Then Cells(i, 4) = ""
        i = i + 1
    Next
    
    nfile = Dir()
Loop

Columns(20).Cells.Clear

With Range("B2:B" & Range("B65000").End(xlUp).Row)
    .Value = .Value

End With
With Range("D2:D" & Range("D65000").End(xlUp).Row)
    .Value = .Value
    
End With

End Sub

A bientot
Delux
 

Discussions similaires

Statistiques des forums

Discussions
312 211
Messages
2 086 291
Membres
103 171
dernier inscrit
clemm