Bonjour,
Je vous serais énormément reconnaissant si vous pouvez m'aider sur un projet boulot dans les RH, de mutualisation de feuilles Excel.
je suis débutant en programmation VBA. ma base en raisonnement math me permet de comprendre la logique de programmation structurée et non objet.
je suis un inconditionnel de ce site dont je remercie toutes les instances.
exposition du besoin:
Il y a plusieurs classeurs (ex.: toto.xls, tata.xls, dans un répertoire ex.:"D:\test") dans tous ces classeurs il y a une feuille invisible "RecupData" pleine de formules (références de cellules, de plages de lignes et des noms de feuilles).
1- chaque feuille de chaque classeur ("RecupData") je veux la copier et la coller en valeurs dans mon classeur actif "GLOBAL" en la renommant par le nom du classeur d'ou elle provient: j'aurais des feuilles ou onglets portant les noms "toto", "tata" sur GLOBAL.
Sauf que dans les feuilles j'ai les formules, je voudrais les valeurs, !!!!???
j'ai adapté le code suivant qui marche presque sauf pour la copie ne valeur:
Sub TtesFeuilsDsGLOBAL()
Dim F, Wbk As Worksheet
Dim Rep As String ' répertoire à traiter
Dim Classeur As String, Onglet As String
Dim i As Byte
Dim rRange As Range
Rep = mDF_ChoixDossier("Choisissez le répertoire à regrouper")
If Rep = "" Then Exit Sub
Classeur = Dir(Rep & "\*.xls")
Do While Classeur <> Empty
With Workbooks.Open(Rep & "\" & Classeur)
For i = 1 To 1 'A adapter
Onglet = Choose(i, "RecupData") 'A adapter
'Set .rRange = Range("L1:L200")
' rRange = rRange.Value
On Error Resume Next
Set F = .Sheets(Onglet)
On Error GoTo 0
If Not F Is Nothing Then
F.Copy After:=ThisWorkbook.Worksheets(1)
ActiveSheet.Name = Classeur
Set F = Nothing
End If
Next i
.Close False
End With
Classeur = Dir
Loop
' boucle pour rendre toutes les feuilles visibles
For Each Ws In ActiveWorkbook.Sheets
Ws.Visible = xlSheetVisible
Next Ws
End Sub
-----------------------------------------------------------
Function mDF_ChoixDossier(Titre As String) As String
'myDearFriend! - www.mdf-xlpages.com
Dim objFolder As Object
Dim Chemin As String
Set objFolder = CreateObject("Shell.Application").BrowseForFolder(0, Titre, 513, 0)
If objFolder Is Nothing Then Exit Function
On Error Resume Next
Chemin = objFolder.Items.Item.Path & ""
On Error GoTo 0
mDF_ChoixDossier = IIf(Left(Chemin, 1) = ":", "", Chemin)
End Function
----------------------------------------------------
2- une deuxième macro devrait mettre toutes les lignes de toutes les feuilles (toto,tata) dans une seul feuille "GLOBAL.xls!DBGlobale".
d'avance merci,
Je vous serais énormément reconnaissant si vous pouvez m'aider sur un projet boulot dans les RH, de mutualisation de feuilles Excel.
je suis débutant en programmation VBA. ma base en raisonnement math me permet de comprendre la logique de programmation structurée et non objet.
je suis un inconditionnel de ce site dont je remercie toutes les instances.
exposition du besoin:
Il y a plusieurs classeurs (ex.: toto.xls, tata.xls, dans un répertoire ex.:"D:\test") dans tous ces classeurs il y a une feuille invisible "RecupData" pleine de formules (références de cellules, de plages de lignes et des noms de feuilles).
1- chaque feuille de chaque classeur ("RecupData") je veux la copier et la coller en valeurs dans mon classeur actif "GLOBAL" en la renommant par le nom du classeur d'ou elle provient: j'aurais des feuilles ou onglets portant les noms "toto", "tata" sur GLOBAL.
Sauf que dans les feuilles j'ai les formules, je voudrais les valeurs, !!!!???
j'ai adapté le code suivant qui marche presque sauf pour la copie ne valeur:
Sub TtesFeuilsDsGLOBAL()
Dim F, Wbk As Worksheet
Dim Rep As String ' répertoire à traiter
Dim Classeur As String, Onglet As String
Dim i As Byte
Dim rRange As Range
Rep = mDF_ChoixDossier("Choisissez le répertoire à regrouper")
If Rep = "" Then Exit Sub
Classeur = Dir(Rep & "\*.xls")
Do While Classeur <> Empty
With Workbooks.Open(Rep & "\" & Classeur)
For i = 1 To 1 'A adapter
Onglet = Choose(i, "RecupData") 'A adapter
'Set .rRange = Range("L1:L200")
' rRange = rRange.Value
On Error Resume Next
Set F = .Sheets(Onglet)
On Error GoTo 0
If Not F Is Nothing Then
F.Copy After:=ThisWorkbook.Worksheets(1)
ActiveSheet.Name = Classeur
Set F = Nothing
End If
Next i
.Close False
End With
Classeur = Dir
Loop
' boucle pour rendre toutes les feuilles visibles
For Each Ws In ActiveWorkbook.Sheets
Ws.Visible = xlSheetVisible
Next Ws
End Sub
-----------------------------------------------------------
Function mDF_ChoixDossier(Titre As String) As String
'myDearFriend! - www.mdf-xlpages.com
Dim objFolder As Object
Dim Chemin As String
Set objFolder = CreateObject("Shell.Application").BrowseForFolder(0, Titre, 513, 0)
If objFolder Is Nothing Then Exit Function
On Error Resume Next
Chemin = objFolder.Items.Item.Path & ""
On Error GoTo 0
mDF_ChoixDossier = IIf(Left(Chemin, 1) = ":", "", Chemin)
End Function
----------------------------------------------------
2- une deuxième macro devrait mettre toutes les lignes de toutes les feuilles (toto,tata) dans une seul feuille "GLOBAL.xls!DBGlobale".
d'avance merci,