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 Sub

Merci 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"

Rechercher des sujets similaires à "utilisation workbooks maniere optimisee"