[Catégorie modifiée VB6 -> VBA] Automatisation d'une macro Excel

gribouts Messages postés 7 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 8 juin 2011 - 7 juin 2011 à 23:03
gribouts Messages postés 7 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 8 juin 2011 - 8 juin 2011 à 20:47
Bonjour à tous,
j'aimerais faire une macro qui copie collerait le contenu d'une cellule (AF1) dans les cases g1, g2, g3, g4 ainsi que M4, S2, S3 et Z2, Z3. Elle irait ensuite en AF5 et collerait le texte présent en AF5 dans les cellules g5, g6, g7, g8, m8, s6, s7 et z6, z7 puis irait 4 lignes en dessous (soit en AF9) et ferait ces copies-colles jusqu'a la fin du tableau. Ne sachant pas faire ceci, j'ai commence la macro en manuel pour avoir le code en VB (me disant que ceci pourrait vous éviter d'écrire le code). Vous trouverez ce que j'ai obtenu ci-dessous, merci infiniment pour toute aide ou commentaire.
Cordialement, Grib.

Sub test()
'
' test Macro
'

'
ActiveWindow.ScrollColumn = 25
Range("AF1").Select
Selection.Copy
ActiveWindow.SmallScroll ToRight:=-22
ActiveWindow.SmallScroll Down:=-1
ActiveWindow.SmallScroll ToRight:=-9
Range("G1").Select
ActiveSheet.Paste
Range("G2").Select
ActiveSheet.Paste
Range("G3").Select
ActiveSheet.Paste
Range("G4").Select
ActiveSheet.Paste
ActiveWindow.SmallScroll ToRight:=3
ActiveWindow.SmallScroll Down:=-1
ActiveWindow.SmallScroll ToRight:=8
ActiveWindow.SmallScroll Down:=-1
ActiveWindow.SmallScroll ToRight:=6
ActiveWindow.SmallScroll Down:=-1
ActiveWindow.SmallScroll ToRight:=6
ActiveWindow.SmallScroll Down:=-1
ActiveWindow.SmallScroll ToRight:=4
ActiveWindow.SmallScroll Down:=-1
ActiveWindow.SmallScroll ToRight:=-43
Range("M4").Select
ActiveSheet.Paste
ActiveWindow.SmallScroll ToRight:=4
ActiveWindow.SmallScroll Down:=-1
ActiveWindow.SmallScroll ToRight:=4
Range("S2").Select
ActiveSheet.Paste
Range("S3").Select
ActiveSheet.Paste
ActiveWindow.SmallScroll ToRight:=1
ActiveWindow.SmallScroll Down:=-1
ActiveWindow.SmallScroll ToRight:=4
ActiveWindow.SmallScroll Down:=-1
ActiveWindow.SmallScroll ToRight:=4
ActiveWindow.SmallScroll Down:=-1
ActiveWindow.SmallScroll ToRight:=3
Range("Z2").Select
ActiveSheet.Paste
Range("Z3").Select
ActiveSheet.Paste
Range("AF5").Select
Application.CutCopyMode = False
Selection.Copy
ActiveWindow.SmallScroll ToRight:=-170
Range("G5").Select
ActiveSheet.Paste
Range("G6").Select
ActiveSheet.Paste
Range("G7").Select
ActiveSheet.Paste
Range("G8").Select

5 réponses

jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 344
8 juin 2011 à 11:53
Bonjour,

Si tu ne souhaites que recopier le contenu d'une cellule dans une autre (ou plusieurs), tu n'es pas obligé de passer par du copier coller.

Tu peux directement lire ET écrire des valeurs dans les cellules :
exemple:
Sub toto()

'Récupérer le contenu d'une cellule dans une variable
Valeur_cel = Range("AF1").Value

' Ecrire la valeur dans les cellules
Range("G1").Value = Valeur_cel
Range("G2").Value = Valeur_cel
Range("G3").Value = Valeur_cel
Range("G4").Value = Valeur_cel

End Sub



Par contre, si tu veux passer par du copier/coller (pour récuperer le contenu + la mise en forme...), ta méthode n'est pas mal.
Tu peux, toutesfois, enlever les lignes de codes :
ActiveWindow.SmallScroll ....


ce qui donnerait :
Sub tt()

Range("AF1").Select
Selection.Copy
Range("G1").Select
ActiveSheet.Paste
Range("G2").Select
ActiveSheet.Paste
Range("G3").Select
ActiveSheet.Paste
Range("G4").Select
ActiveSheet.Paste
Range("M4").Select
ActiveSheet.Paste
Range("S2").Select
ActiveSheet.Paste
Range("S3").Select
ActiveSheet.Paste
Range("Z2").Select
ActiveSheet.Paste
Range("Z3").Select
ActiveSheet.Paste

Range("AF5").Select
Application.CutCopyMode = False
Selection.Copy
Range("G5").Select
ActiveSheet.Paste
Range("G6").Select
ActiveSheet.Paste
Range("G7").Select
ActiveSheet.Paste
Range("G8").Select

End Sub



PS: Pour tes prochains post, pense à utilser les balises de codes pour que ce soit plus lisible.

PS² : si la réponse te convient, merci de mettre le sujet en "RESOLU".

Cordialement,
Jordane,
______________________________________________________
Règles du forum à lire avant de poster une question : ICI
0
gribouts Messages postés 7 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 8 juin 2011
8 juin 2011 à 15:21
Bonjour,
tout d'abord merci pour ta réponse, c'est vraiment gentil.

Le problème que je rencontre maintenant est comment faire pour automatiser ce processus jusqu'a la fin de la bdd. En effet, ici, la macro ne va coller les valeurs que de AF1 dans les cellules G1 à G4, S2, S3 et Z2, Z3 puis idem pour AF5 et les cellules ci-dessus décalées 4 lignes plus bas. J'aimerais savoir comment écrire dans la macro le fait que ces copie-colles vont devoir être fait toutes les 4 lignes, jusqu'a la fin de la bdd, soit pour AF1, AF5, AF9, AF13.... AF93...AF186.. qui seront colles dans les cases ci-dessus (G.. Z et S..) au lieu de devoir manuellement spécifier les cellules considérées dans la macro. Je pense que ceci serait possible à l'aide des valeurs relatives mais je ne parviens pas à trouver comment faire.. Aurais-tu une idée pour ce faire ??

Merci beaucoup,
grib.
0
SebSemos Messages postés 57 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 13 juin 2011 1
8 juin 2011 à 15:24
Salut, avec une boucle While sa fera surement l'affaire, Google va te donner un max d'exemple ;)


_______________________
Imports System.Thinking
'La vie Roxxx un max à qui s'en donne la peine
0
SebSemos Messages postés 57 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 13 juin 2011 1
8 juin 2011 à 15:54
oups désoler, je dit ce que je pensais qu'il fallait pas dire, il faut un boucle For, c'est plus simple ;)


_______________________
Imports System.Thinking
'La vie Roxxx un max à qui s'en donne la peine
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gribouts Messages postés 7 Date d'inscription vendredi 21 avril 2006 Statut Membre Dernière intervention 8 juin 2011
8 juin 2011 à 20:47
ok bonne idée. Vu que j'ai un saut de 4 lignes, je pense qu'il faut utiliser les steps et donc ajouter quelque chose comme:

Dim x As Integer
For x = 4 To .. Step 4
Cells(x, 32) = & x
Next x

Le problème reste que, si avec ce moyen je peux effectivement passer de AF1 à AF4 et ainsi de suite, je ne trouve pas comment lui dire de coller la valeur de la cellule de départ dans le lot de cellule défini (g1...) et de mettre la nouvelle valeur (af5 par ex) dans le meme lot de cellule 4 lignes plus bas...
0
Rejoignez-nous