Augmenter la valeur d'une ligne de +1
Bonjour le forum
J'ai une macro qui va chercher une ligne en "feuil1" et va l'inscrire en feuil"annoncé"
Les lignes sont C12727:V12727 et C12726:V12726 et je voudrais quand la macro est terminé ajouter +1 a ces valeurs,
c'est à dire quelles deviennent C12728:V12728 et C12727:V12727.
Comment faut-il écrire cela a la fin de la macro
ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
Sheets("Feuil1").Select
Range("C12727:V12727").Select
Selection.Copy
Sheets("annoncé").Select
Range("BG93").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
Sheets("Feuil1").Select
Range("C12726:V12726").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("annoncé").Select
Range("BG114").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
'l'écrire içi'
Range("AR92").Select
End Sub
merci
salut
je comprends pas bien ce que tu veux faire
tu selectionnes un range tu le copies/colles dans une autre feuille
et ensuite je comprends pas tu veux augmenter le ligne de 1 pour en faire quoi?
Bonsoir,
Je ne vois pas trop non plus l'intérêt de la manoeuvre...
Par contre il serait bon d'améliorer ton code en supprimant tous les Select, les commandes de déplacement, CutCopyMode..., ainsi que les arguments non utilisés des méthodes, soit tout ce que l'enregistreur met inutilement... Ton code se réduirait d'au moins les 2/3, gagnerait en clarté, et en efficacité, et si en plus tu l'indentes, ce sera parfait !
Les balises Code seraient églament plus indiquées pour citer du code dans un post...
Cordialement.
Bonjour ciocciu, MFerrand, le forum
Dans la feuil "annoncé" je n'est besoin que de l'avant derniere et l'avant avant derniere ligne de la feuil1, c'est a dire la la n° 12727 et 12726 mais quand je vais rajouter un autre tirage l'avant derniere ligne sera la n°12728 et l'avant avant derniere sera la 12727.
Chaque fois que je rajoute un tirage elles augmenteront de +1.
Actuellement je le fais manuellement par copier/coller et je voulais donc savoir s'il est possible de faire modifier de +1 le Range("C..:V..") dans la macro a la fin de son éxécution de façon qu'a la prochaine éxécution quand je clique sur la macro c'est valeurs ont changé.
J'ai voulu supprimer les Select mais j'ai un message "erreur de compilation utilisation incorrecte de la propriété.
merci
Sheets("Feuil1").Select
Range("C12727:V12727").Select
Selection.Copy
Sheets("annoncé").Select
Range("BG93").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Sheets("Feuil1").Select
Range("C12726:V12726").Select
Selection.Copy
Sheets("annoncé").Select
Range("BG114").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Range("AR92").Select
End Sub
Bonsoir,
J'ai toujours pas bien compris ton histoire de tirage... En attendant, je peux t'illustrer rapidement la suppression des Select...
Tu écris :
Sheets("Feuil1").Select
Range("C12727:V12727").Select
Selection.Copy
Tu réécris simplement :
Sheets("Feuil1").Range("C12727:V12727").Copy
2 Select de moins = 2 opérations parasites gagnées !
Tu écris ensuite :
Sheets("annoncé").Select
Range("BG93").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=True
Tu réécris ainsi :
Sheets("annoncé").Range("BG93").PasteSpecial xlPasteAll, , , True
Encore 2 Select de moins = 2...
En plus, on ignore 2 paramètres à leur valeur par défaut qui n'ont pas besoin d'être définis à la valeur qu'ils ont déjà ! Du temps supplémentaire gagné.
Et en passant les arguments par position, leur nom est inutile (ça c'est juste un gain en écriture...)
Là on s'est contenté d'éliminer ce qui était inutile, qui apporte toutefois un gain, car sélectionner est une opération qui occupe VBA (il ne fait pas autre chose pendant qu'il sélectionne !)
Mais à partir de là, on peut optimiser un peu plus, en regroupant les opérations sur la Feuil1 dans un bloc With... End With, ce n'est pas qu'une amélioration d'écriture car VBA met la référence à l'objet en mémoire, c'est donc plus rapide.
On ne peut pas faire la même chose pour les deux feuilles en même temps, mais on peut affecter la référence de l'autre à une variable Worksheet, qui permettra également à VBA d'y accéder plus rapidement.
Set wsC = Worksheets("annoncé")
With Worksheets("Feuil1")
.Range("C12727:V12727").Copy
wsC.Range("BG93").PasteSpecial xlPasteAll, , , True
.Range("C12726:V12726").Copy
wsC.Range("BG114").PasteSpecial xlPasteAll, , , True
End With
A ce stade, tu as obtenu un code, raccourci et relativement optimisé, donc plus rapide à l'exécution.
[Je dis relativement, car cela reste limité à un fragment de code, s'il est possible d'optimiser plus, cela se passe alors sur l'ensemble du programme...]
Cordialement.
Bonjour MFerrand, le forum
merci pour les explications pour le code de la macro, je vais pouvoir modifier aussi les autres macros car j'en ai pas mal.
Pour la macro quand je l'execute pour la premiere fois les valeurs du Range sont "C12727:V12727 et C12726:V12726",
mais a la deuxieme éxécution j'aurais voulu que ces valeurs soient augmentées de +1 c'est à dire "C12728:V12728 et C12727:V12727",
si cela est possible de modifier ces valeurs dans la macro.
merci