VBA Code à "moderniser"

Bonjour à tous,

Je possède un code assez vieux et j'aimerais par tous les moyens essayer de le "moderniser", c'est-à-dire le rendre plus optimal (court et efficace). Cela me permet d'apprendre les différentes fonctionnalités de VBA par la même occasion.

Il s'agit d'un fichier que je me sert pour mettre à jour plusieurs fichiers. Bien sûr, je ne cherche qu'à l'optimiser donc pas besoin de trop se casser la tête

Merci beaucoup pour vos suggestions!

fizuaal

12test1.zip (13.32 Ko)

Bonjour Fizuaal le forum

ton code vaut ce qu'il vaut, mais c'est sur que pour le tester il faudrait au minimum joindre les 3 fichiers que la macro est sensée mettre à jour

Tous les activate sont inutiles, et surtout tous les fichiers doivent être ouvert avant de lancer la macro !!!! ?????

pas bon du tout pour moi!

a+

Papou

Merci paritec,

Oui les 3 fichiers sont déjà ouverts. J'ai une macro dans un autre fichier qui les ouvre au préalable, c'est pour cela que j'utilise des activate. Tu penses que les activate peuvent être remplacés?

Je ne souhaite pas mettre en pj les 3 autres fichiers car ils sont plus ou moins confidentiels...

Je cherchais à l'améliorer de la syntaxe, si au niveau de certaines lignes qui sont inutiles...

Merci,

Bonjour à tous,

Un début d'amélioration ... à tester sur des copies des fichiers.

Pour cette première étape, les fichiers doivent encore être ouverts au préalable.

Les noms des feuilles ("Feuil1") devront être adaptés aux noms réels des différents fichiers.

Code non testé ...

Sub mise_a_jour()
Dim MyRange As Range
Dim Lastligne As Double
Dim LastCol As Double
Dim r As Object

    'verification des colonnes A des differents fichiers

    With workboots("CAC40.XLS").Worksheets("Feuil1")
        Nbligne = .Range("A" & Rows.Count).End(xlUp).Row
        Set MyRange = .Range("A:A")
        Maximum = Application.WorksheetFunction.Max(MyRange)

        If .Cells(Nbligne, 1).Value = Maximum And .Cells(Nbligne - 1, 1).Value <> "" Then
            Lastligne = .Range("A" & Rows.Count).End(xlUp).Row
        Else
            valcellule = .Cells(Nbligne, 1).Value

            If MsgBox("En colonne A ligne " & Nbligne & " la cellule indique " & valcellule & _
                      " alors qu'elle ne correspond pas à la date d'aujourd'hui, voulez vous effacer " & _
                      "le contenu de cette cellule (si vous répondez non la macro s'arrêtera", vbYesNo, "") = vbYes Then
                .Cells(Nbligne, 1) = ""
                Lastligne = .Range("A" & Rows.Count).End(xlUp).Row
            Else
                Exit Sub
            End If
        End If

        LastCol = .Cells(Lastligne, Columns.Count).End(xlToLeft).Column
        .Range(.Cells(Lastligne, 1), .Cells(Lastligne, LastCol)).AutoFill Destination:=.Range(.Cells(Lastligne, 1), .Cells(Lastligne + 1, LastCol))

        .Range(.Cells(Lastligne, 2), .Cells(Lastligne, 4)).Copy
        .Cells(Lastligne, 2).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

        .Range(.Cells(Lastligne, 17), .Cells(Lastligne, 21)).Copy
        .Cells(Lastligne, 17).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

        .Cells(Lastligne, 27).Copy
        .Cells(Lastligne, 27).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

        .Cells(Lastligne, 33).Copy
        .Cells(Lastligne, 33).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

        If Weekday(.Cells(Lastligne, 1).Value) = 6 Then .Cells(Lastligne + 1, 1) = .Cells(Lastligne, 1).Value + 3
    End With

    With Workbooks("MATIF.XLS").Worksheets("Feuil1")
        Nbligne2 = .Range("A" & .Rows.Count).End(xlUp).Row
        Set MyRange = .Range("A1:A" & Nbligne2)

        Maximum = CDate(Application.WorksheetFunction.Max(MyRange))

        If .Cells(Nbligne2, 1).Value = Maximum And .Cells(Nbligne2 - 1, 1).Value <> "" Then
            Lastligne2 = .Range("A" & Rows.Count).End(xlUp).Row
        Else
            valcellule2 = .Cells(Nbligne2, 1).Value

            If MsgBox("En colonne A ligne " & Nbligne2 & " la cellule indique " & valcellule2 & _
                      " alors qu'elle ne correspond pas à la date d'aujourd'hui, voulez vous effacer " & _
                      "le contenu de cette cellule", vbYesNo, "") = vbYes Then
                .Cells(Nbligne2, 1) = ""
                Lastligne2 = .Range("A" & Rows.Count).End(xlUp).Row
            Else
                Exit Sub
            End If
        End If

        LastCol2 = .Cells(Lastligne2, Columns.Count).End(xlToLeft).Column
        .Range(.Cells(Lastligne2, 1), .Cells(Lastligne2, LastCol2)).AutoFill Destination:=.Range(.Cells(Lastligne2, 1), .Cells(Lastligne2 + 1, LastCol2))

        .Range(.Cells(Lastligne2, 143), .Cells(Lastligne2, 145)).Copy
        .Cells(Lastligne2, 143).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

        If Weekday(.Cells(Lastligne2, 1).Value) = 6 Then .Cells(Lastligne2 + 1, 1) = .Cells(Lastligne2, 1).Value + 3
    End With

    With Workbooks("MAT8691.XLS").Worksheets("Feuil1")
        Nbligne3 = .Range("A" & Rows.Count).End(xlUp).Row

        Set MyRange = .Range("A1:A" & Nbligne3)

        Maximum = Application.WorksheetFunction.Max(MyRange)

        If .Cells(Nbligne3, 1).Value = Maximum And .Cells(Nbligne3 - 1, 1).Value <> "" Then
            Lastligne3 = .Range("A" & Rows.Count).End(xlUp).Row
        Else
            valcellule3 = .Cells(Nbligne3, 1).Value

            If MsgBox("En colonne A ligne " & Nbligne3 & " la cellule indique " & valcellule3 & _
                      " alors qu'elle ne correspond pas à la date d'aujourd'hui, voulez vous effacer " & _
                      "le contenu de cette cellule", vbYesNo, "") = vbYes Then
                .Cells(Nbligne3, 1) = ""
                Lastligne3 = .Range("A" & Rows.Count).End(xlUp).Row
            Else
                Exit Sub
            End If
        End If

        LastCol3 = .Cells(Lastligne3, Columns.Count).End(xlToLeft).Column
        .Range(.Cells(Lastligne3, 1), .Cells(Lastligne3, LastCol3)).AutoFill Destination:=.Range(.Cells(Lastligne3, 1), .Cells(Lastligne3 + 1, LastCol3))

        .Cells(Lastligne3, 2).Copy
        .Cells(Lastligne3, 2).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False

        If Weekday(.Cells(Lastligne3, 1).Value) = 6 Then .Cells(Lastligne3 + 1, 1) = .Cells(Lastligne3, 1).Value + 3
    End With
End Sub

ric

Rechercher des sujets similaires à "vba code moderniser"