Coller plage cellules au même endroit dans onglet suivant
Bonjour,
Je suis débutant sur VBA et nouveau sur ce forum.
Je cherche à écrire une macro qui me permettrait de copier une plage de cellules sélectionnée et d'en coller le format sur la même plage de l'onglet suivant.
Par exemple, si je sélectionne la plage ("c5:e7") dans l'onglet actif, j'aimerais que la macro me permette, une fois lancée, de copier le format de cette plage dans l'onglet suivant sur les cellules ("c5:e7") également.
Je n'ai pas joint de fichier car j'ai conscience qu'il s'agit d'une opération relativement simple, mais je suis surtout perdu dans le langage VBA à utiliser.
J'avais pensé utiliser une function INDIRECT(ADDRESS) mais n'ai pas réussi à trouver sur le forum l'équivalent de cette fonction sur VBA.
Merci beaucoup d'avance pour votre aide,
Akilis
Bonjour AkilisScPo89,
Qu'entends-tu par "coller le format"?
Un copier/coller des valeurs avec font/couleur/police etc.?
Dans ce genre de situation, je t'invite à utiliser l'enregistreur de macros.
- tu lances l'enregistrement
- tu réalise l'action que tu souhaites automatiser
- tu arrêtes l'enregistrement et tu regardes le code généré
https://youtu.be/WgJSenE3f3Y?t=93
Après il suffit d'éditer la macro générée automatiquement. Reviens vers moi si tu bloques après cela en copiant le code généré par l'enregistrement
Bonjour d3d9x, et merci pour ta réponse et ton temps !
J'aurais dû en effet être plus précis sur mes tentatives jusqu'à présent.
Je viens d'enregistrer la macro en effectuant l'opération. Voilà le code généré :
Sub Macro1()
Range("G11:I11").Select
Selection.Copy
ActiveSheet.Next.Select
Range("G11").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
End Sub
Ce code ne me satisfait pas pour les raisons suivantes :
1) j'aimerais que la plage ne soit pas (G11:I11) mais une plage dynamique, celle que je sélectionne dans Excel ;
2) j'apprécie que la macro ne "fixe" pas l'onglet, mais utilise bien
ActiveSheet.Next.Select
3) j'aimerais que la plage de "collage" dans l'onglet suivant ne soit pas Range("G11") mais la même plage que celle que j'ai sélectionnée dans mon premier onglet.
Autrement dit, si on était sur du Excel non-VBA :
- je copie dans l'onglet 1 une plage (disons (H7:L20)) ;
- je colle dans l'onglet 2 le format de cette plage à partir de la cellule =INDIRECT(ADDRESS(ROW(H7);COLUMN(H7);1;1;"Sheet2")).
Je suis désolé si je ne suis pas clair, n'hésite pas à me le dire et j'essaierai de reformuler.
Sub Macro1()
Dim numLigne As Integer, numColonne As Integer, numFeuille As Integer
numLigne = Selection.Row
numColonne = Selection.Column
numFeuille = ActiveWorkbook.ActiveSheet.Index
If ActiveWorkbook.Sheets.Count < numFeuille + 1 Then
MsgBox "il n'y a pas de feuille après celle-ci"
Else
Selection.Copy
With ActiveWorkbook.Sheets(numFeuille + 1)
.Select
.Cells(numLigne, numColonne).Select
.Paste
End With
End If
End Sub
J'attends ton avis
Merci beaucoup pour ton aide; ta proposition marche parfaitement.
Je vais pouvoir l'adapter pour ne coller que le format par exemple, donc c'est un bon practise pour moi
Il faut que je comprenne absolument cette utilisation d'"integrer" avant de re-poster sur ce site pour ne pas trop polluer les demandes que j'aurai, à coup sûr, à l'avenir.
Encore merci,
Akilis