Vérification de macro

Bonjour,

J'ai créé une nouvelle macro pour mon travail. Cette dernière fait ce que je souhaite, mais je suis persuadé qu'il est possible de la simplifier.

Sub Copie_occup()

    'definir l'année du fichier Occup
    Dim DateOccup As Date, AnneeOccup As String
    DateOccup = Date - 1
    AnneeOccup = Format(DateOccup, "YYYY")

    ' Ouvrir le classeur Occup
    Dim Occup As Workbook
                                    ' chemin réseau    ' nom fichier
    Set Occup = Workbooks.Open(Filename:="O:\NIGHTS\Occup" + AnneeOccup + ".xls")

    ' Definir et activer la feuille du mois
    Dim MoisOccup As String
    MoisOccup = Format(DateOccup, "MMM")
    Occup.Worksheets(MoisOccup).Activate

    'Definir la ligne en fonction de la date
    Dim Rg As Range
    For Each Rg In Range("A:A")
        With Rg
            If .Value = DateOccup Then .Rows.Select
        End With
    Next
    L = ActiveCell.Row

    'copier les données du 209 et coler au bon endroi sur Occup
    Windows("TEST Classeur 209# avec macro.xlsm").Activate
    Range("E3").Select
    Selection.Copy
    Occup.Activate
    Range("B" & L).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    Windows("TEST Classeur 209# avec macro.xlsm").Activate
    Range("F3").Select
    Application.CutCopyMode = False
    Selection.Copy
    Occup.Activate
    Range("G" & L).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

    Windows("TEST Classeur 209# avec macro.xlsm").Activate
    Range("H3").Select
    Application.CutCopyMode = False
    Selection.Copy
    Occup.Activate
    Range("K" & L).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False

    Occup.Save
End Sub

En gros, j'ouvre le fichier Occup (où l'année dans le nom change), je définie quelle feuille (nommé par mois), puis je définie la ligne correspondant en fonction de la date de J-1 et enfin, je copie les donné du classeur 209# (de la feuille "Chambres <295 €") et les colle sur les colonnes B, G et K de cette ligne.

Prochaine étape, automatiser la création d'une note dans la cellule en colonne K détaillant les infos variable des colonnes A et B de la feuille "Chambres <295 €" du classeur 209#

Dans ce cas la note serait :

1*180

2*200

J'ai inséré cette macro a une autre plus grandes (tout faire en un clique est quand même mieux), mais elle commence à être assez volumineuse, donc si vous aves une manière de simplifier cette partie, je vous serai très reconnaissant.

Merci

13occup20xx-vide.zip (163.42 Ko)

Bonjour,

Le problème est que vous êtes un adepte du "codage flou" : Rien n'est défini et on se balade ici ou là...

Le résultat est parfois surprenant :

Bon en plus de la macro je me suis aidé de vos indications pour comprendre que la feuille source était "Chambre <295" (Feuil23 pour VBA)

Voici le code optimisé :

Sub Copie_occup()
Dim WbC As Workbook
Dim WsS As Worksheet
Dim WsC As Worksheet
Dim iR&
Set WsS = Feuil23 'Feuille "Source
'Ouvrir le classeur Civble (Occup)
' chemin réseau    ' nom fichier
Set WbC = Workbooks.Open(Filename:="O:\NIGHTS\Occup" & Year(Date) & ".xls")
Set WsC = WbC.Worksheets(Format(Date, "MMM")) 'Feuillle Cible
   With WsC
    'Definir la ligne en fonction de la date
    iR = Day(Date) + 2
    'copier les données du 209 et coler au bon endroi sur Occup
      .Range("B" & iR) = WsS.Range("E3")
      .Range("G" & iR) = WsS.Range("F3")
      .Range("K" & iR) = WsS.Range("H3")
    WbC.Save
   End With
End Sub

Si vous doutez du résultat, ne cherchez pas il se trouve dans la feuile Aout : C'est normal puisque dans la macro vous utiliser "Date" pour définir "TOUSSA"

En dehors de cette approximation, Je suppose que vous mesurez le chemin qu'il vous reste à parcourir.

Optimiser en VBA c'est déjà définir avec précision les variables : Pas d'Active.Truc ni de Select.Machin. Quand les objets sont définis avec précision yapa de problème !

A+

Bonjour,

Merci beaucoup pour ton aide.

En effet, je débute sur VBA et suis autodidacte. Ce que je connais jusqu'à présent, je l'ai appris en étudiant et decorticant les codes d'autres personnes, ce que je vais faire avec le tien. Grâce à ton aide, j'apprends beaucoup sur comment mieux définir les variables. Avec ça, je vais très certainement pouvoir améliorer mes codes existants.

Ici, la parti sur laquelle j'ai eu du mal était la zone pour choisir la ligne correcte. J'avais réussi, mais comme tu as pu le constater, pas de manière optimisé.

Dès que je reviens de vacance, j'appliquerai ton code et ferai tout plein de test

Petite Updape :

Merci, tout fonctionne parfaitement. J'avais juste fait une erreur sur le format du mois ("MMM" au lieu de "MMMM"), car pour Août, ça ne fais pas de différence.

J'ai beaucoup appris et vais essayer d'appliquer sur mes futur code.

Rechercher des sujets similaires à "verification macro"