Fusionner plusieur Excel en VBS
Dernière réponse : dans Programmation
Bonjour,
je dois faire une macro qui permet de fusionner plusieurs Excel de même structure en un seul. J'ai choisi le VBS pour qu'il ont juste a cliquer sur une appli pour que ca marche.
mon idée de départ était d'ouvrir un fichier avec le tableau vierge et ensuite d'ouvrir un par un les fichiers remplie et copier le contenu dedans le vierge.
Seul problème, je n'arrive pas a ouvrir X fichier excel ou de les ouvrir puis fermer pour en rouvrir un avec les même variable. Il me dit impossible de lire la method Open.
Sinon j'avais penser de mettre les objets dans un tableau mais j'arrive à la même erreur.
J'ai appris de programmer (on va dire que je me débrouille) sur d'autre langage comme PHP ou Java. Je fais du VBS pour dépanner et là je galère.
je dois faire une macro qui permet de fusionner plusieurs Excel de même structure en un seul. J'ai choisi le VBS pour qu'il ont juste a cliquer sur une appli pour que ca marche.
mon idée de départ était d'ouvrir un fichier avec le tableau vierge et ensuite d'ouvrir un par un les fichiers remplie et copier le contenu dedans le vierge.
Seul problème, je n'arrive pas a ouvrir X fichier excel ou de les ouvrir puis fermer pour en rouvrir un avec les même variable. Il me dit impossible de lire la method Open.
'Selection du dossier
Set Shell = CreateObject("Shell.Application")
Set Folder = Shell.BrowseForFolder(hWnd, "Veuillez selectionner votre Dossier", 0, "")
Dim dossier
dossier = Folder.items.Item.Path
'ouverture du fichier avec le tableau vierge
set oXL = WScript.CreateObject("EXCEL.application" )
oXL.Visible = True
oXL.workbooks.open fso.GetFolder("./.") & "\XXXXX.xls"
set xlAp = CreateObject("excel.application")
xlAp.Visible = True
'boucle pour ouvrir et fermer les fichier excel du dossier
For Each fichier In fso.GetFolder(dossier).Files
Set fileItem = fso.GetFile(fichier)
if(LCase(Right(fileItem,3)) = "xls") Then
set xlWb = xlAp.Workbooks.open( Fichier )
xlWb.close
End if
Next
Sinon j'avais penser de mettre les objets dans un tableau mais j'arrive à la même erreur.
set xlAp = CreateObject("excel.application")
xlAp.Visible = True
For Each fichier In fso.GetFolder(dossier).Files
Set fileItem = fso.GetFile(fichier)
if(LCase(Right(fileItem,3)) = "xls") Then
imax = imax + 1
ReDim Preserve xlWb(imax)
set xlWb(imax) = xlAp.Workbooks.open( Fichier )
End if
Next
J'ai appris de programmer (on va dire que je me débrouille) sur d'autre langage comme PHP ou Java. Je fais du VBS pour dépanner et là je galère.
Autres pages sur : fusionner plusieur excel vbs
Lassé par la pub ? Créez un compte
Meilleure solution
Au temps pour moi, si Folder.items.Item.Path ne fonctionne effectivement pas, Folder.Path non plus. Utilise Folder.Self.Path à la place.
Tu as nettoyé bizarrement !
Ligne 2 : Pourquoi cet objet WScript ?
Ligne 4 et 5 : Pourquoi deux objets FileSystem ?
Appelle tes objets comme tu veux. Mais reste avec une seule logique de nommage. Si tu as du oXL et du objFSA pour les objets appli XL et FileSystem, tu as du folder et du xlWB pour les objets dossier et classeur.
Et arrête avec ton ./. (ça m'énerve, mais ce n'est pas grave.)
Je n'ai pas compris. Le fichier ouvert en ligne 16 est censé exister ou va-t-on le créer ?
Voici ce que j'ai testé chez moi, et qui marche :
Je lance le script dans un répertoire qui contient un classeur qui s'appelle excel_vide.xls, et ça marche très bien.
Tu as nettoyé bizarrement !
Ligne 2 : Pourquoi cet objet WScript ?
Ligne 4 et 5 : Pourquoi deux objets FileSystem ?
Appelle tes objets comme tu veux. Mais reste avec une seule logique de nommage. Si tu as du oXL et du objFSA pour les objets appli XL et FileSystem, tu as du folder et du xlWB pour les objets dossier et classeur.
Et arrête avec ton ./. (ça m'énerve, mais ce n'est pas grave.)
Je n'ai pas compris. Le fichier ouvert en ligne 16 est censé exister ou va-t-on le créer ?
Voici ce que j'ai testé chez moi, et qui marche :
Dim fso, shapp, dossier, fichier, xlapp, xlwb
Set shapp = CreateObject("Shell.Application" )
Set fso = CreateObject("Scripting.FileSystemObject" )
Set xlapp = CreateObject("Excel.Application")
xlapp.Visible = True
xlapp.Workbooks.Open fso.GetFolder(".").Path & "\excel_vide.xls"
Set dossier = fso.GetFolder(shapp.BrowseForFolder(hwnd, "Dossier", 0, "" ).Self.Path)
For Each fichier In dossier.Files
If LCase(fso.GetExtensionName(fichier.path)) = "xls" Then
Set xlWb = xlapp.Workbooks.open( fichier.path )
MsgBox "Le classeur '" & fichier.Name & "' est ouvert"
xlWb.close
End if
Next
Je lance le script dans un répertoire qui contient un classeur qui s'appelle excel_vide.xls, et ça marche très bien.
Salut,
Y'a du très bon dans ce code
Pis du un peu moins bon quand même.
EDIT: Faux, c'est Folder.Self.Path qu'il faut utiliser.
Alors, ça t'aide ?
Y'a du très bon dans ce code
Pis du un peu moins bon quand même.
Bien. Mais Shell n'est pas déclarée.
Set Shell = CreateObject("Shell.Application" )
Bien. Mais Folder n'est pas déclarée.
Set Folder = Shell.BrowseForFolder(hWnd, "Veuillez selectionner votre Dossier", 0, "" )
Très bien
Dim dossier
T'en fais trop. Folder.Path suffit amplement
dossier = Folder.items.Item.Path
EDIT: Faux, c'est Folder.Self.Path qu'il faut utiliser.
Bien. Mais oXL n'est pas déclarée.
set oXL = WScript.CreateObject("EXCEL.application" )
Inutile. ./. c'est deux fois le répertoire courant.
oXL.workbooks.open fso.GetFolder("./." ) & "\XXXXX.xls"
Pourquoi deux applis Excel ?
set xlAp = CreateObject("excel.application" )
Très très Bien. Mais fichier n'est pas déclarée.
For Each fichier In fso.GetFolder(dossier).Files
Complètement inutile, et faux en plus. fichier est déjà une variable de type File.
Set fileItem = fso.GetFile(fichier)
Mouhais. Trop de parenthèses. Et utilise fso.GetExtensionName() plutôt que Right()
if(LCase(Right(fileItem,3)) = "xls" ) Then
Fichier est une variable de type File. Utilise Fichier.Path pour avoir son chemin.
set xlWb = xlAp.Workbooks.open( Fichier )
Alors, ça t'aide ?
J'ai suivi tes conseils, j'ai nettoyé mon script.
Je n'arrive toujours pas à ouvrir 2 classeur à la suite sur la même variable. Il me met toujours : Impossible de lire la propriété Open de la classe Workbooks
Je n'arrive toujours pas à ouvrir 2 classeur à la suite sur la même variable. Il me met toujours : Impossible de lire la propriété Open de la classe Workbooks
Dim WSHShell, fso, objFSO, Shell
Set WSHShell = CreateObject("WScript.Shell")
Set Shell = CreateObject("Shell.Application" )
Set fso = CreateObject("Scripting.FileSystemObject")
Set objFSO = CreateObject("Scripting.FileSystemObject")
'selection du dossier
Dim Folder, dossier
Set Folder = Shell.BrowseForFolder(hWnd,"Veuillez selectionner votre Dossier", 0, "")
dossier = Folder.items.Item.Path
'ouverture du tableau vierge
dim oXL
set oXL = WScript.CreateObject("EXCEL.application" )
oXL.Visible = True
oXL.workbooks.open fso.GetFolder("./.") & "\Anomalies BEL gravité 1 et 2.xls"
'boucle pour ouvrir les fichiers excel du dossier séléctionner
Dim fichier
For Each fichier In fso.GetFolder(dossier).Files
if(fso.GetExtensionName(fichier.path) = "xls") Then
msgbox fichier.path
Dim xlwb
set xlWb = oXL.Workbooks.open( fichier.path )
xlWb.close
End if
Next
Ton code correspond bien a ce que je veux faire.
Mais j'ai toujours mon problème, j'arrive à ouvrir un seul fichier Excel via la boucle, quand il essaye d'ouvrir un 2éme fichier dans le répertoire, il affiche une erreur :
Ligne 12
Caract : 10
erreur : impossible de lire la propriété Open de la classe Workbook.
Code : 800A03EC
Source : Microsoft Excel
Je ne vois pas ou ca bloque. Tu as essayé avec plusieurs fichier dans un répértoire.
Mais j'ai toujours mon problème, j'arrive à ouvrir un seul fichier Excel via la boucle, quand il essaye d'ouvrir un 2éme fichier dans le répertoire, il affiche une erreur :
Ligne 12
Caract : 10
erreur : impossible de lire la propriété Open de la classe Workbook.
Code : 800A03EC
Source : Microsoft Excel
Je ne vois pas ou ca bloque. Tu as essayé avec plusieurs fichier dans un répértoire.
Je viens de refaire le test et en effet j'avais oublié le S de workbooks.
Ligne 12
Caract : 10
erreur : impossible de lire la propriété Open de la classe Workbooks.
Code : 800A03EC
Source : Microsoft Excel
Sinon je viens de trouver le problème. Le 2éme fichier excel que je voulais ouvrir été vérolé donc cela ne venais pas du code mais du fichier.
Je vous jure, je me sens con.
Merci de votre aide, cela ma permit de rendre mon code beaucoup plus propre.
Ligne 12
Caract : 10
erreur : impossible de lire la propriété Open de la classe Workbooks.
Code : 800A03EC
Source : Microsoft Excel
Sinon je viens de trouver le problème. Le 2éme fichier excel que je voulais ouvrir été vérolé donc cela ne venais pas du code mais du fichier.
Je vous jure, je me sens con.
Merci de votre aide, cela ma permit de rendre mon code beaucoup plus propre.
Lassé par la pub ? Créez un compte
- Contenus similaires :
- ForumExcel si sur plusieur cellule
- ForumFusionner deux excel
- articlesFusionner tableau excel
- ForumFusionner des onglets excel
- ForumFusionner 2 tableau excel
- ForumFusionner des doublons sur excel
- ForumFusionner 2 fichiers excel
- ForumFusionner des colonnes sous excel
- ForumExcel fusionner 2 colonne
- ForumExcel fusionner 2 cellules
- Voir plus