Boucle plusieurs fichiers puis plusieurs onglets
Bonjour,
J’aurai une nouvelle fois besoin de l’aide du forum pour m’aider dans ma problématique.
J’aurai besoin de créer une boucle afin de me permettre d’aller chercher les données d’un onglet « RESUME » dans plusieurs fichiers (un ou deux par gestionnaire de paie) réparti dans un même dossier.
Une fois le fichier du gestionnaire ouvert, je prends les données à partir de la ligne 5 pour les copier dans mon fichier de synthèse où je vais compiler les différentes données – avec à chaque fois un onglet par nom de gestionnaire.
Le but étant d’avoir une synthèse des données du mois de paie en cours par gestionnaire – pour ensuite synthétiser tout ça (une macro existe déjà et fonctionne nickel).
Je débute sur les macros et je ne vois pas trop comment faire une boucle pour lui dire d’ouvrir chaque fichier puis copier les données de l’onglet RESUME dans l’onglet au nom du gestionnaire.
J’ai synthétiser toutes les informations dans l’onglet « Param »
Pourriez-vous m’aider à débuter ?
Voici la macro actuelle (que je vais répéter ... lol)
Sub Importer()
Dim Chemin As String
Chemin = Range("C2")
Fichier = Range("C5")
Workbooks.Open Filename:=Chemin & Fichier
Sheets("RESUME").Select
Range("A5:BE100").Copy
Windows("Matrices Prev.xlsm").Activate
Sheets("Sylvie.P").Select
Range("A5").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Windows("Matrice Prev Inval RT SAS, ARQUUS - Sylvie P.xlsm").Activate
ActiveWindow.Close
End Sub
et le lien vers le fichier excel
Un grand merci pour votre aide.
Cédric
- Messages
- 1'794
- Excel
- 2010
- Inscrit
- 25/08/2014
- Emploi
- Consultant VB6 / SQL / VBA / Excel / Access
Bonjour,
Ci-dessous une proposition à tester/adapter.
Principe :
boucle sur tous les fichiers (onglet param)
pour chaque fichier (reprise du fonctionnement existant)
> ouverture du fichier
> copie des données
> colle les données dans l'onglet qu'il faut (lu dans l'onglet param)
> fermeture du fichier
Testé très partiellement, avec reconstitution d'un fichier de test "Matrice Prev Inval RT SAS, ARQUUS - Sylvie P", fait manuellement.
Bonne soirée
Bouben
Public Sub Importer2()
Dim oShParam As Worksheet
Dim sFicSource As String
Dim oWBSource As Workbook
Dim oShSource As Worksheet
Dim sOngletPersonne As String
Dim oShPersonne As Worksheet
Dim sRep As String
Dim iDerLig As Integer
Dim iLig As Integer
Set oShParam = Worksheets("Param")
'répertoire principal
sRep = oShParam.Range("C2").Value
iDerLig = oShParam.Range("C" & Rows.Count).End(xlUp).Row
'boucle sur l'onglet paramètre
For iLig = 5 To iDerLig
sFicSource = sRep & oShParam.Range("C" & iLig).Value
'ouvre le fichier source
Set oWBSource = Workbooks.Open(sFicSource, , True)
Set oShSource = oWBSource.Worksheets("RESUME")
'copie les données
oShSource.Range("A5:BE100").Copy
'onglet cible
sOngletPersonne = oShParam.Range("D" & iLig).Value
Set oShPersonne = ThisWorkbook.Worksheets(sOngletPersonne)
'colle les données
oShPersonne.Range("A5").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'vide le presse-papier
Application.CutCopyMode = False
Set oShPersonne = Nothing
Set oShSource = Nothing
'ferme le fichier source
oWBSource.Close False
Set oWBSource = Nothing
Next iLig
Set oShParam = Nothing
End Sub
Hello Bouben,
Franchement top, cela marche a merveille - exactement mon besoin.
Cependant, juste un souci lorsqu'un fichier d'un gestionnaire est ouvert - la macro plante forcement car le fichier demande a être ouvert en "lecture seule / read only".
Peux-t-on force pour que les fichiers s'ouvrent en read only par défaut si quelqu'un sur le fichier ?
J'aurai également besoin de supprimer les données des différents onglets lorque je fais un refresh pour un nouveau mois de paie - mais je vais essayer de gérer moi-même je pense
Merci d'avance.
Cédric
- Messages
- 1'794
- Excel
- 2010
- Inscrit
- 25/08/2014
- Emploi
- Consultant VB6 / SQL / VBA / Excel / Access
Bonjour,
Dans l'exemple, les fichiers sont déjà ouverts en lecture seule. Si le fichier est déjà ouvert, cela ne doit pas poser de souci.
A voir si le problème ne vient pas d'ailleurs.
Pour la remise à blanc des onglets, une proposition à tester.
Même principe : boucle sur l'onglet paramètre, et efface les lignes pour chacun des onglets.
Public Sub RAZ()
Dim oShParam As Worksheet
Dim oShPersonne As Worksheet
Dim iDerLig As Integer
Dim iLig As Integer
Dim iDerPers As Integer 'dernière ligne de l'onglet personne
If MsgBox("Voulez-vous effacer les données ?", vbYesNo + vbExclamation) <> vbYes Then
Exit Sub
End If
Set oShParam = Worksheets("Param")
Application.ScreenUpdating = False
'boucle sur l'onglet paramètre
iDerLig = oShParam.Range("C" & Rows.Count).End(xlUp).Row
For iLig = 5 To iDerLig
'onglet cible
sOngletPersonne = oShParam.Range("D" & iLig).Value
Set oShPersonne = ThisWorkbook.Worksheets(sOngletPersonne)
'dernière ligne de l'onglet personne
iDerPers = oShPersonne.Range("C" & Rows.Count).End(xlUp).Row
If iDerPers >= 5 Then
'efface
oShPersonne.Rows("5:" & iDerPers).ClearContents
End If
Set oShPersonne = Nothing
Next iLig
Application.ScreenUpdating = True
Set oShParam = Nothing
MsgBox "RAZ terminé !", vbExclamation
End Sub
Bouben
Hello again,
Nickel maintenant, ca marche bien.
Je vais tester pour voir pourquoi cela a planté maintenant.
un grand merci encore une fois
et bonne journée.
Cédric