Aide sur macro
Bonsoir,
Je travaille sous excel 2003 et j'ai quelques difficultés pour finaliser une macro...
j'ai un fichier excel "Conso.xls" qui contient 22 feuilles nommées étab1, étab2.... étab22
A un endroit précis sous le réseau au bureau (par ex I:\EMPLOI\MOBILITE) sont situés 22 fichiers documentés par 22 interlocuteurs différents.
J'ai besoin, chaque fin de mois, de compiler toutes les données des 22 interlocuteurs sur un seul fichier pour faire des stats.
Sur mon fichier Conso, j'ai un 23ème onglet qui me permet de compiler les 22 premiers grâce à une macro... je peux ensuite faire les TCD que je veux. Bon, ça c'est bon.
Mon problème porte sur le rapatriement des 22 fichiers (tous configurés de la même façon, une seule feuille m'intéresse dans chacun d'eux : "base de données")
je voudrais écrire un code vba dans mon fichier Conso qui me permettrait, sans ouvrir au préalable les 22 fichiers de :
ouvrir le fichier étab1, copier la feuille "base de données", la coller dans la feuille "étab1" de mon fichier conso et fermer le fichier étab1
ouvrir étab2, copier la feuille "base de données", la coller dans la feuille "étab2" de mon fichier conso et fermer le fichier étab2
.... idem jusqu'au 22ème
j'ai cherché, j'ai testé... mais rien ne fonctionne !
Merci d'avance à ceux ou celles qui voudront bien me donner un petit coup de main !
Carole
Salut Carole,
carole91 a écrit :j'ai un fichier excel "Conso.xls" qui contient 22 feuilles nommées étab1, étab2.... étab22
Qu'est-ce qu'il y a sur ces feuilles ?
carole91 a écrit :je voudrais écrire un code vba dans mon fichier Conso qui me permettrait .....d'ouvrir le fichier étab1, copier la feuille "base de données", la coller dans la feuille "étab1" de mon fichier conso
Selon moi il faut dupliquer la feuille complète et en insérer une copie dans ton fichier "Conso.xls" en la renommant "étabXX" (donc il n'y a pas de raison d'avoir déjà une feuille à ce nom dans le fichier "Conso.xls") soit en copier une partie des données (lesquelles ?) et coller ces données sur la feuille existante (où ?).
A te relire.
Salut le forum
Pour lancer le débat
Lire le contenu d'une plage d'un classeur fermé (avec ADO)
Attribute VB_Name = "ADOLireClasseurFerme"
Public Sub GetXLWbkData(FileName As String, RangeName As String)
Dim dbConnection As ADODB.Connection
Dim rs As ADODB.Recordset
Dim dbConnectionString As String
dbConnectionString = "DRIVER={Microsoft Excel Driver (*.xls)};ReadOnly=1;" _
& "DBQ=" & FileName
Set dbConnection = New ADODB.Connection
dbConnection.Open dbConnectionString
Set rs = dbConnection.Execute("[" & RangeName & "]")
Range("A1") = rs.Fields(0).Name
Range("A2").CopyFromRecordset rs
rs.Close
dbConnection.Close
Set rs = Nothing
Set dbConnection = Nothing
End Sub
Sub test()
GetXLWbkData "D:\TestADO.xls", "A1:A10"
End SubEt une autre façon pour le faire
Importer le contenu d'une feuille de calcul d'un classeur fermé
Attribute VB_Name = "ADOImporterFeuilleEntiere"
'importer le contenu d'une feuille de calcul d'un classeur fermé
'(seules les données sont importées, pas les mises en forme)
Sub testQuery()
fich$ = "D:\ExempleTris.xls"
Feuille$ = "Feuil1"
QueryWorksheet fich, Feuille
End Sub
Public Sub QueryWorksheet(NomFichier$, Feuille$)
'Rob Bovey, mpep
'nécessite une référence à la librairie
'Microsoft ActiveX Data Object 2.x Library
Dim rsData As ADODB.Recordset
Dim szConnect As String
Dim szSQL As String
''' Crée la chaîne de connexion
szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & NomFichier & ";" & _
"Extended Properties=Excel 8.0;"
' La requête est basée sur le nom de la feuille. Ce nom
' doit se terminer par un $ et doit être entouré de crochets droits.
' Adapter ce nom à vos besoins
szSQL = "SELECT * FROM [" & Feuille & "$];"
Set rsData = New ADODB.Recordset
rsData.Open szSQL, szConnect, adOpenForwardOnly, _
adLockReadOnly, adCmdText
''' Vérifie qu'on a bien reçu des données
If Not rsData.EOF Then
Feuil1.Range("A1").CopyFromRecordset rsData
Else
MsgBox "Aucun enregistrement renvoyé.", vbCritical
End If
''' On nettoie pour finir...
rsData.Close
Set rsData = Nothing
End SubMytå
carole91 a écrit :j'ai un fichier excel "Conso.xls" qui contient 22 feuilles nommées étab1, étab2.... étab22
Qu'est-ce qu'il y a sur ces feuilles ?
Avant de lancer la macro, elles contiennent les bases de données du mois précédent.
Ma macro, au début (avnt de tenter d'ouvrir les 22 fichiers et d'aller chercher les données actualisées) efface les données des 22 feuilles
carole91 a écrit :je voudrais écrire un code vba dans mon fichier Conso qui me permettrait .....d'ouvrir le fichier étab1, copier la feuille "base de données", la coller dans la feuille "étab1" de mon fichier conso
Selon moi il faut dupliquer la feuille complète et en insérer une copie dans ton fichier "Conso.xls" en la renommant "étabXX" (donc il n'y a pas de raison d'avoir déjà une feuille à ce nom dans le fichier "Conso.xls") soit en copier une partie des données (lesquelles ?) et coller ces données sur la feuille existante (où ?).
pourquoi pas.. mais ça veut dire que la macro, avant d'aller chercher les 22 feuilles à insérer dans le fichier Conso, doit supprimer les 22 feuilles du mois précédent.
Les feuilles "base de données" contiennent 1 ligne de titre puis 1 ligne par salarié et environ 30 données pour chacun (=colonnes). Toutes les données sont à coller tout simplement en cellule A1
le nombre de ligne est variable dans les 22 fichiers, mais ça c'est pas bien grave... à ce stade
ma seconde macro qui compile les 22 feuilles du fichier conso sur la 23ème, elle, par contre, va rechercher le nombre de lignes dans chaque feuille pour que ma base compilée n'ait pas de ligne à blanc
A te relire.[/quote]
-- 27 Avr 2011, 21:38 --
Bonsoir Myta,
Merci, je teste demain, je n'ai pas mon fichier (professionnel) à mon domicile...
Par contre, j'ai pas un grand niveau en VBA et tes propositions me semblent un peu compliquées pour moi, je ne suis pas certaine de savoir les adapter...
Je ne vois pas bien par exemple à quel moment je mets le nom des 22 fichiers
J'essaie et te tiens au courant...
Re le forum
Tu adaptes un des codes suivants avec une boucle sur le nom des fichiers.
Sub test()
GetXLWbkData "D:\TestADO.xls", "A1:A10"
End SubSub testQuery()
fich$ = "D:\ExempleTris.xls"
Feuille$ = "Feuil1"
QueryWorksheet fich, Feuille
End SubMytå
Bonjour,
La macro est vraiment trop compliquée pour moi... je n'arrive pas à la faire fonctionner
Une idée plus simple ?
-- 28 Avr 2011, 12:48 --
J'ai trouvé une solution :
Dim wbetab1 As Workbook
... idem pour les 22 établissements
Set wbetab1 = Workbooks.Open("I:\EMPLO\MOBILITE\Reporting mensuel\Etab1.xls")
Windows("Etab1.xls").Activate
Sheets("Base de données").Select
Range("A1:cO" & Cells(Rows.Count, "A").End(xlUp).Row).Copy
Windows("Fichier de consolidation.xls").Activate
Sheets("Etab1").Select
Range("A1").Select
ActiveSheet.Paste
Workbooks("Etab1.xls").Close Savechanges:=False
Et je répete pour les 21 autres fichiers
Certainement un peu lourd mais ça marche... un peu lent certes !
Par contre, encore un petit truc à régler, à chaque fois que la macro copie/colle les données dans le fichier Conso, une fenêtre s'ouvre pour me dire que le presse papier contient des données et me demande si je veux les conserver ou non.... je ne veux pas les conserver et souhaiterais que cette fenetre n'apparaisse pas
que dois je faire ?
Merci d'avance
Carole
Bonjour
Une fois ta page copiée purge le ClipBoard
ActiveSheet.Paste
Application.CutCopyMode = False
Workbooks("Etab1.xls").Close Savechanges:=FalseBonne journée
EDIT
En complément regardes ce fichier si cela peut t'intéresser
Bonne journée
Bonjour Banzai64,
Je teste dès demain matin
Merci pour ton aide !
Carole