Macro copie et colle

Fermé
katial Messages postés 1 Date d'inscription jeudi 10 avril 2008 Statut Membre Dernière intervention 10 avril 2008 - 10 avril 2008 à 10:53
pascalouou Messages postés 46 Date d'inscription vendredi 6 octobre 2006 Statut Membre Dernière intervention 29 novembre 2008 - 16 avril 2008 à 21:55
Bonjour,
Tout d'abords je remercie toute personne qui prendra la peine de lire ce message.
Je tien à préciser que ej ne suis pas du tout douée en macro
voila je présente mon problème:

J'ai fait un début de macro:

'je sélectionne la case b2 puis je la copie


Range("b2").Select
Application.CutCopyMode = False
Selection.Copy

'je change de feuille ou la je la colle
'un calcul sur cette feuille se fait automatiquement


Windows("Etude mutation.xls").Activate
Range("$P$10").Select
ActiveSheet.Paste

'je copie sur cette même feuille l'ensemble des résultats

Range("$J$20:$J$60").Select
Application.CutCopyMode = False
Selection.Copy

'je retourne dans ma feuille d'origine ou je copie les résultats a partir de la cellule b3

Windows("transfo sous chargés.xls").Activate
Range("b3").Select
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
End Sub

le problème est que je veux que ces calcul se fasse pour c2, d2,e2... jusqu'à la cellule ?2 soit vide
et que les résultats se colle respectivement en c3,d3,e3,...
.

Je vous remercie par avance
A voir également:

1 réponse

pascalouou Messages postés 46 Date d'inscription vendredi 6 octobre 2006 Statut Membre Dernière intervention 29 novembre 2008 172
16 avril 2008 à 21:55
Bonjour
Vous pouvez utiliser la propriété Cells(x,y) : x est la ligne, y la colonne d'une cellule
D'autre part, une fois votre macro créée, vous pouvez la compacter pour un même résultat.
Ainsi, sans la changer, votre macro peut s'écrire

Range("b2").Copy
Windows("Etude mutation.xls").Range("$P$10").Paste
Range("$J$20:$J$60").Copy
Windows("transfo sous chargés.xls").Range("b3").PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False

Pour faire bien propre, on rajoute le nom du fichier là où il n'est pas, votre macro devient

Windows("transfo sous chargés.xls").Range("b2").Copy
Windows("Etude mutation.xls").Range("$P$10").Paste
Windows("Etude mutation.xls").Range("$J$20:$J$60").Copy
Windows("transfo sous chargés.xls").Range("b3").PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False

Et ensuite on utilise la propriété Cells à la place de Range : votre macro devient

x=2
Windows("transfo sous chargés.xls").Cells(x,2).Copy
Windows("Etude mutation.xls").Range("$P$10").Paste
Windows("Etude mutation.xls").Range("$J$20:$J$60").Copy
Windows("transfo sous chargés.xls").Cells(x,3).PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False

Après, on fait varier x pour balayer toutes les valeurs à copier b2, c2 etc...
il faut également définir x comme un entier et le faire varier de 2 à .... pour aller de la colonne b à ....
pour faire large, on ira de la colonne b à la colonne 100 : exemple:

Dim x As Integer
For x=2 to 100
Windows("transfo sous chargés.xls").Cells(x,2).Copy
Windows("Etude mutation.xls").Range("$P$10").Paste
Windows("Etude mutation.xls").Range("$J$20:$J$60").Copy
Windows("transfo sous chargés.xls").Cells(x,3).PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Next x

et voili voilou ...
remarque: copier une plage de cellules (J20 à J60) et la coller successivement en b3, c3, etc... est bizarre: vous copiez 40 cellules d'abord de b3 à ...40 colonnes plus loin , puis de C3 à ... 40 colonnes plus loin (ce qui écrase 39 valeurs de votre copie précédente) ... à vérifier !

Cordialement,
Pascal
0