Utilisation de plusieurs workbooks de manière optimisée
Bonjour,
J'ai débute et j'ai créé une macro assez standard (je n'ai pas réussi à utiliser les switch en VBA alors il y a pleins de Si assez moches ...) et je me retrouve devant un problème: je ne sais pas comment faire pour que mon code fonctionne si jamais il y a d'autres classeurs ouverts (sachant que le classeur que je veux ouvrir avec mon code changera souvent de nom, donc je ne peux pas mettre Workbooks("NomDuClasseur.xls") à la place de Workbooks(2)
une explication plus claire avec mon code:
Public Sub marie()
Dim i As Integer, y As Integer, code As String, jour As Date, anneeJour As Integer, moisJour As Integer, valeur As Integer, mois1 As Integer, mois2 As Integer, mois3 As Integer, mois4 As Integer, mois5 As Integer, mois6 As Integer, mois7 As Integer, mois8 As Integer, mois9 As Integer, mois10 As Integer
Dim lignes As Integer
Dim annee1 As Integer, annee2 As Integer, annee3 As Integer, annee4 As Integer, annee5 As Integer, annee6 As Integer, annee7 As Integer, annee8 As Integer, annee9 As Integer, annee10 As Integer
mois1 = Month(Worksheets(1).Range("D1"))
mois2 = Month(Worksheets(1).Range("E1"))
mois3 = Month(Worksheets(1).Range("F1"))
mois4 = Month(Worksheets(1).Range("G1"))
mois5 = Month(Worksheets(1).Range("H1"))
mois6 = Month(Worksheets(1).Range("I1"))
mois7 = Month(Worksheets(1).Range("J1"))
mois8 = Month(Worksheets(1).Range("K1"))
mois9 = Month(Worksheets(1).Range("L1"))
mois10 = Month(Worksheets(1).Range("M1"))
annee1 = Year(Worksheets(1).Range("D1"))
annee2 = Year(Worksheets(1).Range("E1"))
annee3 = Year(Worksheets(1).Range("F1"))
annee4 = Year(Worksheets(1).Range("G1"))
annee5 = Year(Worksheets(1).Range("H1"))
annee6 = Year(Worksheets(1).Range("I1"))
annee7 = Year(Worksheets(1).Range("J1"))
annee8 = Year(Worksheets(1).Range("K1"))
annee9 = Year(Worksheets(1).Range("L1"))
annee10 = Year(Worksheets(1).Range("M1"))
lignes = Worksheets(1).UsedRange.Rows.Count
Workbooks.Open Filename:=Application.GetOpenFilename
Workbooks(2).Activate
Application.ScreenUpdating = False
For i = 2 To Workbooks(2).Worksheets(1).UsedRange.Rows.Count
code = Workbooks(2).Worksheets(1).Range("S" & i)
jour = Workbooks(2).Worksheets(1).Range("AK" & i)
moisJour = Month(jour)
anneeJour = Year(jour)
valeur = Workbooks(2).Worksheets(1).Range("AL" & i)
For y = 2 To lignes
If code Like Workbooks(1).Worksheets(1).Range("A" & y) Then
If (moisJour = mois1 And anneeJour = annee1) Then
Workbooks(1).Worksheets(1).Range("D" & y) = Workbooks(1).Worksheets(1).Range("D" & y) + valeur
ElseIf (moisJour = mois2 And anneeJour = annee2) Then
Workbooks(1).Worksheets(1).Range("E" & y) = Workbooks(1).Worksheets(1).Range("E" & y) + valeur
ElseIf (moisJour = mois3 And anneeJour = annee3) Then
Workbooks(1).Worksheets(1).Range("F" & y) = Workbooks(1).Worksheets(1).Range("F" & y) + valeur
ElseIf (moisJour = mois4 And anneeJour = annee4) Then
Workbooks(1).Worksheets(1).Range("G" & y) = Workbooks(1).Worksheets(1).Range("G" & y) + valeur
ElseIf (moisJour = mois5 And anneeJour = annee5) Then
Workbooks(1).Worksheets(1).Range("H" & y) = Workbooks(1).Worksheets(1).Range("H" & y) + valeur
ElseIf (moisJour = mois6 And anneeJour = annee6) Then
Workbooks(1).Worksheets(1).Range("I" & y) = Workbooks(1).Worksheets(1).Range("I" & y) + valeur
ElseIf (moisJour = mois7 And anneeJour = annee7) Then
Workbooks(1).Worksheets(1).Range("J" & y) = Workbooks(1).Worksheets(1).Range("J" & y) + valeur
ElseIf (moisJour = mois8 And anneeJour = annee8) Then
Workbooks(1).Worksheets(1).Range("K" & y) = Workbooks(1).Worksheets(1).Range("K" & y) + valeur
ElseIf (moisJour = mois9 And anneeJour = annee9) Then
Workbooks(1).Worksheets(1).Range("L" & y) = Workbooks(1).Worksheets(1).Range("L" & y) + valeur
ElseIf (moisJour = mois10 And anneeJour = annee10) Then
Workbooks(1).Worksheets(1).Range("M" & y) = Workbooks(1).Worksheets(1).Range("M" & y) + valeur
Else
Workbooks(1).Worksheets(1).Range("N" & y) = Workbooks(1).Worksheets(1).Range("N" & y) + valeur
End If
Else
End If
Next y
Next i
Workbooks(2).Close
Application.ScreenUpdating = True
End Sub
Sub Macro2()
'
' Macro2 Macros
Workbooks.Open Filename:=Application.GetOpenFilename
Workbooks(2).Activate
For i = 1 To 10 Step 1
If Workbooks(2).Worksheets(1).Cells(1, i) = "Test" Then
Workbooks(1).Worksheets(1).Range("C3") = Workbooks(2).Worksheets(1).Cells(2, i)
End If
Next i
End SubMerci de votre aide !
Hello,
Tu devrais plutôt les ouvrir en vba et les affecter à une variable , facile après de travailler avec.
Apparemment, tu travailles sur 2 classeurs, donc le mieux c'est de mettre c'est 2 classeurs dans un même dossier et de les ouvrir via vba et de les affecter à une variable.
Tu dis que les noms des classeurs changent mais est-ce que tout le nom peut changer ou juste une partie ?
Exemple :
Est que "ventes.xlsx" peut devenir "achats.xlsx" ...
ou bien par exemple
"250521_ventes.xlsx" peut devenir "250521_achats.xlsx"