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 SubEn 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
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 SubSi 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.