Aide macro VBA
Bonjour à nouveau,
Comme je ne trouve pas de solution à mon précédent poste, j'ai décidé de réfléchir autrement.
Si la feuille du fichier que je veux copier n'existe pas alors j'en veux en créer une jusque là tout va bien.
Par contre maintenant j'aimerais que le nom de la feuille qui s'est copié prenne le nom de la valeur en Range("N" & i).
Comment faire ?
Merci beaucoup,
Marion
Sub test()
Dim wkA As Workbook, wkB As Workbook
Dim chemin As String, fichier As String, i As Integer
'classeur A qui contient la macro
Set wkA = ThisWorkbook
With wkA.Sheets(1) 'les noms des classeurs à ouvrir se trouvent dans la feuille 1 en colonne N
'chemin ou se trouve le fichier B
chemin = "U:\Organic farming\Data\2_Validated\ORG\2015\"
'nom du fichier B
'fichier = "ORG_T1OPER_A_AT_2015.xlsx"
'ouvre le fichier B
For i = 1 To Sheets("Database old data").Range("N65536").End(xlUp).Row
If Dir(chemin & Sheets("Database old data").Range("N" & i) & ".xlsx") = "" Then
Set shtoto = Sheets.Add(After:=Sheets(Sheets.Count))
Sheets("Database old data").Select
shtoto.Name = shtoto.Range("N" & i)
Else
Workbooks.Open chemin & Sheets("Database old data").Range("N" & i) & ".xlsx"
'met en variable le classeur B
Set wkB = ActiveWorkbook
'copie la feuille "DATA ENTRY" du classeur A après la feuille "Data new data" l dans le classeur B
wkB.Sheets("DATA ENTRY").Copy After:=wkA.Sheets("Data")
Set wsA = ActiveSheet
wsA.Name = wsA.Range("B2") 'référence ???
'MsgBox ("Les feuilles sont maintenant copiées") 'message pour dire que la feuille est copiée.
wkB.Close True 'ferme et enregistre le classeur B
End If
Next i
End With
'MsgBox ("Les feuilles sont maintenant copiées") 'message pour dire que la feuille est copiée.
End Sub
Bonsoir,
Sub test()
Dim wkS As Workbook, wsA As Worksheet, wsOD As Worksheet, chemin$, fichier$, i%, n%
chemin = "U:\Organic farming\Data\2_Validated\ORG\2015\"
With ThisWorkbook
Set wsOD = .Sheets("Database old data")
n = wsOD.Range("N" & .Rows.Count).End(xlUp).Row
For i = 1 To n
fichier = Dir(chemin & wsOD.Range("N" & i) & ".xlsx")
If fichier = "" Then
Set wsA = .Worksheets.Add(after:=.Worksheets(.Worksheets.Count))
wsA.Name = wsOD.Range("N" & i)
Else
Set wkS = Workbooks.Open(fichier)
wkS.Worksheets("DATA ENTRY").Copy after:=.Worksheets(.Worksheets.Count)
ActiveSheet.Name = wsOD.Range("N" & i)
wkS.Close False
End If
Next i
End With
End Sub
J'ai juste réécrit pour ôter les incohérences !
Les nommages de feuilles m'ayant parus flous... Je les nomme avec le nom du fichier source, ce n'est peut-être pas cela mais cela a le mérite d'être cohérent par rapport à ce qui préexistait.
Je n'ai pas regardé ton fichier...
NB- Je subodore qu'on doit y trouver du code pas mieux indenté que celui cité... et je m'en dispense ! Il faut prendre conscience que le code non indenté ou mal fait perdre un temps fou ! (et je trouve préférable de le perdre autrement !
Cordialement.
MFerrand a écrit :Bonsoir,
Sub test() Dim wkS As Workbook, wsA As Worksheet, wsOD As Worksheet, chemin$, fichier$, i%, n% chemin = "U:\Organic farming\Data\2_Validated\ORG\2015\" With ThisWorkbook Set wsOD = .Sheets("Database old data") n = wsOD.Range("N" & .Rows.Count).End(xlUp).Row For i = 1 To n fichier = Dir(chemin & wsOD.Range("N" & i) & ".xlsx") If fichier = "" Then Set wsA = .Worksheets.Add(after:=.Worksheets(.Worksheets.Count)) wsA.Name = wsOD.Range("N" & i) Else Set wkS = Workbooks.Open(fichier) wkS.Worksheets("DATA ENTRY").Copy after:=.Worksheets(.Worksheets.Count) ActiveSheet.Name = wsOD.Range("N" & i) wkS.Close False End If Next i End With End Sub
J'ai juste réécrit pour ôter les incohérences !
Les nommages de feuilles m'ayant parus flous... Je les nomme avec le nom du fichier source, ce n'est peut-être pas cela mais cela a le mérite d'être cohérent par rapport à ce qui préexistait.
Je n'ai pas regardé ton fichier...
NB- Je subodore qu'on doit y trouver du code pas mieux indenté que celui cité... et je m'en dispense ! Il faut prendre conscience que le code non indenté ou mal fait perdre un temps fou ! (et je trouve préférable de le perdre autrement !
) Cordialement.
En gros avec le code là ca fonctionne:
Sub test()
Dim wkA As Workbook, wkB As Workbook
Dim chemin As String, fichier As String, i As Integer
'classeur A qui contient la macro
Set wkA = ThisWorkbook
With wkA.Sheets(1) 'les noms des classeurs à ouvrir se trouvent dans la feuille 1 en colonne N
'chemin ou se trouve le fichier B
chemin = "U:\Organic farming\Data\2_Validated\ORG\2015\"
'nom du fichier B
'fichier = "ORG_T1OPER_A_AT_2015.xlsx"
'ouvre le fichier B
For i = 1 To Sheets("Database old data").Range("N65536").End(xlUp).Row
If Dir(chemin & Sheets("Database old data").Range("N" & i) & ".xlsx") = "" Then
Set shtoto = Sheets.Add(After:=Sheets(Sheets.Count))
shtoto.Name = Sheets("Database old data").Range("N" & i)
Else
Workbooks.Open chemin & Sheets("Database old data").Range("N" & i) & ".xlsx"
'met en variable le classeur B
Set wkB = ActiveWorkbook
'copie la feuille "DATA ENTRY" du classeur A après la feuille "Data new data" l dans le classeur B
wkB.Sheets("DATA ENTRY").Copy After:=wkA.Sheets("Data")
Set wsA = ActiveSheet
wsA.Name = wsA.Range("B2") 'référence ???
'MsgBox ("Les feuilles sont maintenant copiées") 'message pour dire que la feuille est copiée.
wkB.Close True 'ferme et enregistre le classeur B
End If
Next i
End With
'MsgBox ("Les feuilles sont maintenant copiées") 'message pour dire que la feuille est copiée.
End Sub
Néamoins merci beaucoup à vous