Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Aide pour simplification de mon code

  • Initiateur de la discussion Initiateur de la discussion doublenico
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

D

doublenico

Guest
Bonjour,

Je viens de reprendre un doc excel avec des macros.
Je débute en VBA mais je pense que le code suivant peut etre simplifier :
En fait je sélectionne les cellules i1, i2, i3, i4,i5,i6 d'un document et je les colle sur une autre document en f1,f2,f3,f4,f5,f6
Je sais que je peux utiliser un range mais j'y arrive pas .

Merci d'avance


.Cells(i, 1).Copy
Sheets(ma_feuille).Select
Sheets(ma_feuille).Cells(f, 1).Select
ActiveSheet.Paste
Selection.VerticalAlignment = xlCenter
Selection.WrapText = True
'.Select
.Cells(i, 2).Copy
Sheets(ma_feuille).Select
Sheets(ma_feuille).Cells(f, 2).Select
ActiveSheet.Paste
Selection.VerticalAlignment = xlCenter
Selection.WrapText = True
' Sheets("Data").Select
.Cells(i, 3).Copy
Sheets(ma_feuille).Select
Sheets(ma_feuille).Cells(f, 3).Select
ActiveSheet.Paste
Selection.VerticalAlignment = xlCenter
Selection.WrapText = True
' Sheets("Data").Select
.Cells(i, 4).Copy
Sheets(ma_feuille).Select
Sheets(ma_feuille).Cells(f, 4).Select
ActiveSheet.Paste
'Sheets("Data").Select
.Cells(i, 5).Copy
Sheets(ma_feuille).Select
Sheets(ma_feuille).Cells(f, 5).Select
ActiveSheet.Paste
' Sheets("Data").Select
 
Re : Aide pour simplification de mon code

Bonjour,

Range("A3") et Cells(3,1) font tous les 2 appel à la même cellule (colonne 1, ligne 3).
La différence entre les deux est qu'avec Range on précise d'abord le nom de la colonne alors qu'avec Cells on met le numéro de la colonne après celui de la ligne.

Ceci étant rappelé, si tu veux faire exécuter une action répétitive sur plusieurs cellules, tu utiliseras une boucle :

For C = 1 to 6
code qui exécutera ce que l'on veut faire
Next C

Dans ton cas (en reprenant in extenso ton écriture) :

1) avec Cells
For C = 1 to 6
.Cells(i, C).Copy
Sheets(ma_feuille).Select
Sheets(ma_feuille).Cells(f, C).Select
ActiveSheet.Paste
Selection.VerticalAlignment = xlCenter
Selection.WrapText = True
Next C

2) avec Range
For C = 1 To 6
.Range("I" & C).Copy
Sheets(ma_feuille).Select
Sheets(ma_feuille).Range("F" & C).Select
ActiveSheet.Paste
Selection.VerticalAlignment = xlCenter
Selection.WrapText = True
Next C

Maintenant tu gagnerais du temps en sélectionnant toute la plage à copier directement, mais j'ai voulu répondre fidellement à ta question ... sans modifier ton code

Voila, en espérant avoir été assez explicite, sinon à ta disposition
 
Re : Aide pour simplification de mon code

Bonjour Nicinico, bonjour le forum,

Comme je ne suis pas sûr, je te propose ces deux macros. La première fait une copie entre deux onglets du même classeur. La seconde une copie d'un classseur à un autre mais il faut que ces deux soient ouverts :

Code:
Sub Macro1()
'si c'est dasns un autre onglet (tu adapteras les noms des onglets0
Sheets("Feuil1").Range("I1:I6").Copy Destination:=Sheets("Feuil2").Range("F1")
End Sub
Sub Macro2()
'si c'est dans un autre classeur il faut qu'il soit ouvert (tu adapeteras les noms du classeur et des onglets)
ActiveWorkbook.Sheets("Feuil1").Range("I1:I6").Copy Destination:=Workbooks("Classeur2.xls").Sheets("Feuil1").Range("F1")
End Sub

Édition :

Bonjour Jacques on s'est croisés. Ça fait plaisir de te lire.
 
Re : Aide pour simplification de mon code

Merci beaucoup.
Ta solution en selectionnant toute la plage a copier directement m'interesse; peux tu m'en dire plus ?
 
Re : Aide pour simplification de mon code

D'abord un grand bonjour à Robert, également heureux de te retrouver

Doublenico, la réponse à la question supplémentaire que tu as posée t'est donnée par Robert

Regarde, dans l'une ou l'autre de ses macros il a effectué une copie d'une plage :

Sheets("Feuil1").Range("I1:I6").Copy Destination:=Sheets("Feuil2").Range("F1")

la plage est Range("I1:I6"), c'est à dire qu'il prend d'un seul coup toutes les cellules entre la cellule I1 et la cellule I6, donc I1, I2, I3, I4, I5 et I6

Ce cas de figure est assez simple car les cellules sont contigües

Tu peux aussi sélectionner un tableau, exemple : Range(A1:B5)
Dans ce cas tu sélectionneras les cellules A1,A2,A3,A4,A5,B1,B2,B3,B4 et B5

Maintenant si tes cellules ne sont pas contigües, c'est un peu plus compliqué (mais pas trop)

exemple Range("A1,B4") te sélectionne A1 et B4
exemple Range("A1:A3,B2:B4") te sélectionne A1,A2,A3,B2,B3 et B4

Voila, voila

A+ et quand tu veux
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
2
Affichages
771
L
Réponses
9
Affichages
1 K
D
Réponses
4
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…