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 Sub

Et 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 Sub

Mytå

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 Sub
Sub testQuery()
  fich$ = "D:\ExempleTris.xls"
  Feuille$ = "Feuil1"
  QueryWorksheet fich, Feuille
End Sub

Mytå

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:=False

Bonne journée

EDIT

En complément regardes ce fichier si cela peut t'intéresser

Bonne journée

30carole91.zip (65.88 Ko)

Bonjour Banzai64,

Je teste dès demain matin

Merci pour ton aide !

Carole

Rechercher des sujets similaires à "aide macro"