Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/12/2010, 10h34   #1
Invité régulier
 
Inscription : février 2009
Messages : 17
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 17
Points : 8
Points : 8
Par défaut Fusion de plusieurs fichiers excel

Bonjour,

N'ayant pas trouver une solution sur le forum, je me permets de vous solliciter pour un petit code de module access.

En fait, je voudrais fusionner plusieurs fichiers excel d'un dossier 1, pour le mettre dans un fichier excel contenu dans le dossier 2, ce fichier devant être créer et ayant la même structure que les fichiers excel du dossier 1. Avec une petite contrainte : si le fichier destination est plein, on crée un nouveau fichier.

Je suis nouveau en vba et je ne sais pas comment m'y prendre. Pouvez-vous m'aider s'il vous plait?
Nanty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2010, 11h35   #2
Membre confirmé
 
Avatar de spaiku
 
Chef de projet MOA
Inscription : septembre 2007
Messages : 191
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chef de projet MOA
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2007
Messages : 191
Points : 250
Points : 250
Bonjour,

j'ai écrit quelque chose qui fait sensiblement la même chose. Je te laisse regarder le fichier joint, il y a même une doc !

J'ai prévu d'en faire une v3 qui permettra à l'utilisateur de sélectionner les onglets du fichier de destination qu'il souhaite prendre en compte.

En revanche, je ne crée pas de nouveau fichier lorsque le premier atteint un nombre de lignes déterminé.

Edit: évidemment, c'est du VBA Excel, donc il va falloir adapter un peu, mais la démarche reste la même.
Fichiers attachés
Type de fichier : zip Fusion v2.zip (89,4 Ko, 23 affichages)
spaiku est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2010, 14h59   #3
Invité régulier
 
Inscription : février 2009
Messages : 17
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 17
Points : 8
Points : 8
Merci beaucoup pour ta réponse, plutôt complète et mais complexe!
Je visais surtout un truc simple, du genre on copie les données du fichier excel dans un variant tmp, on ferme et on ajoute tmp dans un variant global T puis on vide t. Après on crée le fichier excel final et on y insère les données de T et on passe au fichier excel suivant.
Nanty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 12h07   #4
Invité régulier
 
Inscription : février 2009
Messages : 17
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 17
Points : 8
Points : 8
Je me retourne encore vers le forum car il y a un souci sur le code que j'ai essayé :

Citation:
Option Compare Database
Sub FusionClasseur()
Dim oFSO, oFl
Dim strepsource, strepdest
Dim tmp As Variant
Dim T As Variant

Dim xlApp1 As Excel.Application
Dim xlApp2 As Excel.Application
Dim xlSheet1 As Excel.Worksheet
Dim xlSheet2 As Excel.Worksheet
Dim xlBook1 As Excel.Workbook
Dim xlBook2 As Excel.Workbook
Dim strPath1 As String
Dim strPath2 As String
Dim i, j, x, y As Long

strepsource = "..." 'répertoire source
strepdest = "..." 'répertoire de destination

Set xlApp1 = CreateObject("Excel.Application")

Set oFSO = CreateObject("Scripting.FileSystemObject")
If oFSO.FolderExists(strepsource) Then

For Each oFl In oFSO.GetFolder(strepsource).Files
Set xlBook1 = xlApp1.Workbooks.Open(strepsource & "\" & oFl.Name)
'On manipule la feuille
Set xlSheet1 = xlBook1.ActiveSheet
'Affecter les données dans tmp
tmp = xlSheet1.Range("A1:Z2000").value
For i = 0 To UBound(tmp, 1)
For j = 0 To UBound(tmp, 2)
For x = 0 To UBound(T, 1) ********
For y = 0 To UBound(T, 2)
While T(x, y) = ""
tmp(i, j) = T(x, y)
Wend
Next y
Next x
Next j
Next i

Erase tmp
Next
End If

'on crée le fichier excel de destination
Set xlApp2 = CreateObject("Excel.Application")
Set xlBook2 = xlApp2.Workbooks.Add
xlBook2.Sheets("Feuil2").Delete
xlBook2.Sheets("Feuil3").Delete

Set xlSheet2 = xlBook2.Worksheets.Add
xlBook2.SaveAs strepdest & "recap.xls"

Set xlBook2 = xlApp1.Workbooks.Open(strepdest & "\" & "recap.xls")

i = 0
While Range("A" & i & "").value = ""
xlSheet2.Range("A" & i & ":Z2000").value = T
i = i + 1
Wend

xlBook2.Save
End Sub
au lancement, l'erreur 13 "Incompatibilité de type apparaît" au niveau de la ligne que j'ai marqué par des ***

Quelqu'un pourrait-il m'aider à éclairer ma lanterne?

Merci d'avance
Nanty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 12h40   #5
Membre éclairé
 
Inscription : janvier 2005
Messages : 445
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 445
Points : 348
Points : 348
Salut,
parceque T est vide.
qu'elle est le rôle de T.
Bonne chance.
Merci
__________________
Deux, n'apprendront pas; le timide et l'arrogant
hocine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 12h50   #6
Invité régulier
 
Inscription : février 2009
Messages : 17
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 17
Points : 8
Points : 8
Salut Hocine,

Comme j'ai marqué au message précédent, T est un variant global.

Ce que je veux faire au fait c'est récupérer un tableau excel de plusieurs fichiers excel contenu dans un dossier, l'affecter à un variant tmp, copier le contenu de ce variant dans un variant global T, puis recopier le contenu de T dans un fichier excel final qui regroupe donc les données de plusieurs autres fichiers excel.
Nanty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/12/2010, 13h10   #7
Membre éclairé
 
Inscription : janvier 2005
Messages : 445
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 445
Points : 348
Points : 348
salut,
si j'ai biedn compris, vous n'avez pas besoin ndes 2 variables x et y le i et le j fairont l'affaire.
et comme je l'ai dit dans le précédent message T est vide !!!!
autre chose
t(i,j)=temp(i,j) et non l'nverse
Bonne Chance.
Mecri.
__________________
Deux, n'apprendront pas; le timide et l'arrogant
hocine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2011, 15h28   #8
Invité de passage
 
Inscription : janvier 2011
Messages : 1
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 1
Points : 1
Points : 1
Citation:
Envoyé par spaiku Voir le message
Bonjour,

j'ai écrit quelque chose qui fait sensiblement la même chose. Je te laisse regarder le fichier joint, il y a même une doc !

J'ai prévu d'en faire une v3 qui permettra à l'utilisateur de sélectionner les onglets du fichier de destination qu'il souhaite prendre en compte.

En revanche, je ne crée pas de nouveau fichier lorsque le premier atteint un nombre de lignes déterminé.

Edit: évidemment, c'est du VBA Excel, donc il va falloir adapter un peu, mais la démarche reste la même.
Une fois la fusion intervenue, rien ne se passe ... je ne sis pas où est le fichier de résultat. Comment choisir le fichier de destination, ou bien quel est il par défaut ?
azertyuiop753 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2011, 16h35   #9
Membre confirmé
 
Avatar de spaiku
 
Chef de projet MOA
Inscription : septembre 2007
Messages : 191
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Chef de projet MOA
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2007
Messages : 191
Points : 250
Points : 250
Bonjour,

les données sont collées dans la feuille active au moment de l'appel de la macro.

Si ce n'est pas le cas, n'hésite pas à me contacter par MP pour que je débugge.
spaiku est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h29.


 
 
 
 
Partenaires

Hébergement Web